Linux应用开发(十八)

您所在的位置:网站首页 uboot代码详细 Linux应用开发(十八)

Linux应用开发(十八)

2024-07-14 12:01| 来源: 网络整理| 查看: 265

文章目录 前言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。 分析如下 在这里插入图片描述在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述

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

所谓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