uboot启动流程分析

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

目录

1.uboot源码编译

2.确定u-boot的入口函数和入口地址

3. _start函数分析

4.lowlevel_init函数分析

5._main函数分析

6.board_init_r函数分析

7.run_main_loop函数分析

8.cmd_process分析

9.bootz  启动 Linux 内核过程

10.总结


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的调用关系如下图

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值