本章节讨论关于基于ARM的嵌入式系统的firmware。自从Firmware经常是在新平台上port和execute的第一段代码,Firmware就成为了任何嵌入式系统最重要的一部分。
本章将分为两部分:
1. 介绍firmware。本部分对firmware进行定义并且描述了两种流行的产业标准固件包:ARM Firmware Suite和Red Hats RedBoot。这些固件包是以通用为目的,可以简单快速的被移植到不同的ARM平台上。
2. 本部分着眼于initialization and bootloader process。我们使用了一个简单的例子,名为Standstone—被设计用来初始化硬件,加载image到内存中,并且将控制权从pc过渡给image。
Firmware and Bootloader
定义
- firmware是深度嵌入,低层次的软件,可以在硬件和应用程序/操作系统层软件 之间 提供一种接口。It resides in the ROM and executes when power is applied to the embedded hardware system.固件可以在系统初始化后保持激活状态,并且提供了基础的系统操作。One of the main purposes of firmware is to provide a stable mechanism to load and boot an operating system.
- Bootloader 是一种小型应用程序用于在硬件上安装操作系统或者软件。The bootloader only exists up to the point that the operating system or application is executing, and it is commonly incorporated into the firmware.
Firmware execution flow:
1.Set up target platform—准备加载操作系统所需要的环境
需要确定平台被正确的初始化
PICTURE 1.0 | First stage’s features |
---|---|
Program the hareware system registers | 例如:确保特殊微处理器的控制寄存器在已知的地址空间中 |
Platform identification | 固件需要确定其操作的core和platform是哪种类型的。The core is normally recognized by reading register 0 in coprocessor 15, which holds both the processor type and the manufacturer name |
Diagnostics | Diagnostics software 提供了一种有用的方法快速的辨别基础硬件的生产商。因为这种软件的天性,其更趋向于成为硬件特殊的一部分。 |
Debug interface | 提供了软件的辅助来debug正在运行的代码。辅助功能,如下图 PCTURE 2.0 |
Command line interpreter | 可以通过CLI发送指令进行交互。它允许你通过改变默认配置来改变即将启动的操作系统 |
Debug assistance
PICTURE 2.0 |
---|
在ARM设置断点 |
Listing and modifying memory |
Showing current processor register contents |
Disassembing memory into ARM and Thumb instruction mnemonics |
除非固件提供了内部硬件调试的接口,否则仅有RAM images可以通过软件调试机制来调试。
2.Abstract the hardware
PICTURE 3.0 | Features |
---|---|
Hardware Abstraction Layer(HAL) | 软件层,通过提供一系列定义好的编程接口,来隐藏底层的硬件。当你到另一个目标平台的时候,这些编程接口是恒定的,但是底层的实现却不一样。 |
Device driver | 是HAL的软件,用于和特殊的硬件外设通讯,并且提供了标准application programming interface(API)用于读写特定的外设 |
3.Load a bootable image
不是所有的操作系统或者应用都是需要被复制进RAM中的,也可以简单直接从ROM运行。
PICTURE 4.0 | Features |
---|---|
Basic filling system | 简单的flash ROM filing system(FFS),允许多种可执行images被加载 |
Firmware需要有能力去读取filing system,并且找到包含image的文件,然后复制image到memory中。相似的,如果image在network上,固件需要和Ethernet硬件一样理解网络协议。
加载程序还要涉及到image format。最基础的image format是纯二进制,但是不包含任何头或者调试信息。对于基于ARM的系统最流行的image format就是 Executable and Linking Format(ELF) ELF files come in three forms: relocatable, executable, and shared object.
the load process还要有解密和解压缩能力,因为image可能已经加密或者压缩过了。
4.Relingquish control
当平台控制权转交给操作系统的时候,固件的Machine Independent Layer(MIL)或者Hardware Abstraction Layer(HAL)部分还会保持激活状态。通过SWI、对于特殊硬件设备的标准API可以引用这一层。
PICTURE 5.0 | Features |
---|---|
Updating the vector table | 需要修改特殊的异常和中断,使其指向特殊的操作系统handlers |
Alter the pc to point into the new image | pc需要指向操作系统入口地址 |
在linux等复杂的操作系统,该阶段还要传递标准的数据结构给kernel。这个数据结构解释了kernel需要运行的环境。例如:
1. 表明了在平台上需要的RAM数量
2. 需要被使用的MMU的类型
…
ARM Firmware Suite(AFS)
提供了两个主要部分:
1. uHAL: 允许操作不同设备(USB,以太网,串口),并且提供了标准API
2. Angel-a debug monitor
uHAL
支持如下主要特性:
特性 | 解释 |
---|---|
System initialization | |
Polled serial driver | 提供与hot通信的基础方法 |
LED support | 提供一个应用程序来显示操作状态 |
Timer Support | 允许set up a periodic interrupt |
Interrupt controllers | 支持不同的中断控制器 |
Angel
支持如下功能:
1. 查看修改内存
2. 下载和执行镜像
3. 设置断点
4. 显示寄存器内容
所有的控制都是通过host debugger,The Angel debug monitor must have access to SWI,IRQ and FIQ
Red Hat Redboot
由Red Hat开发的固件工具。能在多种不同的CPU上运行,如ARM,MIPS,SH等等。其通过GDB提供调试能力。RedBoot核心在于HAL
RedBoot提供了这些主要特性:
1. Communication-通过串口和以太网进行设置,RedBoot支持许多网络便准。
2. Flash ROM memory management-provides a set of filing system routines that can download, update, and erase images in flash ROM.此外images可以被压缩和解压缩
3. Full operating support-支持许多当前流行的操作系统。
Example:Sandstone
作为一个迷你的系统,sandstone的作用是建立目标平台所需要的环境,加载bootable镜像到memory中去,转移控制权给操作系统。
Feature | Configuration |
---|---|
Code | ARM instruction only |
Tool chain | ARM developer Suite 1.2 |
Image size | 700 bytes |
Source | 17KB |
Memory | remapped |
Sandstone 执行流程
Step 1:Take the Reset Exception
具体代码见《ARM system developers guide》 P374
该阶段中,除了reset vector之外的所有vectors都是dummy handlers。而B sandtone_init1 ;reset vector
并且将控制权转移给初始化硬件的代码。
Step 2:Start Initializing the Hardware
执行完该步骤后:
system registers are set from a known base address-0x03ff0000
The segement display is configured, so that it can be used to display progress
该步骤的主要作用就是建立内存环境。
Step 3:Remap Memory
执行完该步骤后:
1. Memory has been remapped as shown in Table 10.5
2. pc now points to the next step, This address is located in the newly remapped flash ROM
Step 4:Initialize Communication Hardware
- 初始化串口-9600 把U盾, 无奇偶校验,无停止位,无流控制
- Sandstone banner sent out through the serial port:
Sandstone firmware (0.01)
-platform .......e7t
-status .......alive
-memory .......remapped
+booting payload...
Step 5:Bootloader-Copy Payload and Relinquish Control
步骤结果:
1. Payload copied into SRAM, address 0x00000000
2. pc的控制权递交给payload, pc = 0x00000000
3. 系统完全加载好。
Summary
- 本章节介绍了firmware。我们定义firmware是一种低层代码,作为硬件和应用程序或者操作系统之间的接口。我们也定义了bootloader,这是一种软件应用加载操作系统或者应用程序到内存之中,然后将控制权交给操作系统或者应用程序。
- 本章节还包括了ARM Firmware Suite and RedBoot。前者是设计面向基于ARM的系统的,而后者更通用,可以用于非ARM的处理器上。
- 最后我们介绍了简单的Sandstone,通过五个步骤,我们就有了完全初始化的ARM7TDMI的嵌入式系统。