uboot 简单的执行流程之我见

u-boot做了些什么 通俗来说就是设置函数开始存放的位置

                     根据链接程序确定了 程序主入口 接下来的文本段的排列顺序(这将是启动                                                 

                                            最重要的部分)

最先执行start.S 内的代码(这是由链接程序决定的):这是对cpu最初始的操作!!!

  1. 放在最前面的最开始执行。正常情况下直接跳转到start code执行,但是在这条语句后面紧跟着中断向量表,这些是cpu硬件决定的,必须定义在固定的地址。
  2.  首先 cpu进入SVC模式(管理员模式),关看门狗,关所有的中断。
  3. 设置时钟。直接操作时钟寄存器,设置时钟的分频比
  4. 跳入cpu init crit函数, 对系统总线进行初始化,只有经过初始化,norflash sdram才能被使用
  5. 检查现在是否在内存中运行,否则,要将代码拷贝到sdram TEXT BASE位置中运行。从norflash 或者nandflash中拷贝需要另行判断。
  6. 经过以上的代码,现在uboot肯定是在sdram上运行了,然后分配堆栈地址大小。
  7. 跳转到 start armboot执行(这是第二阶段代码,定义在lib_arm/board.c中)。

lib_arm/board.c 中做了些什么,就是做了一些板载的外设的初始化工作,为接下来程序运行做准备。比如初始化网卡,串口,lcdsd卡等等外设。

 

网上关于uboot的移植已经讲得很详细,我这里就仅仅只是谈谈我做了几天的认识,不一定对。

纸上得来终觉浅,绝知此事要躬行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值