02-U-boot的启动过程源码分析

02-U-boot的启动过程源码分析

ID:41113957

大小:650.50 KB

页数:85页

时间:2019-08-16

02-U-boot的启动过程源码分析_第1页
02-U-boot的启动过程源码分析_第2页
02-U-boot的启动过程源码分析_第3页
02-U-boot的启动过程源码分析_第4页
02-U-boot的启动过程源码分析_第5页
资源描述:

《02-U-boot的启动过程源码分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、U-Boot的启动过程源码分析首先强调,本书使用的U-Boot从NORFlash启动,下面以开发板smdk2410的U-Boot为例。U-Boot属于两阶段的Bootloader,第一阶段的文件为cpu/arm920t/start.S和board/smdk2410/lowlevel_init.S,前者是平台相关,后者是开发板相关。[编辑]U-Boot第一阶段代码分析它与15.1.2节中描述的Bootloader第一阶段所完成的功能可以一一对应:(1)硬件设备初始化。依次完成如下设置:将CPU的工作模式设为管理模式(svc)

2、,关闭WATCHDOG,设置FCLK、HCLK、PCLK的比例(即设置CLKDIVN寄存器),关闭MMU、CACHE。代码都在cpu/arm920t/start.S中,注释也比较完善,读者有不明白的地方可以参考前面硬件实验的相关章节。(2)为加载Bootloader的第二阶段代码准备RAM空间。所谓准备RAM空间,就是初始化内存芯片,使它可用。对于S3C2410/S3C2440,通过在start.S中调用lowlevel_init函数来设置存储控制器,使得外接的SDRAM可用。代码在board/smdk2410/lowle

3、vel_init.S中。注意:lowlevel_init.S文件是开发板相关的,这表示如果外接的设备不一样,可以修改lowlevel_init.S文件中的相关宏。lowlevel_init函数并不复杂,只是要注意这时的代码、数据都只保存在NORFlash上,内存中还没有,所以读取数据时要变换地址。代码如下:129_TEXT_BASE:130.wordTEXT_BASE131132.globllowlevel_init133lowlevel_init:134/*memorycontrolconfiguration*/135/

4、*maker0relativethecurrentlocationsothatit*/136/*readsSMRDATAoutofFLASHratherthanmemory!*/137ldrr0,=SMRDATA138ldrr1,_TEXT_BASE139subr0,r0,r1140ldrr1,=BWSCON/*BusWidthStatusController*/141addr2,r0,#13*41420:143ldrr3,[r0],#4144strr3,[r1],#4145cmpr2,r0146bne0b147148/*

5、everythingisfinenow*/149movpc,lr150151.ltorg152/*theliteralpoolsorigin*/153154SMRDATA:/*13个寄存器的值*/155.word……156.word……第137~139行进行地址变换,因为这时候内存中还没有数据,不能使用连接程序时确定的地址来读取数据:第137行中SMRDATA表示这13个寄存器的值存放的开始地址(连接地址),值为0x33F8xxxx,处于内存中。第138行获得代码段的起始地址,它就是第130行中的“TEXT_BASE”,其

6、值在board/smdk2410/config.mk中定义:“TEXT_BASE=0x33F80000”。第139行将0x33F8xxxx与0x33F80000相减,这就是13个寄存器值在NORFlash上存放的开始地址。(3)拷贝Bootloader的第二阶段代码到RAM空间中。这里将整个U-Boot的代码(包括第一、第二阶段)都复制到SDRAM中,这在cpu/arm920t/start.S中实现:164relocate:/*将U-Boot复制到RAM中*/165adrr0,_start/*r0=当前代码的开始地址*/1

7、66ldrr1,_TEXT_BASE/*r1=代码段的连接地址*/167cmpr0,r1/*测试现在是在Flash中还是在RAM中*/168beqstack_setup/*如果已经在RAM中(这通常是调试时,直接下载到RAM中),*则不需要复制*/169170ldrr2,_armboot_start/*_armboot_start在前面定义,是第一条指令的运行地址*/171ldrr3,_bss_start/*在连接脚本u-boot.lds中定义,是代码段的结束地址*/172subr2,r3,r2/*r2=代码段长度*/17

8、3addr2,r0,r2/*r2=NORFlash上代码段的结束地址*/174175copy_loop:176ldmiar0!,{r3-r10}/*从地址[r0]处获得数据*/177stmiar1!,{r3-r10}/*复制到地址[r1]处*/178cmpr0,r2/*判断是否复制完毕*/179blec

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。