u-boot移植与分析记录之一【S5PV210芯片手册启动顺序部分的翻译】


前言

  

  本系列基于Smart210开发板,对u-boot相关知识进行总结与分析。

  本文是对S5PV210芯片手册中启动部分的翻译,原文位于《S5PV210 RISC Microprocessor User's Manual, Revision 1.10》第二部分“系统”中的第六章“启动顺序”


1.1 启动顺序综述


  S5PV210内部存储器64KB ROM96KB SRAM组成。S5PV210从内部ROM启动来确保安全启动,这确保镜像不被未授权用户修改。S5PV210使用电熔丝(e-fuse)来选择安全启动还是正常启动。启动设备可从下述列表中选择:

> 通用NAND Flash存储器
> OneNAND存储器
> SD/MMC存储器(例如:MoviNAND和iNAND)
> eMMC存储器
> eSSD存储器
> 串口和USB设备

  译者注OneNAND存储器,是采用了NOR Flash的接口,NAND Flash的架构,是两者的性能得到了综合,这就有了x-loader的产生。说到底这个x-loader就是起到初始化OneNAND和引导U-BOOT的作用。详细描述见文章《浅谈对OneNAND的认识》


  在系统复位的时候,程序计数器从内部ROM区域的iROM代码开始。然而,系统复位不一定是在启动的时候,也有可能是在低电压模式下。因此,iROM代码必须根据复位状态来执行合适的过程。参见图6-1。

  Boot loader很多情况下是由iROM,第一级和第二级boot loader组成。

> iROM代码:包含小而简单的代码,平台独立,存储于内部存储器;

> 第一级boot loader包含小而简单的代码,平台独立,存储于外部存储器;

第二级boot loader:包含复杂的代码,平台相关,存储于外部存储器。

  如果选择安全启动,iROM代码和第一级boot loader提供完整性核查功能(使用公钥算法)来验证加载的镜像。安全启动键共有160个电熔丝位,它们用于在iROM的完整性检查之前进行授权加载的公钥。详细情况参见本手册第十一部分安全部分。


> iROM代码位于内部64KB ROM中,它初始化基本的系统功能,例如时钟、堆和栈。

iROM从一个指定的启动设备加载第一级boot loader镜像到内部的96KB SRAM。这个启动设备由操作模式管脚(OM)选择。根据安全启动钥的值,iROM代码可能会对第一级boot loader镜像做完整性检查。

>第一级boot loader加载第二级boot loader,然后根据安全启动钥的值检查第二级boot loader的完整性。

>第二级boot loader初始化系统时钟,串口和DRAM控制器。初始化DRAM之后,从启动设备加载OS镜像到DRAM。根据安全启动钥的值,第二级boot loader可以对OS镜像做完整性检查。

> 在启动完成之后,第二级boot loader跳转到操作系统


  OM管脚决定了启动设备,例如OneNAND,NAND,MoviNAND,eSSD和iNAND。它同时也决定了启动选项,例如比特位宽度,等待延时,页大小,和ECC模式。

  注意:USB启动用于系统调试和flash再烧写,并不用于正常启动。为此,通过切换OM[5:4]管脚到“2‘b10”来选择,并不用考虑其他OM管脚值。

  内部64KB ROM中的iROM代码称为BL0第一级boot loader称为BL1


1.2 方案说明


1.2.1 复位状态


  系统复位的方案有很多,例如硬件复位,看门狗复位,软件复位,和从掉电模式中唤醒。对于每一个功能,强制性功能概括在表1-1:多种复位状态下的功能需求。

 在iROM中的
基本初始化
在iROM中的
PLL设置
第一/二级boot loader
加载
第二级中的
DRAM设置
操作系统
加载
恢复
先前状态
硬件复位OOOOOX
看门狗复位OOOOOX
SLEEP中唤醒OOOOXO
软件复位OOOOOX
DEEP_STOP中唤醒OXXXXO
DEEP_IDLE中唤醒OXXXXO
  

  在硬件复位和看门狗复位的时候,系统应该按照第一级boot loader和第二级boot loader和OS镜像加载,完全启动。新的复位状态归类为复位组0

  因为在SLEEP模式中DRAM的内容被保留,不需要加载OS镜像到DRAM。然而,内部电源在SLEEP模式下不会供应给内部逻辑,所有存储在内部SRAM中的内容不会被保留。因此,第一级和第二级boot loader应该再次被加载。这个复位状态归类为复位组1

  在软件复位时,boot loader的加载被执行。在DEEP_STOP和DEEP_IDLE模式下,顶层模块的电源被选通,内部SRAM的内容可以被保存,因此boot loader不需要再被加载。在DEEP_STOP和DEEP_IDLE模式下,非保留SRAM的情况下,第一级boot loader应该被再次加载。这些从DEEP_STOP和DEEP_IDLE状态下的软件复位被归类为复位组2。(这段感觉英文原文就有点逻辑不通,贴出原文:At the time of software reset, The loading of boot loader is executed. Although top block’s power is gated in DEEP_STOP and DEEP_IDLE modes, the internal SRAM can be reserved, so that the re-loading of boot loader is not required. In case of non-retention of SRAM in DEEP_STOP and DEEP_IDLE modes, the first boot loader should be loaded again. These software reset that wake up from DEEP_STOP and DEEP_IDLE statuses are classified as reset group2.

  如果系统进入所有电源关闭的模式,当前系统状态应该被安全的保存在安全存储区域,例如DRAM,从而使系统在电源关闭模式下唤醒时,能够继续无缝处理。
  最后,在SLEEP,DEEP_STOP和DEEP_IDLE模式下,需要具有恢复之前状态的功能。

1.2.2 启动序列例子




  程序代码从内部ROM(iROM)开始,移到内部SRAM(iRAM)。最后,程序在DRAM中执行。


  内部ROM中的启动顺序如下:

a. 禁止看门狗计时器;

b. 初始化指令缓存控制器;

c. 初始化堆和栈区域;

d. 检查安全键值;

e. 设置时钟分频,锁定时间,PLL(MPS值),和源时钟;

f. 检查OM管脚,从指定设备(块号码 0)加载第一级boot loader(boot loader的大小取决于S/W)到iRAM。

g. 如果安全启动成功,执行完整性检查;

h. 如果完整性检查通过,跳转到iRAM(0xD002_0010)中的第一级boot loader;


  内部SRAM中的启动顺序如下:

a. 从启动设备加载第二级boot loader到iRAM;

b. 如果安全启动成功,执行完整性检查;

c. 如果完整性检查通过,跳转到iRAM中的第二级boot loader(跳转地址取决于用户软件);

d. 如果完整性检查失败,停止第一级boot loader;

e. 第二级boot loader初始化DRAM控制器;

f.  从指定设备(块号码1)加载OS镜像到DRAM;

g. 跳到DRAM(0x2000_0000或者0x4000_0000)中的OS代码处;


  DRAM中的启动顺序如下:

a. 如果S5PV210从SLEEP, DEEP_STOP, 或DEEP_IDLE模式上电启动,恢复先前状态;

b. 跳转到OS代码处。


1.2.3 固定PLL和时钟设置


  为加速第一级boot loader的操作,第一级boot loader以固定的值初始化PLL。固定的PLL设置如下:

APLL: M=200, P=6, S=1 FOUT = (MDIV X FIN )/ (PDIV X 2(SDIV-1))) = 800MHz

MPLL: M=667, P=12, S=1 FOUT = (MDIV X FIN) / (PDIV X 2SDIV) = 667MHz

EPLL: M=80, P=3, S=3, K=0 FOUT = ((MDIV+KDIV) X FIN) / (PDIV X 2SDIV) = 80MHz

  在由第一级boot loader设置的PLL初始化之后,24MHz外部晶振下的系统时钟频率如下表所示。

ARMCLKACLK200HCLK200PCLK100HCLK100HCLK166PCLK83SCLK_FIMCHCLK133
400133133666613366133133


1.2.4 OM管脚配置


  下表显示了能被OM管脚设置的启动选项




  注意第一级boot loader首先尝试串口。如果失败,尝试驱动USB设备。因此,如果你想要通过USB设备启动,必须断开串口设备。

  硬件逻辑决定地址映射,软件函数决定其它启动选项。OM管脚值可以从OM寄存器中读取,这部分在本手册的章节2.1中有讲述。


1.2.5 安全启动


  安全系统的基本标准是“ ‘ root of trust ’(信任的root)必须是硬件的。不能请求一个软件系统‘ validate itself ’(自我验证) ”。

  在S5PV210中,‘ root of trust ’ 由内部ROM中的iROM代码实现。因此,它不能被未验证的用户修改。硬件设计已经证明了iROM代码的完整性。另一方面,第一级、第二级boot loader和OS镜像存储在外部存储设备中。因此,iROM代码(那已经被证明是安全的)应验证第一级boot loader的完整性。如果完整性检查通过了第一级boot loader,它应该被包含在信任区域。然后,第一级boot loader验证第二级boot loader的完整性,第二级boot loader验证OS镜像的完整性。

  下图显示了安全启动的过程。


安全启动顺序如下:

iROM代码

a. 使用E-Fuse RSA键哈希值检查RSA公钥的完整性;

b. 加载第一级boot loader到iRAM;

c. 使用信任的RSA公钥检查第一级boot loader的完整性;

第一级boot loader

a. 加载安全软件到iRAM;

b. 使用信任的RSA公钥检查软件的完整性;

c. 加载第二级boot loader到iRAM;

d. 使用信任的RSA公钥检查第二级boot loader的完整性;

第二级boot loader

a. 加载安全软件到iRAM;

b. 使用信任的RSA公钥检查软件的完整性;

c. 加载OS内核和应用到DRAM;

d. 使用信任的RSA公钥检查OS内核和应用的完整性;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值