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)一定程度上就不再受大小的限制了。

  • 相关阅读:
    Spring Boot笔记
    Mybatis笔记
    SpringBoot学习笔记(6)Mybatis整合
    SpringBoot学习笔记(5)Druid连接池
    Authentication plugin 'caching_sha2_password' cannot be loaded的解决方案
    docker笔记
    SpringBoot学习笔记(2)配置文件
    SpringBoot学习笔记(1)入门
    Java中IoC、AOP、Bean、PO、VO、DTO、EJB、POJO等常见概念简述
    用MySQL实现微博关注关系的方案分析(转)
  • 原文地址:https://www.cnblogs.com/douzi2/p/4970740.html
Copyright © 2011-2022 走看看