uboot - 启动流程分析【第一阶段】

**进入uboot/cpu/s5pc11x/start.S:

(1)构建异常向量表

(2)设置CPU工作在SVC模式,ARM状态,禁止FIQ IRQ。


**在SRAM设置栈并进入uboot/board/samsuang/具体开发板名字/lowlevel_init.S:

(注,为什么要设置栈,因为在lowlevel_init.S中还要调用别的函数,而LR只有一个)

(4)检查复位状态

直接冷上电、热启动、睡眠(低功耗)状态下的唤醒等

(5)IO状态恢复

(6)关看门狗

(7)开发板供电置锁

判断当前代码执行位置SRAM(初始化CLK,DDR),DRAM(跳过初始化CLK,DDR)

(8)时钟初始化

(9)内存初始化

(10)串口初始化并打印“OK”

**回到uboot/cpu/s5pc11x/start.S:

(11)判断是从哪种介质启动的

(12)代码重定位

从SD卡把整个uboot重定位到DDR的指定位置(TEXT_BASE)开始

(13)建立映射表(TTB)并打开MMU

在ARM中支持3种块大小,细表1KB、粗表4KB、段1MB,这里使用段式。

使能域访问(cp15的c3寄存器)

设置TTB(cp15的c2寄存器)

使能MMU单元(cp15的c1寄存器)

MMU相关:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=22891521&id=2109284

(14)清DDR的BSS段

(15)长跳转到第二阶段ldr pc, _start_armboot 跳转到DDR的_start_armboot开始运行


总结:第一阶段是在SRAM中运行的,主要是初始化CPU内部相关的,比如cache,时钟,

看门狗,DDR控制器。接着跳转到第二阶段,大概就是初始化一些必要的外设,比如网卡,

串口,flash等等,接着倒计时bootdelay,或者进入命令行,接收,解析,执行命令。直到

执行驱动内核的命令,uboot的使命就终结了!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值