嵌入式Linux--MYiR板--系统引导(system boot)

1.概览

 引导过程从上电复位(POR)开始,在此硬件复位逻辑强制ARM内核从片上引导ROM开始执行。

 引导ROM代码使用内部寄存器BOOT_MODE [1:0]的状态以及各种 eFUSE 和/或 GPIO 设置的状态来确定设备的引导流程行为。ROM的主要功能包括:

  • 支持从各种启动设备启动
  • 串行下载器支持 (USB OTG 和 UART)
  • 设备配置数据(Device Configuration Data ,DCD)和插件
  • 基于数字签名和加密的高安全启动(High-Assurance Boot ,HAB)
  • 从低功耗模式唤醒

引导ROM支持下面这些引导设备:

  • NOR flash
  • NAND flash
  • OneNAND flash
  • SD/MMC
  • 串行(cs,clk,mosi, SPI) NOR flash and EEPROM
  • 四线(cs,clk,SIO1,SIO2,SIO3,SIO4, QSPI) flash

 引导ROM使用BOOT_MODE和eFUSE的状态来确定引导设备。 出于开发目的,可以使用GPIO引脚输入来覆盖用于确定引导设备的eFUSE。

 引导ROM代码还允许下载要在设备上运行的程序。 该示例是一个配置程序,该程序可以进一步利用串行连接为启动设备提供新的映像。 通常,将配置程序下载到内部RAM,并允许对引导设备(例如SD / MMC闪存)进行编程。 ROM串行下载器在非流模式连接中使用高速USB,而在流模式连接中使用UART。 引导ROM允许从低功耗模式中唤醒。 复位后,ROM检查电源门控状态寄存器。 从低功耗模式唤醒时,内核会跳过从引导设备加载映像的过程,并跳转到保存在PERSISTENT_ENTRY0中的地址。

 设备配置数据(Device Configuration Data,DCD)功能允许引导ROM代码从驻留在引导设备上的外部程序镜像获取SOC配置数据。 例如,DCD可用于对DDR控制器进行编程以实现最佳设置,从而提高引导性能。 DCD限于对于引导目的必不可少的存储区和外围设备地址(请参阅写入数据命令)。

 引导ROM的一项关键功能是能够执行安全引导或高安全性引导(HAB)。 HAB安全库支持此功能,它是ROM代码的子组件。 HAB使用硬件和软件以及公钥基础结构(PKI)协议的组合来保护系统,防止执行未经授权的程序。 在HAB允许执行用户映像之前,必须对映像进行签名。 签名过程是在图像构建过程中由私钥持有者完成的,然后将签名作为最终程序图像的一部分包含在内。 如果配置为这样做,则ROM使用程序映像中包含的公共密钥来验证签名。 除了支持数字签名验证来验证程序映像之外,还支持加密启动。 加密的引导可用于防止直接从引导设备克隆程序镜像。

 除串行下载器外,还可以在芯片上支持的所有启动设备上执行HAB的安全启动。 引导ROM中的HAB库还提供API功能,从而允许其他引导链组件(bootloader)扩展安全引导链。 SEC_CONFIG的出厂设置是开放配置,其中ROM / HAB执行镜像认证,但是所有认证错误都将被忽略,并且仍然允许执行镜像。

嵌入式Linux--MYiR板--系统引导(system boot)_第1张图片
嵌入式Linux--MYiR板--系统引导(system boot)_第2张图片

2.引导模式(Boot modes)

 复位期间,芯片检查电源门控控制器状态寄存器。 引导期间,内核的行为由引导模式引脚设置定义,如引导模式引脚设置中所述。 从低功耗启动模式唤醒时,内核会跳过时钟设置。 引导ROM将检查PERSISTENT_ENTRY0(请参阅持久位)是否是指向有效地址空间(OCRAM,DDR,QSPI或EIM)的指针。 如果PERSISTENT_ENTRY0是指向有效范围的指针,则它将使用PERSISTENT_ENTRY0寄存器中的入口点开始执行。 如果PERSISTENT_ENTRY0是指向无效范围的指针,则内核将执行系统复位。

