文档库 最新最全的文档下载
当前位置:文档库 › 流程管理U启动流程国嵌视频培训

流程管理U启动流程国嵌视频培训

流程管理U启动流程国嵌视频培训
流程管理U启动流程国嵌视频培训

(流程管理)U启动流程

(国嵌视频培训)

20XX年XX月

峯年的企业咨询咸问经验.经过实战验证可以藩地执行的卓越萱理方案.值得您下载拥有

U-Boot 启动过程

(国嵌2440 培训)开发板上电后,执行U-Boot 的第壹条指令,然后顺序执行U-Boot 启动函数。见壹下board/smdk2410/u-boot.lds 这个链接脚本,能够知道目标程序的各部分链接顺序。第壹个要链接的是cpu/arm920t/start.o ,那么U-Boot 的入口指令壹定位于这个程序中。下面分俩阶段介绍启动流程:

第壹阶段

1 .cpu/arm920t/start.S

这个汇编程序是U-Boot 的入口程序,开头就是复位向量的代码。_start:breset// 复位向量ldrpc,_undefined_instruction

ldrpc,_software_interrupt ldrpc,_prefetch_abort

ldrpc,_data_abort ldrpc,_not_used ldrpc,_irq// 中断向量ldrpc,_fiq// 中断向量

/*theactualresetcode*/

reset:// 复位启动子程序

/* 设置CPU 为SVC32 模式*/

mrsr0,cpsr

bicr0,r0,#0x1f

orrr0,r0,#0xd3

msrcpsr,r0

/* 关闭见门狗*/

relocate:/* 把U-Boot 重新定位到RAM*/ adrr0,_start/*r0 是代码的当前位置*/ ldrr1,_TEXT_BASE/*_TEXT_BASE 是RAM 中的地址*/ cmpr0,r1/* 比较r0 和r1 ,判断当前是从Flash 启动,仍是RAM*/

beqstack_setup/* 如果r0 等于r1 ,跳过重定位代码*/ /* 准备重新定位代码*/

ldrr2,_armboot_start ldrr3,_bss_start subr2,r3,r2/*r2 得到armboot 的大小*/ addr2,r0,r2/*r2 得到要复制代码的末尾地址*/ copy_loop:/* 重新定位代码*/

ldmiar0!,{r3-r10}/* 从源地址[r0] 复制*/ stmiar1!,{r3-r10}/* 复制到目的地址[r1]*/ cmpr0,r2/* 复制数据块直到源数据末尾地址[r2]*/ blecopy_loop

/* 初始化堆栈等*/ stack_setup:

ldrr0,_TEXT_BASE/* 上面是128KiB 重定位的u-boot*/

subr0,r0,#CFG_MALLOC_LEN/* 向下是内存分配空间*/

subr0,r0,#CFG_GBL_DATA_SIZE/* 然后是bdinfo 结构体地址空

间*/

#ifdefCONFIG_USE_IRQ

subr0,r0,#(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZ E_FIQ) #endif subsp,r0,#12/* 为abort-stack 预留 3 个字*/ clear_bss:

ldrr0,_bss_start/* 找到bss 段起始地址*/ ldrr1,_bss_end/*bss 段末尾地址*/ movr2,#0x00000000/* 清零*/

clbss_l:strr2,[r0]

/*bss 段地址空间清零循环...*/ addr0,r0,#4

cmpr0,r1 bneclbss_l

/* 跳转到start_armboot 函数入口,_start_armboot 字保存函数入口指针*/

ldrpc,_start_armboot

_start_armboot:.wordstart_armboot//start_armboot 函数于

lib_arm/board.c 中实现

第二阶段

2 .lib_arm/board.c

start_armboot 是U-Boot 执行的第壹个 C 语言函数,完成系统初始化工作,进入主循环,处理用户输入的命令。

3 .init_sequence[]

init_sequence[] 数组保存着基本的初始化函数指针。

init_fnc_t*init_sequence[]={

cpu_init,/* 基本的处理器关联配置--cpu/arm920t/cpu.c*/

board_init,/* 基本的板级关联配置--

board/smdk2410/smdk2410.c*/

interrupt_init,/* 初始化中断处理--

cpu/arm920t/s3c24x0/interrupt.c*/

env_init,/* 初始化环境变量--common/cmd_flash.c*/ init_baudrate,/* 初始化波特率设置--lib_arm/board.c*/ serial_init,/* 串口通讯设置--cpu/arm920t/s3c24x0/serial.c*/

console_init_f,/* 控制台初始化阶段

1--common/console.c*/

display_banner,/* 打印u-boot 信息--lib_arm/board.c*/ dram_init,/* 配置可用的RAM--board/smdk2410/smdk2410.c*/

display_dram_config,/* 显示RAM 的配置大小--

lib_arm/board.c*/

NULL,

};

voidstart_armboot(void)

