b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

文件系统转换 Bootloader之uBoot简介(转)(12)

电脑杂谈  发布时间:2018-02-07 22:32:44  来源:网络整理

(2)为加载Bootloader的第二阶段代码准备RAM空间。

所谓准备RAM空间,就是初始化内存芯片,使它可用。对于S3C2410/S3C2440,

通过在start.S中调用lowlevel_init函数来设置存储控制器,使得外接的SDRAM可用。代码在board/smdk2410

/lowlevel_init.S中。

注意:lowlevel_init.S文件是开发板相关的,这表示如果外接的设备不一样,可以修改lowlevel_init.S文件中的相关宏。

lowlevel_init函数并不复杂,只是要注意这时的代码、数据都只保存在NOR Flash上,内存中还没有,所以读取数据时要变换地址。代码如下:

129 _TEXT_BASE:

130 .wordTEXT_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 ldrr1, _TEXT_BASE

139 subr0, r0, r1

140 ldrr1, =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 movpc, lr

150

151 .ltorg

152 /* the literal pools origin */

153

154 SMRDATA:/* 13个寄存器的值 */

155 .word ……

156 .word ……

第137~139行进行地址变换,因为这时候内存中还没有数据,不能使用连接程序时确定的地址来读取数据:

第137行中SMRDATA 表示这13个寄存器的值存放的开始地址(连接地址),值为0x33F8xxxx,处于内存中。

第138行获得代码段的起始地址,它就是第130行中的“TEXT_BASE”,其值在board/smdk2410/config.mk中定义:“TEXT_BASE = 0x33F80000”。

第139行将0x33F8xxxx与0x33F80000相减,这就是13个寄存器值在NOR Flash上存放的开始地址。

(3)拷贝Bootloader的第二阶段代码到 RAM 空间中。

这里将整个U-Boot的代码(包括第一、第二阶段)都复制到SDRAM中,这在cpu/arm920t/start.S中实现:

164 relocate:/* 将U-Boot复制到RAM中 */

165 adrr0, _start/* r0 = 当前代码的开始地址 */

166 ldrr1, _TEXT_BASE/* r1 = 代码段的连接地址 */

167 cmp r0, r1 /* 测试现在是在Flash中还是在RAM中 */

168 beq stack_setup/* 如果已经在RAM中(这通常是调试时,直接下载到RAM中),

* 则不需要复制

*/


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-66092-12.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...