启动流程分析(2)-uboot

本文详细分析了UBoot的启动流程,包括其在EMMC的存放地址、启动过程中的两个阶段,以及start.s汇编代码的解析。在第一阶段,UBoot的start.s设置异常向量、初始化内存并加载第二阶段代码到RAM。链接文件u-boot.lds在内存布局中起关键作用。第二阶段涉及C代码的执行,进行系统初始化和命令循环。
摘要由CSDN通过智能技术生成

1       Uboot存放地址

Uboot是是运行完固化的Boot Code后,Boot Code会跳转到选定设备的指定地址去运行,以EMMC为例,见下图

起始的前0x200512BMBR,接着的是预留的Second Image TableBoot Image( uboot)应该放在0x400(1024)的地址,即烧写uboot的时候,就应该烧写在emmc主分区的1024位置,这也和烧录uboot的脚本“sudo dd if=./u-boot.bin of=./u-boot-no-padding.bin bs=1024 skip=1; sync”相对应。

 

2       Uboot启动

Uboot启动一般认为是由两个阶段来运行,一是汇编start.s运行阶段,二是由其他C语言完成的第二阶段,一下做简要分析。

 

2.1 第一阶段分析

第一阶段主要是start.s的运行,主要完成定义入口地址、设置异常向量、设置CPU的频率、初始化内存控制器、加载Uboot第二阶段代码代码到RAM、初始化堆栈、跳转到RAM运行第二阶段程序。按照规定的0x400存放这段代码,BOOT CODE会加载这段代码到内部RAM运行,根据不同的boot device,具体加载的偏移地址和加载程序范围如下图:

可见到,对于emmc来说,加载的偏移地址为0x400,大小为2Kbyte

通过make mx53_smd_android_config配置自己的板子,查看uboot-imx下的Makefile可知

mx53_smd_android_config            :unconfig

       $(MKCONFIG) $(@:_config=) arm arm_cortexa8 mx53_smd freescale mx53

2.1.1 链接文件u-boot.lds

在看链接文件之前,我们先看一下,生成的map文件如下(仅截取memory map一部分)

Memory Configuration

Name             Origin             Length             Attributes

*default*        0x00000000         0xffffffff

 

Linker script and memory map

                0x00000000                . = 0x0

                0x00000000                . = ALIGN (0x4)

 

.text           0x77800000    0x258a8

 board/freescale/mx53_mpvceo/flash_header.o(.text.flasheader)

 .text.flasheader

                0x77800000      0x5cc board/freescale/mx53_mpvceo/flash_header.o

 cpu/arm_cortexa8/start.o()

 *fill*         0x778005cc       0x14 00

 .text          0x778005e0      0x440 cpu/arm_cortexa8/start.o

                0x77800620                _end_vect

                0x77800628                _bss_start

                0x7780062c                _bss_end

                0x77800624                _armboot_start

                0x778005e0                _start

                0x77800960                v7_flush_dcache_all

 .data      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值