UBOOT源码分析的第一阶段start.S分析(4)

之前一直在准备计算机三级考试,还有卡尔曼滤波的学习,所以一直没有更新博客,今天继续更新

这里补充一下知识:ARM的协处理器

https://blog.csdn.net/gameit/article/details/13169405

这里链接一下别个的文章。大家可以看看!

这里涉及了MMU的很多知识,现阶段我自己有些都不懂,还需要自己不断的学习。

所以只能简单的给大家来个框架的认识!

第362行-363行使能域访问控制器

第366行-371行设置TTB

TTB就是在虚拟地址和物理地址映射的时候的那个转换地址表。(这些可以参考别个写的文章哈)

第375行-377行,使能MMU

cp15的c1寄存器的bit0控制MMU的开关。只要将这一个bit置1即可开启MMU。开启MMU之后就是用的虚拟地址映射,之后上层应用到下层的操作硬件就需要使用虚拟地址映射了。

关于转换表的分析的话,个人现阶段能力不足。暂时不能分析,这部分太庞大了。

 

 

TTB的分析就不进行了。

前面的工作进行完之后,再一次设置栈

之后我们就把栈的地址可以算出来了

我们实际将栈设置在uboot起始地址上方2MB处,这样安全的栈空间是:2MB-uboot大小-0x1000=1.8MB左右

之后可以看到CONFIG_USE_IRQ没有定义,之后跳过,然后执行清理BSS段的操作。

注意BSS段的开头和结尾是在链接脚本u-boot.lds中得来的。

只有

ldr pc, _start_armboot

代码执行到这里,这句话就是将uboot第二阶段执行的函数地址传值个pc,然后跳转到uboot启动的第二阶段,c语言阶段

 

 

总结一下:

uboot第一阶段做的事情

(1)构建异常向量表

(2)设置CPU为SVC模式

(3)关闭看门狗

(4)时钟初始化

(5)DDR初始化

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

(7)重定位

(8)建立映射表并打开MMU

(9)跳转到第二阶段

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值