uboot源码分析--_start以及C语言函数入口(三)

一个可执行代码的入口可以通过链接文件(后缀.lds),获知可执行代码的入口就可以找到整个程序的起始代码。
uboot中的make会按相应的硬件平台配置调用u-boot.lds(由于有很多u-boot.lds,至于调用的是哪一个可以直接看编译过程的输出信息,还有就是直接在生成所有目标文件目录下去寻找[make O=目标目录路径]),现截取部分内容如下:
在这里插入图片描述
整个程序的入口取决于连接脚本中ENTRY声明的地方, _start符号是整个程序的入口,_start所在的代码就是整个程序的起始代码,而且又看到代码段(.text)最开始部分是arch/cpu/arm7/start.o,那么就去目录arch/cpu/arm7看看:
在这里插入图片描述
在这里插入图片描述
去start.S中找到_start符号:
在这里插入图片描述
稍微了解一下arm汇编指令,然后再结合arm cpu硬件相关信息基本是可以看懂的,最主要的是汇编部分代码再后续开发中基本不会修改,此处也多做说明,直接跳到c语言函数入口:在这里插入图片描述
可以看到有两个相关文件包含 board_init_f函数,这就需要自己根据配置文件去仔细分析了,这里是arm/arch/lib/board.c文件(不涉及SPI启动方式):
在这里插入图片描述
在这里插入图片描述
初始化最基本的硬件外设资源,将相关参数放在CONFIG_SYS_INIT_SP_ADDR地址处的struct global_data结构信息,包含以下信息(有删减):
在这里插入图片描述
函数board_init_f的最后还是会跳回start.S中的relocate_code符号:在这里插入图片描述
在这里插入图片描述
继续按程序指令的执行流往下看,最终还是会跳转的C语言函数board_init_r:
在这里插入图片描述
我们看看board_init_r函数部分:
在这里插入图片描述
完成基本的包括串口,flash,网络以及中断等资源的初始化之后就进入main_loop,也就是Uboot启动之后在指定时间内按任意键或者指定健后等待输入相应命令,否则就继续启动内核文件。
下节再仔细分析main_loop中如何响应相关命令以及如何启动启动系统内核。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值