{

/* 顺序执行init_sequence 数组中的初始化函数*/

for(init_fnc_ptr=init_sequence;*init_fnc_ptr;++init_fnc_ ptr){

if((*init_fnc_ptr)()!=0){

hang();

}

}

/* 配置可用的Flash*/ size=flash_init();

display_flash_config(size);

/*_armboot_start 于u-boot.lds 链接脚本中定义*/

mem_malloc_init(_armboot_start-CFG_MALLOC_LEN);

/* 配置环境变量*/ env_relocate();

/* 从环境变量中获取IP 地址*/

gd->bd->bi_ip_addr=getenv_IPaddr("ipaddr");

/* 以太网接口MAC 地址*/ devices_init();/* 获取列表中的设备*/ jumptable_init();

console_init_r();/* 完整地初始化控制台设备*/ enable_interrupts();/* 使能中断处理*/

/* 通过环境变量初始化*/

if((s=getenv("loadaddr"))!=NULL){ load_addr=simple_strtoul(s,NULL,1 6);

}

/*main_loop() 循环不断执行*/

for(;;)

{

main_loop();/* 主循环函数处理执行用户命令--common/main.c*/

}

命令实现

U-Boot 作为Bootloader ,具备多种引导内核启动的方式。常用的go 和bootm 命令能够直接引导内核映像启动。U-Boot 和内核的关系主要是内核启动过程中参数的传递。

1 .go 命令的实现/*common/cmd_boot.c*/

intdo_go(cmd_tbl_t*cmdtp,intflag,intargc,char*argv[]) {

ulongaddr,rc; intrcode=0;

if(argc<2){ printf("Usage:\n%s\n",cmdtp->usage);

return1; } addr=simple_strtoul(argv[1],NULL,16);

printf("##Startingapplicationat0x%08lX...\n",addr);

rc=((ulong(*)(int,char[]))addr)(--argc,&argv[1]);/* 运行

程序*/

if(rc!=0)rcode=1;

printf("##Applicationterminated,rc=0x%lX\n",rc);/* 如果是运行linux ,这条指令是否能运行?*/ returnrcode;

}

go 命令调用do_go() 函数,跳转到某个地址执行的。如果于这个地址准备好了自引导的内核映像,就能够启动了。尽管go 命令能够带变参,实际使用时不用来传递参数。

2 .bootm 命令的实现

/*common/cmd_bootm.c*/

intdo_bootm(cmd_tbl_t*cmdtp,intflag,intargc,char*arg v[])

{

/* 检查头部*/

if(crc32(0,(uchar*)data,len)!=checksum){ puts("BadHeaderC

hecksum\n");

SHOW_BOOT_PROGRESS(-2); return1;

}

/* 解压缩*/

switch(hdr->ih_comp){ caseIH_COMP_NONE:

if(ntohl(hdr->ih_load)==addr){ printf("XIP%s...",name);

}else{

#ifdefined(CONFIG_HW_WATCHDOG)||defined( CONFIG_WATCHDOG)

size_tl=len;

void*to=(void*)ntohl(hdr->ih_load);

void*from=(void*)data;

printf("Loading%s...",name);

while(l>0){

size_ttail=(l>CHUNKSZ)?CHUNKSZ:l;

WATCHDOG_RESET();

memmove(to,from,tail);

to+=tail;

from+=tail;

l-=tail;

}

#else/*!(CONFIG_HW_WATCHDOG||CONFIG_WA TCHDOG)*/

memmove((void*)ntohl(hdr->ih_load),(uchar*)d ata,len);

#endif/*CONFIG_HW_WATCHDOG||CONFIG_WA TCHDOG*/

}

break;

caseIH_COMP_GZIP:

printf("Uncompressing%s...",name);

if(gunzip((void*)ntohl(hdr->ih_load),unc_len,

(uchar*)data,&len)!=0){

puts("GUNZIPERROR-mustRESETboardtorecove r\n");

SHOW_BOOT_PROGRESS(-6);

do_reset(cmdtp,flag,argc,argv);

}

break;

#ifdefCONFIG_BZIP2

caseIH_COMP_BZIP2: printf("Uncompressing%s...",name);

/* *Ifwe'vegotlessthan4MBofmalloc()space,

*useslowerdecompressionalgorithmwhichrequir

es

*atmost2300KBofmemory.

*/

i=BZ2_bzBuffToBuffDecompress((char*)ntohl(h

dr->ih_load),

&unc_len,(char*)data,len,

CFG_MALLOC_LEN<(4096*1024),0); if(i!=BZ_OK){

printf("BUNZIP2ERROR%d-mustRESETboardtor

ecover\n",i);

SHOW_BOOT_PROGRESS(-6);

udelay(100000);

do_reset(cmdtp,flag,argc,argv);

}

break;

#endif/*CONFIG_BZIP2*/

default:

if(iflag)

enable_interrupts();

printf("Unimplementedcompressiontype%d\n",

hdr->ih_comp);

SHOW_BOOT_PROGRESS(-7);

return1;

}

}

switch(hdr->ih_os){ default:/*handledby(original)Linuxcase*/ caseIH_OS_LINUX: do_bootm_linux(cmdtp,flag,argc,argv,

addr,len_ptr,verify);

break;

caseIH_OS_NETBSD:

do_bootm_netbsd(cmdtp,flag,argc,argv, addr,len_ptr,verify); break;

caseIH_OS_RTEMS: do_bootm_rtems(cmdtp,flag,argc,argv, addr,len_ptr,verify);

break;

caseIH_OS_VXWORKS: do_bootm_vxworks(cmdtp,flag,argc,argv, addr,len_ptr,verify);

break;

caseIH_OS_QNX:

do_bootm_qnxelf(cmdtp,flag,argc,argv, addr,len_ptr,verify);

break;

}

bootm 命令调用do_bootm 函数。这个函数专门用来引导各种操作系统映像,能够支持引导Linux 、vxWorks 、QNX 等操作系统。引导Linux 的时候,调用do_bootm_linux() 函数。

3 .do_bootm_linux 函数的实现

/*lib_arm/armlinux.c*/

voiddo_bootm_linux(cmd_tbl_t*cmdtp,intflag,intargc,c har*argv[], ulongaddr,ulong*len_ptr,intverify)

{ theKernel=(void(*)(int,int,uint))ntohl(hdr->ih_e

p);

/*weassumethatthekernelisinplace*/ printf("\nStartingkernel...\n\n");

theKernel(0,bd->bi_arch_number,bd->bi_boot_params)

;/* 启动内核,传递启动参数*/

}

do_bootm_linux() 函数是专门引导Linux 映像的函数,它仍能够处理ramdisk 文件系统的映像。这里引导的内核映像和ramdisk

映像,必须是U-Boot 格式的。U-Boot 格式的映像能够通过mkimage 工具来转换,其中包含了U-Boot 能够识别的符号。

UBOOT命令详解

常用U-boot命令详解(z) 2010-09-30 15:05:52| 分类:学习心得体会|字号订阅 U-boot发展到现在,他的命令行模式已经非常接近Linux下的shell了,在我编译的 U-boot-2009.11中的命令行模式模式下支持“Tab”键的命令补全和命令的历史记录功能。而且如果你输入的命令的前几个字符和别的命令不重复,那么你就只需要打这几个字符即可,比如我想看这个U-boot的版本号,命令就是“ version”,但是在所有的命令中没有其他任何一个的命令是由“v”开头的,所以只需要输入“v”即可。 [u-boot@MINI2440]# version U-Boot 2009.11 ( 4月04 2010 - 12:09:25) [u-boot@MINI2440]# v U-Boot 2009.11 ( 4月04 2010 - 12:09:25) [u-boot@MINI2440]# base Base Address: 0x00000000 [u-boot@MINI2440]# ba Base Address: 0x00000000 由于U-boot支持的命令实在太多,一个一个细讲不现实,也没有必要。所以下面我挑一些烧写和引导常用命令介绍一下,其他的命令大家就举一反三,或者“help”吧! (1)获取帮助 命令:help 或? 功能:查看当前U-boot版本中支持的所有命令。 [u-boot@MINI2440]#help ?- alias for'help' askenv - get environment variables from stdin base - print or set address offset bdinfo - print Board Info structure bmp - manipulate BMP image data boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootelf - Boot from an ELF image in memory bootm - boot application image from memory bootp - boot image via network using BOOTP/TFTP protocol

企业培训流程章程

培训章程 1培训流程 步骤负责人 公司高层、各部门经理

在培训流程中,涉及到各步所需的用表,统一参看附录中查找。培训纪录,参看附录1;公司技术培训需求调查表,参看附录2;公司管理培训需求调查表,参看附录3;公司培训签到表,参看附录4;公司培训现场记录表,参看附录5;公司学员评价表,参看附录6。 2 培训政策 1、公司员工培训制度的建立,是为了保证公司的工作得以顺利进行,以达到培养和造就一 流的管理人才、一流的技术人才、一流的市场人才,从而创办一流企业的目的。 2、培训的目的是为了提高员工业务水平、文化素质及综合竞争能力,改善员工的知识结构, 统一员工的思想和认识。技术类培训使员工通过培训了解最新的计算机技术发展和动态,跟踪国际最新技术,把握计算机产业的发展方向,增强开发研究和创新的能力,确保公司在未来的发展中立于不败之地。管理类培训使员工通过培训提高相关的管理技能,以此提高公司总体的工作效率,确保公司的稳定发展。 3、员工培训分为非学历培训和学历培训。非学历培训根据不同的内容分为岗前培训、在岗 技能培训和管理培训;学历培训则根据不同的性质和形式分为学位教育和非学位培训。 4、员工既有接受培训的权利,也有培训他人的义务。对公司组织的一切培训活动,所有员 工均应积极参加并提出合理化建议,各部门也应积极配合并协助落实。 5、员工的培训情况将存入个人技术档案,作为其受聘、转正、晋升、加薪、年终考核及职 称评定的重要依据。 3培训形式 3.1非学历培训 公司的非学历培训,根据不同的培训对象及培训内容分为入职培训、人力资源部/公司组织的培训、部门培训、进修/专业考试、协会活动、外部培训。 3.1.1入职培训 培训对象:公司新进员工 培训内容: 1)公司基本情况介绍; 2)公司技术体系介绍 3)公司各项规章制度的贯彻; 4)上岗基本工作技能培训;

