嵌入式系统设计:启动加载器、文件系统与执行技术
1. 其他启动加载器
uImage 是 U-Boot 特有的。其他启动加载器支持如 zImage 或 srecImage 等格式。与 U-Boot 不同,这些文件格式没有关于图像存储位置的额外元数据,也无法添加文本版本字符串。如果你的开发板使用此类启动加载器,除了确保构建过程中的内核能正确启动外,无需过多操作。之后该文件可直接投入生产,多数组织会更改文件名以显示版本号。
2. 就地执行(XIP)技术
2.1 技术原理
使用就地执行(XIP)技术时,内核代码直接从闪存运行,即代码在运行前无需加载到 RAM 中。要使用这种内核,需在构建时设置“Kernel Execute-In-Place from ROM”标志,并且要知道内核在闪存中的位置,以便文件能以正确的偏移量进行链接。
2.2 内存使用情况
这并不意味着内核不消耗任何 RAM 内存,内核仍会使用 RAM 来存储栈和堆。不过,由于代码在闪存空间中运行,内核消耗的内存会相应减少。但内核存储在闪存中时不会被压缩,因此用于存储根文件系统的闪存空间会减少。如果 RAM 比闪存更稀缺,那么闪存空间减少可能不是问题;但如果设备的零部件成本很关键,使用比 RAM 更多的闪存可能会增加设备的单位成本。对于使用固定 RAM 和闪存且无法更改的标准开发板,这可能不是大问题,但在创建定制开发板时则需考虑。
2.3 创建 XIP 图像示例
以 U-Boot 为例,创建适用于 XIP 的图像需要向 mkimage 命令添加 -x 参数: