禾雨

导航

处理器启动过程

 

版权声明:本文为CSDN博主「一万HOURS」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_20233867/article/details/70670104

 

1 处理器启动过程简介

  • 处理器上电后,PC寄存器固化了一个默认值
  • PC默认值用于决定第一条执行的指令
  • 第一条执行指令隶属于启动程序
  •  

    2 启动程序(BootLoader)
    系统上电后运行的第一个程序(Not Os)
    根据运行阶段、体积和功能的不同分为三个部分
    BL0 - 固化于硬件中,用于初始化硬件,加载并运行BL1
    BL1 - 存储于外部设备中,用于初始化主存,加载并运行BL2
    BL2 - 存储于外部存储设备中,用于引导操作系统执行

  • 3 S3C6410启动过程

  •  

     

  • 4 S5PV210启动过程

  •  

     

    4.1 启动过程简介
    S5PV210使用的启动方式是:外接的大容量Nand + 外接大容量DRAM + SoC内置SRAM。

    实际上210的启动还要更好玩一些,210内置了一块96KB大小的SRAM(叫iRAM),同时还有一块内置的64KB大小的NorFlash(叫iROM)。210的启动过程大致是:
    第一步:CPU上电后先从内部IROM中读取预先设置的代码(BL0),执行。这一段IROM代码首先做了一些基本的初始化(CPU时钟、关看门狗···)(这一段IROM代码是三星出厂前设置的,三星也不知道我们板子上将来接的是什么样的DRAM,因此这一段IROM是不能负责初始化外接的DRAM的,因此这一段代码只能初始化SoC内部的东西);然后这一段代码会判断我们选择的启动模式(我们通过硬件跳线可以更改板子的启动模式),然后从相应的外部存储器去读取第一部分启动代码(BL1,大小为16KB)到内部SRAM。
    第二步:从IRAM去运行刚上一步读取来的BL1(16KB),然后执行。BL1负责初始化NandFlash,然后将BL2读取到IRAM(剩余的80KB)然后运行。
    第三步:从IRAM运行BL2,BL2初始化DRAM,然后将OS读取到DRAM中,然后启动OS,启动过程结束。

    通过以上分析可以发现只能运行最大为96KB的bootloader,以上只是三星官方推荐的启动方式,实际上并不一定采取这种启动方式。

    4.2 S5PV210启动过程相关补充说明
    210内部有iROM和iRAM,因此启动时分两个阶段:内部启动阶段和外部启动阶段。对于内部启动阶段各种S5PV210的开发板都是相同的,对于外部启动阶段,不同开发板会有不同。

    IROM和IRAM
    S5PV210出厂时内置了64KB iROM和96KB iRAM。iROM中预先内置烧录了一些代码(称为iROM代码),iRAM属于SRAM(不需软件初始化,上电即可使用)。210启动时首先在内部运行iROM代码,然后由iROM代码开启外部启动流程。

    为什么需要设计iROM和iRAM?答案是为了支持多种外部设备启动。

    Second boot support
    When 1 st boot mode fails, SD/MMC boot will be tried through SD/MMC channel 2 with 4-bit data。
    当第一启动模式失败时,SD/MMC卡启动模式下将会从SD/MMC2通道尝试再次启动。这种二级启动是一种冗余设计。SoC中第一启动介质故障而导致不能启动时,可以从备用启动介质启动。我们做裸机实验时从SD2启动就是利用了这一设计特性。

    使用IROM启动的好处
    1、降低BOM成本。因为iROM可以使SOC从各种外设启动,因此可以省下一块boot rom(专门用来启动的rom,一般是norflash)。
    2、支持各种校验类型的nand。
    3、可以在不使用编程器的情况下使用一种外部存储器运行程序来给另一种外部存储器编程烧录。这样生产时就不用额外购买专用编程器了,降低了量产成本。

    BL0做了什么

    关看门狗
    初始化指令cache
    初始化栈
    初始化堆
    初始化块设备复制函数device copy function
    设置SoC时钟系统
    复制BL1到内部IRAM(16KB)
    检查BL1的校验和
    跳转到BL1去执行
    S5PV210的启动顺序(不优先选择Uart、USB启动)

    先1st启动,通过OMpin选择启动介质
    再2nd启动,从SD2
    再Uart启动
    再USB启动



    ————————————————

 

posted on 2019-10-22 13:42  禾雨  阅读(1449)  评论(0编辑  收藏  举报