UBoot移植详解

u-boot 移植步骤详解 1 U-Boot简介 U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。但是U-Boot不仅仅支持嵌入式Linux 系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS。这是U-Boot中Universal的一层含义,另外一层含义则是U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。这两个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。就目前来看,U-Boot对PowerPC系列处理器支持最为丰富,对Linux的支持最完善。其它系列的处理器和操作系统基本是在2002年11 月PPCBOOT 改名为U-Boot后逐步扩充的。从PPCBOOT向U-Boot的顺利过渡,很大程度上归功于U-Boot的维护人德国DENX软件工程中心Wolfgang Denk[以下简称W.D]本人精湛专业水平和持着不懈的努力。当前,U-Boot项目正在他的领军之下,众多有志于开放源码BOOT LOADER移植工作的嵌入式开发人员正如火如荼地将各个不同系列嵌入式处理器的移植工作不断展开和深入,以支持更多的嵌入式操作系统的装载与引导。 选择U-Boot的理由: ①开放源码; ②支持多种嵌入式操作系统内核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS; ③支持多个处理器系列,如PowerPC、ARM、x86、MIPS、XScale; ④较高的可靠性和稳定性; ④较高的可靠性和稳定性; ⑤高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要求、产品发布等; ⑥丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等; ⑦较为丰富的开发调试文档与强大的网络技术支持; 2 U-Boot主要目录结构 - board 目标板相关文件,主要包含SDRAM、FLASH驱动; - common 独立于处理器体系结构的通用代码,如内存大小探测与故障检测;

培训管理制度与流程

3.公司的培训制度与员工的职业生涯设计相结合,促进公司与个人的共同发展。 4.培训方针是自我培训与传授培训相结合,岗位培训与专业培训相结合。 培训管理制度及流程 一、公司培训管理制度 1.1、培训目的和适用范围 1.1.1、培训目的:是为员工融入公司企业文化、熟悉公司业务发展,树立统一企业价值观、行为模式,了解公司相关制度及工作流程,培养良好的工作态度,职业素养,为提高员工专业知识、技能,满足企业未来业务发展需求。 1.1.2、适用范围:本培训制度适用于全体员工。 1.2、培训管理制度 1.2.1、行政人事部负责公司内外部培训工作管理,协调组织开展内外部培训工作。 1.2.2、各部门负责人和员工不得拒绝参加公司举办的培训课程,如有特殊事须 提前通知部门负责人批准。否则按当日旷工处理。 1.2.3、行政人事部组织培训须提前3天向各部门负责人和员工发送培训通知, 以电子邮件和电话同时通知。行政人事部须做好培训记录,及培训效果评估,并存档备案。(注:入职岗前培训只需提前1天通知。) 1.2.4、根据公司发展状况及公司人力资源利用做出合适的培训组织安排,主要 培训方式为新员工入职培训、岗位培训,在职培训,协议培训。 1.2.5、凡由公司外派参加专业培训,须与公司签订相关培训协议。员工在协议 内,须为公司服务,否则将按照相关法律法规和培训协议的规定补偿公司已支付的培训费用,一并收回所获培训资格证书。 1.2.6、每次培训内容,培训教材,培训费用,参加培训人员,培训讲师指定,部门 负责人协助推荐,行政人事部统一审核,报送总经理批复方可实施。 1.2.7、培训计划的制定,根据部门的具体需求情况及公司业务发展情况,由公

u-boot启动分析

