启动boot流,细节点

将boot流程总结下:

1.cpu执行boot rom,boot rom有两层意思,

step one

  • 一是指芯片内部固化程序的rom(掉电不失存储介质),该介质比我们常见的存储介质昂贵即成本高。
  • 二是指固化在其中的一小段引导程序。这段程序用于初始化片内的一小片ram运存即SDRAM和初始化存储介质(nor/nand/sd),这样才可以将auxiliary code(小size)从flash或者sd卡(一般为nor flash,可靠性比较高)上copy到这片内置的SDRAM。(BootRAM)
  • 此时,boot rom使命完成。Boot rom的介质比较特殊,上电后,boot rom是直接可以片上运行的,有点像nor flash,程序的存储和运行都在一个地方。

step two

2.此时pc指针指向这片内置SDRAM地址(BootRAM),

执行auxiliary code,auixiliary code初始化外置的DDR

同时将size较大的Boot code 从flash(一般为nor flash,可靠性比较高)copy 至外置DDR中

Copy完毕后,auxiliary code使命完成,

同时内置SDRAM可以清空作为备用DRAM来使用。

step three

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要区分开。 (借助OTP)

扫描二维码关注公众号,回复: 15055652 查看本文章

对于非高安项目我们看到每一步做的基本都是初始化ram和copy code。但是对于高安项目,每一步还会涉及到各种签名校验,可以做更多的事情。

Q&A

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做到很大。

https://blog.csdn.net/weixin_38227420/article/details/79329471

猜你喜欢

转载自blog.csdn.net/weixin_45264425/article/details/130536874
今日推荐