S5PV210微处理器的启动过程分析

2017-07-11 08:21葛耿育
电脑知识与技术 2017年15期
关键词:三星公司存储设备代码

葛耿育

摘要:嵌入式系统产品开发的整个过程按照先后顺序包括:在给定的硬件模块上移植boodoader(引导程序)、移植嵌入式操作系统内核、移植根文件系统、编写特定外围设备的驱动程序和编写应用程序。移植bootloader是所有软件层面工作的第一步,需要考虑微处理器和外围存储器件的具体特征,有一定的难度,该文基于ARMCortexA8内核的S5PV210微处理器,详细分析其上电后从启动介质中启动软件系统的过程。

关键词:嵌入式系统;引导程序;移植;$5PV210

由于外设存储器在技术上存在一定的缺陷,诸如某些存储块损坏或者受到强干扰发生位翻转,则可能导致系统无法正常启动。因此,支持多个启动介质、启动顺序和多级启动在嵌入式系统应用中显得尤为重要。目前主流的嵌入式微处理器都会支持多种启动介质,如NAND Flash(Movi NAND、OneNAND)、Nor Hash、eSSD、MMC和SD卡、eMMC和iNAND等,也有通过外设接口启动,如以太网和USB接口。本文以S5PV210微处理的硬件结构和内部资源为参考,分析其启动过程详细细节,给嵌入式系统应用开发者在引导程序b00tloader移植技术上提供一些参考方案。

1S5PV210微处理器介绍

相对于基于ARM9的$3C2440/2410微处理器从外部Nor.Hash或者NANDFlash启动而言,基于Cortex A8的S5PV210微处理器增加了64KB的内部iROM和96KB的内部iRAM,核心部件如图1所示。所以三星公司将bootloader程序分为3个部分,第一个部分是将BL0内置于iROM中,通过它来启动后面的引导程序。这种方式启动的优点是:第一,减少启动费用,第二,提高数据的可读率,第三减少产品开发的产本。同时需要基本的CPU模块外,还有通用内存接口、SD/eMMC接口、NandHash接口、oneNand接口、eSSD接口和UART/USB接口,分别启动对应接口相连接的启动存储设备。S5PV210所有的存储设备都支持通过MMC通道2的SD/MMC设备启动,以防止第一启动设备出现故障后无法进入系统。

2S5PV210启动设备选择

S5PV210微处理器支持多种存储设备的启动,具体使用哪一种启动设备取决于封装芯片外设的OM类型引脚的接线配置,该芯片有6个OM引脚,标号分别为OM0、OM1、OM2、OM3、OM4、OM5,缩写为OM[5:01,分别可以接电源正VDD和接地GND。参考数据手册中的定义,如图2和图3所示,当OM5引脚接VDD时,选择USB/UART作为第一启动方式,当OM5引脚接GND时,根据OM0到OM4的接线不同来决定具体选择哪一种启动设备,例如OM[5:01=001101,代表选择从SD/MMC性质的存储设备中启动。

3S5PV210啟动过程分析

由于内部SRAM的容量是96KB,启动部分为BL0、BLl和BL2三个步骤,因此三星公司推荐的S5PV210启动方式是bootloader必须在16KB至96KB的范围内,其中BLl的最大容量是16KB,BL2的最大容量是96KB,启动过程如下所述:

第一步,CPU上电后从内部iROM中读取三星公司内置的代码(BL0阶段)内置了64KB的iROM代码,主要用来初始化CPU时钟、关闭看门狗、初始化指令缓冲区、初始化堆栈区、初始化块设备拷贝函数、复制BL1阶段程序到内部SRAM区、验证BL1的校验和(如果验证失败,BL0将尝试第二启动方式,即SD/MMC通道2)、检查是否是安全启动模式(如果安全密钥值已经写入处理器中,则属于安全启动模式,验证BL1的完整性)以及最终跳转到BL1的起始地址开始执行新的程序。由于这一段iROM代码是三星公司出厂前预置的,并不知道产品公司会用什么类型的外置Flash和DRAM,因此,该段代码不负责初始化外围设备,只能初始化SoC内部的硬件。

第二步,在SRAM中执行BL1程序,加载剩下的bootloader代码段(BL2)到剩下的SRAM空间,如果是安全启动模式,则BLl程序需要验证BL2的完整性。之后跳转到SRAM中的BL2的起始地址执行程序。

第三步,BL2程序运行时初始化DRAM,将启动设备中的嵌入式操作系统加载到DRAM中,跳转到DRAM中OS的起始地址执行。此时,已经初始化好整个系统的运行环境,可以在系统中运行其他应用软件。

然而,实际项目中的bootloader大部分的代码容量会大于96KB,例如常用的uboot启动引导程序为100KB到200KB,此时三星公司推荐的启动过程和方案不可行。解决的方案是依照uboot等引导程序的实际情况而定,uboot可以逻辑上分为前16KB作为BL1,剩余部分作为BL2(大于80KB),启动过程如下:

第一步,设备上电后执行BL0代码段,同三星公司推荐的一样,这部分内容在iROM中不可更改。

第二步,从iROM中跳转到iRAM中执行uboot的前16KB代码,即BL1。这部分代码初始化DRAM,之后将整个uboot加载到DRAM中,重定位地址。此处也可以将uboot分成两个物理部分BL1和uboot,分别指定不同的链接地址,启动时将两个部分加载到不同的地址,如BLl加载到iRAM,uboot加载到DRAM中,则不需要重定位也可以正常启动。

第三步,uboot在DRAM中运行,然后加载启动设备中的0s到DRAM中运行。整个过程结束,系统运行环境完成。

4总结

本文所述的在嵌入式微处理器S5PV210为核心的嵌入式系统中上电启动过程分析,将bootloader引导程序中实现启动过程的方法与三星公司官方的启动方法作对比,后者具有不受启动程序容量限制的优点。理解这两者的区别有利于开发者参考官方数据手册更好进行嵌入式软件程序的开发与维护。

猜你喜欢
三星公司存储设备代码
创世代码
创世代码
创世代码
创世代码
Windows 7下USB存储设备接入痕迹的证据提取
基于Flash芯片的新型存储设备数据恢复技术研究
用批处理管理计算机USB设备的使用