第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/*