uboot 简单的执行流程之我见

来源:互联网 发布:solr数据没有了 编辑:程序博客网 时间:2024/05/19 19:33

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

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

                                           最重要的部分)

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

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

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

 

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

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

0 0
原创粉丝点击