boot flow

将boot流程总结下: 
如上图所示:(非高安流程)
1.cpu执行boot rom,boot rom有两层意思,一是指芯片内部固化程序的rom(掉电不失存储介质),该介质比我们常见的存储介质昂贵即成本高。二是指固化在其中的一小段引导程序。这段程序用于初始化片内的一小片ram运存即SDRAM和初始化存储介质(nor/nand/sd),这样才可以将auxiliary code(小size)从flash或者sd卡(一般为nor flash,可靠性比较高)上copy到这片内置的SDRAM。此时,boot rom使命完成。Boot rom的介质比较特殊,上电后,boot rom是直接可以片上运行的,有点像nor flash,程序的存储和运行都在一个地方。 
2.此时pc指针指向这片内置SDRAM地址,执行auxiliary code,auixiliary code初始化外置的DDR,同时将size较大的Boot code 从flash(一般为nor flash,可靠性比较高)copy 至外置DDR中。Copy完毕后,auxiliary code使命完成,同时内置SDRAM可以清空作为备用DRAM来使用。 
3.此时pc指针从内置的SDRAM中指向外置DDR中的boot code首地址执行boot code。Boot code一般是初始化必要的外设和引导operation system(如kernel)到DDR中,此时uboot使命完成,pc指针指向内核,uboot占用的内存可以清掉,用作其他用途。

NOTE:3中的步骤,boot code在copy operation system 到内存中时,会去判断然后选择从什么介质(nor flash or nand flash)上去copy Operation code到内存中。这个判断可以在auixiliary code中通过软件去配置也可以通过硬件设置(大多数情况)去设置,这个和从nor还是nand flash或者sd卡去上启动auxiliary code要区分开。 
对于非高安项目我们看到每一步做的基本都是初始化ram和copy code。但是对于高安项目,每一步还会涉及到各种签名校验,可以做更多的事情。

Q:

可以看出整个的boot flow都是为引导operation system做准备,过程中用到了一块固化rom,一块片内SDRAM,一块片外DDR。既然是为了引导operation system,那为何不直接让boot rom去初始化外置DDR和copy operation system,却需要内置SDRAM和 auxiliary code的存在?

A:

试想一下,如果去掉图中的步骤三,power on boot rom直接去初始化外置的DDR ,然后搬移boot code。 
Ok,原理上这样完全可行。 
但是,如果换一颗DDR呢,比如从128换到256M呢,这两颗ddr的初始化动作是完全不同的,而此时外置ddr的初始化程序却在boot rom,而boot rom确实固化在芯片内部的,已经改不掉了。所以我们必须找一个可以编辑修改这个初始化DDR的地方,这就是internal SDRAM和auixiliary code的作用,auixiliary code是烧在flash中,是可以修改替换的。

其实更深层的考虑是这样的: 
我们需要去初始化不同的DDR,我们需要一个可以修改编辑的方式,如上面我们讲的那样 
Boot rom这边内置的直接可运行rom比较昂贵,考虑到成本无法将它的size做到很大。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值