Linux应用开发(十八) |
您所在的位置:网站首页 › uboot代码详细 › Linux应用开发(十八) |
文章目录
前言U-Boot第一阶段代码分析1. 硬件设备初始化2. 为加载Bootloader的第二阶段代码准备RAM空间。3.复制Bootloader的第二阶段代码到RAM空间中4. 设置好栈5.跳转到第二阶段代码的C入口点。
U-Boot第二阶段代码分析1、初始化本阶段要使用到的硬件设备2、检测系统内存映射(memory map)3、U-Boot命令的格式4、为内核设置启动参数
总结
前言
参考的这本书籍使用的U-Boot从NOR Flash启动,所以介绍的内容和案例依旧参考书籍,使用开发板smdk2410的U-Boot为例进行分析 U-Boot第一阶段代码分析 1. 硬件设备初始化依次完成如下设置:将CPU的工作模式设置为管理模式(svc),关闭WATCHDOG,设置FCLK,HCLK,PCLK的比例(FCLK:系统时钟,即CPU主频频率。HCLK:AHB,提供高速总线AHB的时钟,PCLK:提供低速总线APB的时钟)(即设置CLKDIVN寄存器),关闭MMU,CACHE。 分析如下 所谓RAM空间,就是初始化内存芯片,使它可用。对于S3C2410,通过在Start.S中调用lowlevel_init函数来设置存储控制器,使得外接的SDRAM可用。分析如下
**注意:**lowlevel_init.S文件是与开发板相关的,这表示如果外接的设备不一样,可以修改lowlevel_init.S文件的相关值 lowlevel_init函数并不复杂,只要注意下面这段代码,数据都只保存在NOR Flash上,内存中还没有,所以读取数据时要变换地址。代码如下 129 _TEXT_BASE: 130 .word TEXT_BASE 131 132 .globl lowlevel_init 133 lowlevel_init: 134 /* memory control configuration */ 135 /* make r0 relative the current location so that it */ 136 /* reads SMRDATA out of FLASH rather than memory ! */ 137 ldr r0, =SMRDATA 138 ldr r1, _TEXT_BASE 139 sub r0, r0, r1 140 ldr r1, =BWSCON /* Bus Width Status Controller */ 141 add r2, r0, #13*4 142 0: 143 ldr r3, [r0], #4 144 str r3, [r1], #4 145 cmp r2, r0 146 bne 0b 147 148 /* everything is fine now */ 149 mov pc, lr 150 151 .ltorg 152 /* the literal pools origin */ 153 154 SMRDATA: 155 .word (0+(B1_BWSCON |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |