电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

Uboot启动流程VIP免费

Uboot启动流程_第1页
1/34
Uboot启动流程_第2页
2/34
Uboot启动流程_第3页
3/34
第1页共34页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页共34页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:breset//复位向量ldrpc,_undefined_instructionldrpc,_software_interruptldrpc,_prefetch_abortldrpc,_data_abortldrpc,_not_usedldrpc,_irq//中断向量ldrpc,_fiq//中断向量…/*theactualresetcode*/reset://复位启动子程序/*设置CPU为SVC32模式*/mrsr0,cpsrbicr0,r0,#0x1forrr0,r0,#0xd3msrcpsr,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_startldrr3,_bss_startsubr2,r3,r2/*r2得到armboot的大小*/addr2,r0,r2/*r2得到要复制代码的末尾地址*/copy_loop:/*重新定位代码*/ldmiar0!,{r3-r10}/*从源地址[r0]复制*/stmiar1!,{r3-r10}/*复制到目的地址[r1]*/第2页共34页第1页共34页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第2页共34页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_IRQsubr0,r0,#(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)#endifsubsp,r0,#12/*为abort-stack预留3个字*/clear_bss:ldrr0,_bss_start/*找到bss段起始地址*/ldrr1,_bss_end/*bss段末尾地址*/movr2,#0x00000000/*清零*/clbss_l:strr2,[r0]/*bss段地址空间清零循环...*/addr0,r0,#4cmpr0,r1bneclbss_l/*跳转到start_armboot函数入口,_start_armboot字保存函数入口指针*/ldrpc,_start_armboot_start_armboot:.wordstart_armboot//start_armboot函数在lib_arm/board.c中实现第二阶段2.lib_arm/board.cstart_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*/第3页共34页第2页共34页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第3页共34页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();c...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

Uboot启动流程

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部