目录
1.uboot源码编译
首先是将uboot源码编译一次,分析需要结合编译后的文件
.config 是由make xxx_defconfig之后产生的一个副本
u-boot.lds是 arch/arm/cpu/u-boot.lds的副本
u-boot.map是u-boot.bin的内存映射文件,详细记录了固件的内存分布情况
2.确定u-boot的入口函数和入口地址
通过u-boot.lds链接文件可以知道uboot的入口点是_start

通过u-boot.map可以知道u-boot的链接起始地址是0x87800000

3. _start函数分析
_start函数在文件 arch/arm/lib/vectors.S 中有定义

其实就是一个中断向量表,和单片机的套路是一样的,第一个执行的是reset复位函数,reset 函数在 arch/arm/cpu/armv7/start.S 文件中,源码中有众多的start.s文件,但imx6ull是ARMV7架构的,所以是armv7下的start.S

reset的调用关系如下图


本文详细剖析了U-Boot的启动流程,从源码编译到入口函数确定,再到内存布局、外设初始化、命令处理及Linux内核启动。通过对_start、lowlevel_init、_main等关键函数的分析,揭示了U-Boot如何从内部RAM迁移到SDRAM,并最终引导Linux内核的过程。
最低0.47元/天 解锁文章
2120

被折叠的 条评论
为什么被折叠?