背景: Board →ar7240(ap93) Cpu →mips 1、首先弄清楚什么是u-boot Uboot是德国DENX小组的开发,它用于多种嵌入式CPU的bootloader程序, uboot不仅支持嵌入式linux系统的引导,当前,它还支持其他的很多嵌入式操作系统。 除了PowerPC系列,还支持MIPS,x86,ARM,NIOS,XScale。 2、下载完uboot后解压,在根目录下,有如下重要的信息(目录或者文件): 以下为为每个目录的说明: Board:和一些已有开发板有关的文件。每一个开发板都以一个子目录出现在当前目录中,子目录存放和开发板相关的配置文件。它的每个子文件夹里都有如下文件(以ar7240/ap93为例): Makefile Config.mk Ap93.c 和板子相关的代码 Flash.c Flash操作代码 u-boot.lds 对应的链接文件 common:实现uboot命令行下支持的命令,每一条命令都对应一个文件。例如bootm命令对应就是cmd_bootm.c cpu:与特定CPU架构相关目录,每一款Uboot下支持的CPU在该目录下对应一个子目录,比如有子目录mips等。它的每个子文件夹里都有入下文件: Makefile Config.mk Cpu.c 和处理器相关的代码s Interrupts.c 中断处理代码 Serial.c 串口初始化代码 Start.s 全局开始启动代码 Disk:对磁盘的支持

Doc:文档目录。Uboot有非常完善的文档。 Drivers:Uboot支持的设备驱动程序都放在该目录,比如网卡,支持CFI的Flash,串口和USB等。 Fs:支持的文件系统,Uboot现在支持cramfs、fat、fdos、jffs2和registerfs。 Include:Uboot使用的头文件,还有对各种硬件平台支持的汇编文件,系统的配置文件和对文件系统支持的文件。该目下configs目录有与开发板相关的配置文件,如 ar7240_soc.h。该目录下的asm目录有与CPU体系结构相关的头文件,比如说mips 对应的有asm-mips。 Lib_xxx:与体系结构相关的库文件。如与ARM相关的库放在lib_arm中。 Net:与网络协议栈相关的代码,BOOTP协议、TFTP协议、RARP协议和NFS文件系统的实现。 Tools:生成Uboot的工具,如:mkimage等等。 3、mips架构u-boot启动流程 u-boot的启动过程大致做如下工作: 1、cpu初始化 2、时钟、串口、内存(ddr ram)初始化 3、内存划分、分配栈、数据、配置参数、以及u-boot代码在内存中的位置。 4、对u-boot代码作relocate 5、初始化malloc、flash、pci以及外设(比如,网口) 6、进入命令行或者直接启动Linux kernel 刚一开始由于参考网上代码,我一个劲的对基于smdk2410的板子,arm926ejs的cpu看了N 久,启动过程和这个大致相同。 整个启动中要涉及到四个文件: Start.S →cpu/mips/start.S Cache.S →cpu/mips/cache.S Lowlevel_init.S →board/ar7240/common/lowlevel_init.S Board.c →lib_mips/board.c 整个启动过程分为两个阶段来看: Stage1:系统上电后通过汇编执行代码 Stage2:通过一些列设置搭建了C环境,通过汇编指令跳转到C语言执行. Stage1: 程序从Start.S的_start开始执行.(至于为什么,参考u-boot.lds分析.doc) 先查看start.S文件吧!~ 从_start标记开始会看到一长串莫名奇妙的代码:

2020年(流程管理)培训流程

(流程管理)培训流程

培训章程 1 培训流程 步骤 负责人 公司高层、各部门经理 部门经理/员工 HR 培训主管、员工 HR 培训主管

HR培训主管 在培训流程中,涉及到各步所需的用表,统一参看附录中查找。培训纪录,参看附录1; 拓维公司技术培训需求调查表,参看附录2;拓维公司管理培训需求调查表,参看附录3;拓维公司培训签到表,参看附录4;拓维公司培训现场记录表,参看附录5;拓维

公司学员评价表,参看附录6。 2 培训政策 1、公司员工培训制度的建立,是为了保证公司的工作得以顺利进行,以达到培养和造 就一流的管理人才、一流的技术人才、一流的市场人才,从而创办一流企业的目的。 2、培训的目的是为了提高员工业务水平、文化素质及综合竞争能力,改善员工的知识 结构,统一员工的思想和认识。技术类培训使员工通过培训了解最新的计算机技术发展和动态,跟踪国际最新技术,把握计算机产业的发展方向,增强开发研究和创新的能力,确保公司在未来的发展中立于不败之地。管理类培训使员工通过培训提高相关的管理技能,以此提高公司总体的工作效率,确保公司的稳定发展。 3、员工培训分为非学历培训和学历培训。非学历培训根据不同的内容分为岗前培训、 在岗技能培训和管理培训;学历培训则根据不同的性质和形式分为学位教育和非学位培训。 4、员工既有接受培训的权利,也有培训他人的义务。对公司组织的一切培训活动,所 有员工均应积极参加并提出合理化建议,各部门也应积极配合并协助落实。 5、员工的培训情况将存入个人技术档案,作为其受聘、转正、晋升、加薪、年终考核 及职称评定的重要依据。 3培训形式 3.1非学历培训

Uboot如何向内核传递参数

