zoukankan      html  css  js  c++  java
  • uboot启动过程理解

        对于2440而言,启动的方式不多。一般就是外界一个NAND FLASH ,2440内部有个NAND FLASH
    Controller,会自动把NAND FLASH的前4K拷贝到2440的片内SRAM。2440这个片内SRAM就是所谓的
    Stepping Stone刚好也是4K。
        在制作启动代码时,就是uboot。一般会把uboot分为两个部分,一般就会叫做BL1和BL2。
    BL1和BL2两者相加就是整个uboot。这两个部分各有分工。
        为了符合2440的特点,BL1的大小会被设置为4K,这4K需要完成的任务有:
    1、配置好内存(对于2440来说,内存就是SDRAM)。
    2、配置好内存后,将整个uboot搬运到SDRAM运行。
        此时BL1的使命就完成了,接下来是BL2,他在SDRAM上运行,将FLASH上的OS也搬运到SDRAM
    运行。那么整个boot的过程就完成了。

    芯片换代升级,变成S5PV210,此时启动的方式不想2440那么单一了,如SD卡启动,emmc启动,USB启动,等等启动方式,其次外部的内存也不再是SDRAM这种简单的内存了,而是DDR这种内存。所以一开始需要做的准备工作大大增加。
    所以,S5PV210内部多了一个叫做IROM的东西,他的内部固化了一下程序,在上电之后IROM会启动内部的程序,将外部的某些设备进行简单的初始化,如SD卡,emmc等。
    内部的SRAM也从4k升级到了96k.就是为了满足更复杂的配置要求。

    那么接下来,来看看三星官方推荐的uboot启动过程

    image
        和2440启动过程类似,在上电的时候它会自动将外部的固定大小的程序拷贝到片内的SRAM。
    对于2440来讲,这个大小是4K。而对于210来讲这个大小是16K。
        假设,我们现在选择的是SD卡启动,那么我们的uboot当然会放到SD卡中。同理为了满足,
    210的特性,uboot同样会被分为两个部分——BL1和BL2;BL1的大小当然就是16K。
        那么,在上电之后,这个16K会被自动的拷贝到片内的SRAM,这个过程由芯片内部的
    IROM完成(这个过程通常被称之为BL0)。而此时片内的SRAM并没有被填满,还有80K的容量。
        三星想,这80K的容量也够BL2放的了。所以,按照三星设想,当BL1被加载到SRAM之后。
    BL1开始运行,此时BL1的任务只要把BL2也搬运到SRAM就可以了。然后让BL2去配置DDR,
    并且将OS搬运到DDR运行。
        也就是说,三星给BL1分配的任务是搬运BL2到SRAM;给BL2分配的任务是配置DDR并且搬运OS
    到DDR运行。

        但是,在学校Uboot的过程中,发现Uboot并没有采用三星推荐的启动过程。原因是随着Uboot的
    发展,Uboot的大小变得很大,远超过了96K。就是说Uboot无法整个都放入片内的SRAM。那么让就
    不能采取三星的方式。
        所以Uboot给BL1和BL2重新分配任务:(当然BL1的大小还只能是16K,这是应为IROM里的程序是固定的,它只会将前16K的内容拷贝到SRAM。)
        Uboot将BL1委以重任,不仅需要将DDR配置好,还要将BL2搬运到DDR上运行。
      BL2就只需要将OS搬运到DDR运行即可。

    那么,3星推荐的做法,和Uboot的做法他们的区别就出来的:
    1、Uboot交给BL1的任务要比三星交给BL1的任务要多。他首先需要配置DDR,其次再将
    BL2搬运到DDR运行。而三星交给BL1的任务,仅仅是将BL2搬运到片内的SRAM运行。
    2、UBoot的方式,BL2是在DDR上运行的,而三星的方式BL2是在片内的SRAM运行的。
    3、UBoot的方式,BL2只需搬运OS到DDR;三星的方式,BL2需要先配置DDR,在将OS搬运到
    DDR。

    总结:
    1、SRAM他在芯片的内部,他可以直接访问,而无需初始化。而DDR,SDRAM这种外部
    内存是需初始化的,需要我们写一些配置程序,初始化之后才可以访问。所以不管是
    2440,还是210,还是intel。都遵循逐步启动的过程。
    2、对于2440来说,先需要将外部Flash的前4K内容加载到SRAM,然后通过在SRAM里运行的代码
    去初始化SDRAM,并搬运主体程序到SDRAM。
    3、对于210来讲也是这样,会先将外部Flash的前16K内容拷贝到SRAM。
    4、区分BL0 和BL1,BL2。BL0其实是固化在芯片内部的一段程序。而BL1和BL2是组成Boot的两个部分
    BL1的大小是必须根据芯片的特性设计的。对于2440来说你的BL1不应该超过4K,对于210来说BL1不应该超过16K。
    5、我们自己写boot的时候,也可以参照三星步骤,只要你的BL2不大于80K即可。
    7、DDR或者是SDRAM会比片内的SRAM大很多倍,所以只要外部内存被初始化好了之后,很多东西(如BL2)一定程度上就不再受大小的限制了。

  • 相关阅读:
    POJ1486 Sorting Slides 二分图or贪心
    POJ2060 Taxi Cab Scheme 最小路径覆盖
    POJ3083 Children of the Candy Corn 解题报告
    以前的文章
    POJ2449 Remmarguts' Date K短路经典题
    这一年的acm路
    POJ3014 Asteroids 最小点覆盖
    POJ2594 Treasure Exploration 最小路径覆盖
    POJ3009 Curling 2.0 解题报告
    POJ2226 Muddy Fields 最小点集覆盖
  • 原文地址:https://www.cnblogs.com/douzi2/p/4970740.html
Copyright © 2011-2022 走看看