2.1 启动模式引脚设置

该设备具有四种引导模式(一种保留给NXP使用)。 根据内部BOOT_MODE寄存器中存储的二进制值选择引导模式。通过在POR_B的上升沿对BOOT_MODE0和BOOT_MODE1输入进行采样来初始化BOOT_MODE。 在对这些输入进行采样之后,它们的后续状态不会影响BOOT_MODE内部寄存器的内容。 内部BOOT_MODE寄存器的状态可以从SRC引导模式寄存器(SRC_SBMR2)的BMOD [1:0]字段中读取。 可用的引导模式为:从保险丝引导,通过USB的串行引导和内部引导。 请参阅下表进行设置:

启动引脚模式设置

BOOT_MODE[1:0] Boot Type
00 Boot From Fuses
01 Serial Downloader
10 Internal Boot
11 Reserved

2.5 内部启动模式(Internal Boot mode (BOOT_MODE[1:0] = 0x02))

 BOOT_MODE [1:0]寄存器中的值为0b10选择内部引导模式。在这种模式下,处理器继续从内部引导ROM执行引导代码。引导代码执行硬件初始化,从所选的引导设备加载程序镜像,使用HAB库执行镜像验证(请参阅引导安全性设置),然后跳转到从程序镜像派生的地址。如果在内部引导过程中发生错误,则引导代码将跳至Serial Downloader(请参阅Serial Downloader)。在所有三种引导模式下,都可以使用HAB进行安全引导。
 当设置为内部启动时,启动流程可以通过eFUSE设置与使用通用I / O(GPIO)引脚替代熔丝设置的选项来控制。 GPIO引导选择熔丝(BT_FUSE_SEL)确定ROM在该模式下是将GPIO引脚用于选定数量的配置参数还是eFUSE。

  • 如果BT_FUSE_SEL = 1,则所有引导选项均由表8-2中所述的eFUSE控制。
  • 如果BT_FUSE_SEL = 0,则可以使用以下命令设置特定的引导配置参数

 GPIO引脚而不是eFUSE。表8-2的GPIO列中列出了在这种模式下可以覆盖的保险丝。表8-3提供了GPIO引脚的详细信息。
 GPIO替代的用途旨在进行开发,因为这些焊盘在已部署的产品中用于其他目的。恩智浦建议通过已部署产品中的eFUSE控制启动配置,并保留仅将GPIO模式用于开发和测试目的。

8.5 启动设备(内部启动)(Boot devices (internal boot))

该芯片支持以下引导闪存设备:

  • 带有外部接口模块(EIM)的NOR闪存,位于CS0,16位总线宽度。
  • 具有EIM接口的OneNAND闪存,位于CS0上,总线宽度为16位。
  • 原始NAND(MLC和SLC)以及通过GPMI-2接口的切换模式NAND闪存。 页面大小分别为2 KB,4 KB和8 KB。 支持2位到40位BCH硬件ECC(纠错)的8位总线宽度。
  • 四路SPI闪存。
  • 通过USDHC接口的SD / MMC / eSD / SDXC / eMMC4.4,支持大容量卡。
  • 通过SPI(串行闪存)引导EEPROM。

外部引导设备类型的选择由BOOT_CFG1 [7:4] eFUSE控制。 请参阅此表以了解更多详细信息:

启动设备选择

BOOT_CFG1[7:4] Boot device
0000 NOR/OneNAND (EIM)
0001 QSPI
0011 Serial ROM (SPI)
010x SD/eSD/SDXC
011x MMC/eMMC
1xxx Raw NAND

板子通过拨码开关来设置启动方式

嵌入式Linux--MYiR板--系统引导(system boot)_第3张图片

拨码开关
SW1 (bit1) BOOT_CFG1[7]
SW2 (bit2) BOOT_CFG1[6]
SW3 (bit3) BOOT_MODE0
SW4 (bit4) BOOT_MODE1

嵌入式Linux--MYiR板--系统引导(system boot)_第4张图片

你可能感兴趣的:(嵌入式linux,MYiR板)