Uboot如何向内核传递参数 一:启动参数的传递过程 启动参数是包装在数据结构里的,在linux kernel启动的时候,bootloader把这个数据结构拷贝到某个地址, 在改动PC跳向内核接口的同时,通过通用寄存器R2来传递这个地址的值,下面这句话就是uboot跳向linux kernel的代码(bootm命令) theKernel (0, bd->bi_arch_number, bd->bi_boot_params); thekernel其实不是个函数,而是指向内核入口地址的指针,把它强行转化为带三个参数的函数指针,会把三个 参数保存到通用寄存器中,实现了向kernel传递信息的功能,在这个例子里,会把R0赋值为0,R1赋值为机器号 R2赋值为启动参数数据结构的首地址 因此,要向内核传递参数很简单,只要把启动参数封装在linux预定好的数据结构里,拷贝到某个地址(一般约定俗成是内存首地址+100dex) 二:启动参数的数据结构 启动参数可保存在两种数据结构中,param_struct和tag,前者是2.4内核用的,后者是2.6以后的内核更期望用的 但是,到目前为止,2.6的内核也可以兼容前一种结构,两种数据结构具体定义如下(arm cpu): struct param_struct { union { struct { unsigned long page_size; /* 0 */ unsigned long nr_pages; /* 4 */ unsigned long ramdisk_size; /* 8 */ unsigned long flags; /* 12 */ #define FLAG_READONLY 1 #define FLAG_RDLOAD 4 #define FLAG_RDPROMPT 8 unsigned long rootdev; /* 16 */ unsigned long video_num_cols; /* 20 */ unsigned long video_num_rows; /* 24 */ unsigned long video_x; /* 28 */ unsigned long video_y; /* 32 */ unsigned long memc_control_reg; /* 36 */ unsigned char sounddefault; /* 40 */ unsigned char adfsdrives; /* 41 */ unsigned char bytes_per_char_h; /* 42 */ unsigned char bytes_per_char_v; /* 43 */ unsigned long pages_in_bank[4]; /* 44 */ unsigned long pages_in_vram; /* 60 */

《培训课程开发流程管理规定》

课程开发流程规范 为“加强员工培训,提高员工综合素质水平”,加强公司培训体系建设,规范培训课程的开发与设计工作,加强公司培训工作的规范化、制度化,特制订本规范。 一、课程开发流程 培训课程开发流程主要包括:课程确立、课程开发、课程评估、课程归档四个大的阶段,每个阶段又包括具体的、更详细的环节。流程图如下所示: 对流程图的说明: 1、培训课程的确立:包括培训需求调查、培训课程设置、培训课程的说明3个环节。 1.1、培训需求调查 通过绩效考核、民主评议等方法确认员工现在岗位或期望岗位要求应具备的观念、技能 与员工现实的观念和技能的差距。分析产生上述差距的原因,可通过培训解决的差距就是培训需求。

调查方法:访谈法、问卷调查法、重点团队分析。 调查对象:员工、直接上级、人力资源部、部门总经理、总裁室成员。 参与人员:文化与培训部策划处、课程开发处、实施支持处全体人员,部门培训负责人、培训专岗,讲师,咨询公司等。 1.2、培训课程设置:由文化与培训部根据调查得到的培训需求结果,针对特定对象的培训需求设置相应的培训课程。 1.3、课程说明:由文化与培训部对培训课程进行说明,包括对课程目标、培训对象、参训人数、课时、师资、课程开发策略(自行开发、外部引进、或与外部培训机构合作开发)、所需资源(培训设备、资料、成本预算)等方面的说明。 2、课程开发:包括课程内容设计调查、搜集资料、确定课程大纲、初步开发(编写讲义初稿)、专项小组研讨、编写课程资料6个环节。 2.1课程内容设计的调查:通过调查,进一步了解学员的问题和期望、分析学员特点(学员的数量、学员的学习经验、学员的能力水平等),确定培训所要求讲师的经验和能力,收集与课程有关的案例等资料。 2.2搜集资料:确定培训需要的知识、技能、态度、观点(主流和非主流的观点)、案例(本企业和外企业的案例)等。 2.3确定课程大纲:确定课程大纲包括以下几个步骤: ?确定培训目标 ?合理安排教学内容呈现顺序 ?选择培训方法 ?时间分配 ?确定培训所要求的资源:场地、教具等。 2.4初步开发:编写讲义初稿 2.5专项小组研讨:课程开发专项小组(合作开发一门课程的相关人员)对讲义初稿进行研讨,并修改订正。 2.6编写课程资料:讲义初稿经专项小组研讨、合格后,由课程开发人员编写课程资料,包括:PPT材料,讲师手册,学员手册,以及作业、试题,课程效果评估问卷等。(前3项参照附件1《XXXX公司课程开发评估标准》) 3、课程评估:包括课程认证、讲师试讲、讲师认证三个环节。 3.1 课程认证:由课程开发处人员及相关业务部门负责人成立课程评估小组,课程资料

UBoot源码分析1

?UBoot源码解析(一)

主要内容 ?分析UBoot是如何引导Linux内核 ?UBoot源码的一阶段解析

BootLoader概念?Boot Loader 就是在操作系统内核运行之前运行 的一段小程序。通过这段小程序,我们可以初始 化硬件设备、建立内存空间的映射图,从而将系 统的软硬件环境带到一个合适的状态,以便为最 终调用操作系统内核准备好正确的环境 ?通常,Boot Loader 是严重地依赖于硬件而实现 的,特别是在嵌入式世界。因此,在嵌入式世界 里建立一个通用的Boot Loader 几乎是不可能的。 尽管如此,我们仍然可以对Boot Loader 归纳出 一些通用的概念来,以指导用户特定的Boot Loader 设计与实现。

UBoot来源?U-Boot 是 Das U-Boot 的简称,其含义是 Universal Boot Loader,是遵循 GPL 条款的开放源码项目。最早德国 DENX 软件工程中心的 Wolfgang Denk 基于 8xxROM 和 FADSROM 的源码创建了 PPCBoot 工程项目,此后不断 添加处理器的支持。而后,Sysgo Gmbh 把 PPCBoot 移 植到 ARM 平台上,创建了 ARMBoot 工程项目。最终, 以 PPCBoot 工程和 ARMBoot 工程为基础,创建了 U- Boot 工程。 ?而今,U-Boot 作为一个主流、通用的 BootLoader,成功地被移植到包括 PowerPC、ARM、X86 、MIPS、NIOS、XScale 等主流体系结构上的百种开发板,成为功能最多、 灵活性最强,并且开发最积极的开源 BootLoader。目前。 U-Boot 仍然由 DENX 的 Wolfgang Denk 维护

xx集团公司工厂内部培训工作流程

商用空调内部培训运作指引 一、目的 为充分利用商用空调公司内部的智力资源,促进公司内部培训的良性开展,积极培养和提高所有员工的综合素质和专业技能,特制定本运作指引。 二、适用范围 本指引适用于商用空调公司内部组织的各种类型的培训。 三、内部培训申请和安排 各部门提出内部培训需求。为保证培训的质量和工作安排,各部门应在拟定培训日前至少10天将内部培训项目申请表(见附页)有效送达管理部,否则将由管理部统一安排时间。管理部在接到培训需求后1天内作出答复。 1.管理部自主安排相关内部培训。 2.管理部将于每周五在全公司范围内公布下一周培训计划。 四、培训讲师确定 管理部和培训需求部门共同协商确定培训讲师。为帮助员工综合素质的提升,公司鼓励内部员工走上讲台讲课。 内部讲师总体要求: 1.具有认真负责的工作态度和高度的敬业精神,能在不影响工作的前提下积极配合公司培训工作的开展; 2.在某一岗位专业技能上有较高的理论知识和实际工作经验;

3.形象良好,有较好的语言表达能力; 4.具备编写讲义、教材、测试题的能力。 为鼓励员工积极投入到内部培训的活动中来,公司将在取得培训效果的基础上给予内部讲师一定的授课补助,具体标准如下: 五、培训教材 为确保培训的质量和效果,公司规定所有的内部培训都必须具备培训教材。培训教材由内部讲师编制,管理部跟进。教材应在培训时间前2天反馈至管理部人力资源管理处,否则取消内部讲师授课资格。 六、培训效果评估 为提高培训质量,每次培训结束后,应书面评估培训效果。评估对象有:(1)讲师的授课情况;(2)学员的知识接受情况。管理部负责对评估结果进行分析和存档。 七、附件 1.附表一:《内部培训项目申请表》 2.附表二:《内部讲师资格评聘表》

uboot启动常见的错误汇总

【uboot启动常见的错误汇总】 1. operating at 100M full duplex mode *** ERROR: `ethaddr' not set dm9000 i/o: 0x5000000, id: 0x90000a46 DM9000: running in 16 bit mode MAC: 00:00:00:00:00:00 operating at 100M full duplex mode Wrong Image Format for bootm command ERROR: can't get kernel image! 原因是:没有设置mac地址,需要重新设置 setenv ethaddr 01:02:03:04:05:06 saveenv/save 2.在开发板上ping ubuntu的ip地址ping不通 1.网线没插 2.ubuntu没有打开 3.ping 的过程中,ubuntu会扫描ip地址,会一直去获取ip地址,但是开发板没有分配ip地址的权利,也就是ubuntu获取不了ip地址,同时查看ubuntu 的ip地址是没有的。 1.设置临时的ip地址 sudo ifconfig eth0 192.168.1.* 2.永久生效 在ubuntu的右上角添加静态ip地址。 3.发现ubuntu的右上角网络图标类似于wifi的图标,如何将这个图标改成网络的 图标 sudo /etc//init.d/network-manager restart 如何执行之后,还是wifi图标 sudo vi /etc/NetworkManager/NetworkManager.conf managed=false false --->true sudo /etc//init.d/network-manager restart 如果执行之后,还是wifi图标 重启系统 4.你的pc电脑已经打开wifi网,需要将无线网关闭 5.虚拟机网卡设置出错,需要将nat设置为桥接 6.换开发板

员工上岗培训管理流程

员工上岗培训管理办法 一、目的: 确保部门所有岗位员工的岗位操作水平和基本工作能力能够满足岗位工作需要。 二、适用范围: 该管理办法作为《员工培训管理制度》的附加说明适用于公司全体员工。 三、具体实施办法: (一)由人力资源部负责组织各部门/车间编写本部门/车间各岗位上岗培训实施计划,培训计划中必须明确列出满足各岗位基本工作要求的学习内容和所 需学习时间。如岗位工作内容发生变动,各部门和车间负责人应在岗位内 容发生变化当月将变动内容报人力资源部,由人力资源部完成上岗培训实 施计划的修改工作。 (二)人力资源部负责在员工入职次日将上岗培训实施计划表发至受训人和培训老师处。(车间员工的培训计划可在入职一周确定学习岗位后予以发放, 并统一悬挂在车间固定位置) (三)培训老师和各岗位员工严格按照《上岗培训实施计划表》上的时间表进行培训和学习。每项培训内容结束后,由培训老师在员工的《上岗培训实施 计划表》上签字确认已进行培训。(因节假日或特殊原因导致培训学习时 间不足的,培训期顺延) (四)由人力资源部组织各部门经理、主管及相关工程师针对公司各岗位编写上岗考试题(设备部和技术部各岗位应同时编写实际操作考核内容)。考试 内容应涵盖各岗位工作重点内容(操作要领)、基本工作流程和基本工作 要求。 (五)员工培训到期后,携带本人的《上岗培训实施计划表》主动到人力资源部参加理论考试。如《上岗培训实施计划表》上无培训老师签字确认已培训 者,将不予考试。员工理论考试成绩达到80分以上(含80分)为“合格”。 理论考试时间为:周二、周四:上午9:00-11:00,下午3:00-4:00、17:00-18:00。 (六)员工理论考试合格后,由培训老师在1-2周内对该员工操作岗位进行实际操作考核,考核成绩达到80分以上(含80分)为“合格”。 (七)当新入职员工培训结束,通过上岗考试且成绩合格后,由人力资源部统一

《培训课程开发流程管理规定》

四个大 课程确立 对流程图的说明: 1、培训课程的确立: 培训课程设置 包括培训需求调查、培训课程说明置、培训 果程的说 明3个环节。 1.1、培训需求调查 通过绩效考核、民主评议等方法确认员工现 课程内容设计调查 位或期望岗位要求应 具备的观念、技能与员工现实的观念和技能的差距。分析产生上述差距的原 确定课程大纲 岗集资 因,可通过培训解决的差距就是培训需求 卷调 查法、点 调查方法:访谈法L 团队初步开发 (编写讲义初稿) 调查对象:员工、直接上级、人力资源 参与人员:文化与培训部策划处、课程 1.2、培训课程设置:由文化与培训部 根据调查得到 $培训需求结果, 1.3、课程说明:由文化 培训对象、参训人数、课时、帅资、课程开; 培对培训 II 课程进行说试 讲 包括对课程目标、 发策略(讲行开发、外部引进、 或与外部培训机构合彳 ―、 课程归档 2、课程开发: 包括课程内容设计调查、搜集资料、确定课程大纲、初步 课程开发流程规范 为“加强员工培训,提高员工综合素质水平” ,加强公司培训体系建设,规范培训 课程的开发与设计工作,加强公司培训工作的规范化、制度化,特制订本规范。 一、课程开发流程 培训课程开发流程主要包括: 课程确立、课程开发、课程评估、课程归档 的阶段,每个阶段又包括具体的、更详细的环节。流程图如下所示: 培训需求调查 、部项门总经讨、总裁室成员。 开发处、实施支持处全体人员, 部门 培训负责人、培训专岗,讲师,咨询公 ____________ 对特定对象的培训需求设置相应的培训课程 所需资源(培训设备、冻料、成本预算)等 -------- 已归档的课程定期更新 开发(编写讲义初稿)、专项小组研讨、编写课程资料 6个环节。 2. 1课程内容设计的调查: 通过调查,进一步了解学员的问题和期望、 方面的说明。

uboot_freescale_imx51_start.s_详解

/* * *Purpose: the document is used to learn detailed information aboutimx51 cpu start.S, *referring to some documents on websites. *file address: U-boot-2009.08/Cpu/Arm_cortexa8/start.S * * writer: xfhai 2011.7.22 * *Instruction: *1.@xxxx : indicates annotation *2./***** *** *****/ : stand for code in my files *3.instructions refers to code not included in my file * */ Section 1: uboot overview 大多数bootloader都分为stage1和stage2两部分,u-boot也不例外。依赖于CPU体系结构的代码(如设备初始化代码等)通常都放在stage1且可以用汇编语言来实现,而stage2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。 1、Stage1 start.S代码结构 u-boot的stage1代码通常放在start.S文件中,他用汇编语言写成,其主要代码部分如下:==> (1)定义入口。由于一个可执行的Image必须有一个入口点,并且只能有一个全局入口,通常这个入口放在ROM(Flash)的0x0地址,因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本来完成。 ==>(2)设置异常向量(Exception Vector)。 ==>(3)设置CPU的速度、时钟频率及终端控制寄存器。 ==>(4)初始化内存控制器。 ==>(5)将ROM中的程序复制到RAM中。 ==>(6)初始化堆栈。 ==>(7)转到RAM中执行,该工作可使用指令ldr pc来完成。 2、Stage2 C语言代码部分 lib_arm/board.c中的start arm boot是C语言开始的函数也是整个启动代码中C语言的主函数,同时还是整个u-boot(armboot)的主函数,该函数只要完成如下操作: ==>(1)调用一系列的初始化函数。 ==>(2)初始化Flash设备。 ==>(3)初始化系统内存分配函数。 ==>(4)如果目标系统拥有NAND设备,则初始化NAND设备。 ==>(5)如果目标系统有显示设备,则初始化该类设备。 ==>(6)初始化相关网络设备,填写IP、MAC地址等。 ==>(7)进去命令循环(即整个boot的工作循环),接受用户从串口输入的命令,然后进行相应的工作。

uboot启动代码详解

·1 引言 在专用的嵌入式板子运行GNU/Linux 系统已经变得越来越流行。一个嵌入式Linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序。固化在固件(firmware)中的boot 代码,也就是Boot Loader,它的启动通常分为两个阶段。 2. Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。 3. 文件系统。包括根文件系统和建立于Flash 内存设备之上文件系统,root fs。 4. 用户应用程序。特定于用户的应用程序。有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式GUI 有:MicroWindows 和MiniGUI 等。 引导加载程序是系统加电后运行的第一段软件代码。回忆一下PC 的体系结构我们可以知道,PC 机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR 中的OS Boot Loader(比如,LILO 和GRUB 等)一起组成。BIOS 在完成硬件检测和资源分配后,将硬盘MBR 中的Boot Loader 读到系统的RAM 中,然后将控制权交给OS Boot Loader。Boot Loader 的主要运行任务就是将内核映象从硬盘上读到RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。 而在嵌入式系统中,通常并没有像BIOS 那样的固件程序(注,有的嵌入式CPU 也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由Boot Loader 来完成。比如在一个基于ARM7TDMI core 的嵌入式系统中,系统在上电或复位时通常都从地址 0x00000000 处开始执行,而在这个地址处安排的通常就是系统的Boot Loader 程序。·2 bootloader简介 简单地说,Boot Loader (引导加载程序)就是在操作系统内核运行之前运行的一段小程序,它的作用就是加载操作系统, 实现硬件的初始化,建立内存空间的映射图,为操作系统内核准备好硬件环境并引导内核的启动。如上图所示的那样在设备的启动过程中bootloader位于最底层,首先被运行来引导操作系统运行,很容易可以看出bootloader是底层程序所以它的实现严重地依赖于硬件,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的BootLoader几乎是不可能的。尽管如此,一些功能强大、支持硬件环境较多的BootLoader也被广大的使用者和爱好者所支持,从而形成了一些被广泛认可的、较为通用的的bootloader实现。 2.1 Boot Loader 所支持的CPU 和嵌入式板 每种不同的CPU 体系结构都有不同的Boot Loader。有些Boot Loader 也支持多种体系结构的CPU,比如U-Boot 就同时支持ARM 体系结构和MIPS 体系结构。除了依赖于CPU 的体系结构外,Boot Loader 实际上也依赖于具体的嵌入式板级设备的配置。这也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种CPU 而构建的,要想让运行在一块板子上的Boot Loader 程序也能运行在另一块板子上,通常也都需要修改Boot Loader 的源程序。 2.2 Boot Loader 的安装媒介(Installation Medium)

Uboot启动代码解析

U-Boot启动过程 开发板上电后,执行U-Boot的第一条指令,然后顺序执行U-Boot 启动函数。看一下board/smdk2410/u-boot.lds这个链接脚本,可以知道目标程序的各部分链接顺序。第一个要链接的是cpu/arm920t/start.o,那么U-Boot的入口指令一定位于这个程序中。下面分两阶段介绍启动流程: 第一阶段 1.cpu/arm920t/start.S 这个汇编程序是U-Boot的入口程序,开头就是复位向量的代码。_start: b reset //复位向量 ldr pc, _undefined_instruction ldr pc, _software_interrupt ldr pc, _prefetch_abort ldr pc, _data_abort ldr pc, _not_used ldr pc, _irq //中断向量 ldr pc, _fiq //中断向量 … /* the actual reset code */ reset: //复位启动子程序

/* 设置CPU为SVC32模式 */ mrs r0,cpsr bic r0,r0,#0x1f orr r0,r0,#0xd3 msr cpsr,r0 /* 关闭看门狗 */ ………… relocate: /* 把U-Boot重新定位到RAM */ adr r0, _start /* r0是代码的当前位置 */ ldr r1, _TEXT_BASE /*_TEXT_BASE是RAM中的地址 */ cmp r0, r1 /* 比较r0和r1,判断当前是从Flash启动,还是RAM */ beq stack_setup /* 如果r0等于r1,跳过重定位代码 */ /* 准备重新定位代码 */ ldr r2, _armboot_start ldr r3, _bss_start sub r2, r3, r2 /* r2 得到armboot的大小 */ add r2, r0, r2 /* r2 得到要复制代码的末尾地址 */ copy_loop: /* 重新定位代码 */ ldmia r0!, {r3-r10} /*从源地址[r0]复制 */

UBOOT详细解读

大多数bootloader都分为stage1和stage2两部分,u-boot也不例外。依赖于CPU体系结构的代码(如设备初始化代码等)通常都放在stage1且可以用汇编语言来实现,而stage2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。 1、Stage1 start.S代码结构 u-boot的stage1代码通常放在start.S文件中,他用汇编语言写成,其主要代码部分如下:(1)定义入口。由于一个可执行的Image必须有一个入口点,并且只能有一个全局入口,通常这个入口放在ROM(Flash)的0x0地址,因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本来完成。 (2)设置异常向量(Exception Vector)。 (3)设置CPU的速度、时钟频率及终端控制寄存器。 (4)初始化内存控制器。 (5)将ROM中的程序复制到RAM中。 (6)初始化堆栈。 (7)转到RAM中执行,该工作可使用指令ldr pc来完成。 2、Stage2 C语言代码部分 lib_arm/board.c中的start arm boot是C语言开始的函数也是整个启动代码中C语言的主函数,同时还是整个u-boot(armboot)的主函数,该函数只要完成如下操作: (1)调用一系列的初始化函数。 (2)初始化Flash设备。 (3)初始化系统内存分配函数。 (4)如果目标系统拥有NAND设备,则初始化NAND设备。 (5)如果目标系统有显示设备,则初始化该类设备。 (6)初始化相关网络设备,填写IP、MAC地址等。 (7)进去命令循环(即整个boot的工作循环),接受用户从串口输入的命令,然后进行相应的工作。 3、U-Boot的启动顺序(示例,其他u-boot版本类似) cpu/arm920t/start.S @文件包含处理 #include @由顶层的mkconfig生成,其中只包含了一个文件:configs/<顶层makefile中6个参数的第1个参数>.h #include #include

员工培训管理制度及流程

员工培训管理制度及流程 一、公司培训管理制度 1.1 、培训目的和适用范围 1.1.1 、培训目的:是为员工融入公司企业文化、熟悉公司业务发展,树立统一企业价值观、行为模式,了解公司相关制度及工作流程,培养良好的工作态度,职业素养,为提高员工专业知识、技能,满足企业未来业务发展需求。 1.1.2 、适用范围:本培训制度适用于全体员工。 1.2、培训管理制度 1.2.1 、行政人事部负责公司内外部培训工作管理,协调组织开展内外部培训工作。 1.2.2 、各部门负责人和员工不得拒绝参加公司举办的培训课程, 如有特殊事须提 前通知部门负责人批准。 否则按当日旷工处理。 1.2.3 、行政人事部组织培训须提前3 天 向各部门负责人和员工发送培训通知,以电子邮件和电话同时通知。行政人事部须做好培训记录,及培训效果评估,并存档备案。(注:入职岗前培训只需提前1 天通知。) 1.2.4 、根据公司发展状况及公司人力资源利用做出合适的培训组织安排,主要培训方式为新员工入职培训、岗位培训,在职培训,协议培训。

1.2.5 、凡由公司外派参加专业培训,须与公司签订相关培训协议。 员工在协议内, 须为公司服务,否则将按照相关法律法规和培训协议的规定补偿公司已支付的培训费用,一并收回所获培训资格证书。 1.2.6 、每次培训内容 J 培训教材 J 培训费用,参加培训人员,培训讲师指定,部门负责人协助推荐 J 行政人事部统一审核,报送总经理批复方可实施。 1.2.7 、培训计划的制定,根据部门的具体需求情况及公司业务发展情况,由公司 统一组织培训计划。 1.2.8 、新员工入职培训和岗位培训为固定培训内容,必须严格执行。 、培训管理流程 2.1、新员工入职培训 2.1.1 、新员工入职培训内容: 1)公司简介与企业文化; 2)人事管理制度与流程;

U_Boot第一启动阶段Uboot启动分析笔记-----Stage1(start.S与lowlevel_init.S详解)

Uboot启动分析笔记-----Stage1(start.S与lowlevel_init.S详解) Uboot启动分析笔记-----Stage1(start.S与lowlevel_init.S详解) 1 u-boot.lds 首先了解uboot的链接脚本board/my2410/u-boot.lds,它定义了目标程序各部分的链接顺序。OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") /*指定输出可执行文件为ELF格式,32为,ARM小端*/ OUTPUT_ARCH(arm) /*指定输出可执行文件为ARM平台*/ ENTRY(_start) /*起始代码段为_start*/ SECTIONS { /* 指定可执行image文件的全局入口点,通常这个地址都放在ROM(flash)0x0位置*、. = 0x00000000;从0x0位置开始 . = ALIGN(4); 4字节对齐 .text : {

cpu/arm920t/start.o (.text) board/my2440/lowlevel_init.o (.text) *(.text) } . = ALIGN(4); .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) } . = ALIGN(4); .data : { *(.data) } /* 只读数据段,所有的只读数据段都放在这个位置*/ . = ALIGN(4); .got : { *(.got) } /*指定got段, got段式是uboot自定义的一个段, 非标准段*/ . = .; __u_boot_cmd_start = .; /*把__u_boot_cmd_start赋值为当前位置, 即起始位置*/ .u_boot_cmd : { *(.u_boot_cmd) } /* u_boot_cmd段,所有的u-boot命令相关的定义都放在这个位置,因为每个命令定义等长,所以只要以__u_boot_cmd_start为起始地址进行查找就可以很快查找到某一个命令的定义,并依据定义的命令指针调用相应的函数进行处理用户的任务*/ __u_boot_cmd_end = .; /* u_boot_cmd段结束位置,由此可以看出,这段空间的长度并没有严格限制,用户可以添加一些u-boot的命令,最终都会在连接是存放在这个位置。*/

相关文档