在 Buildroot 构建嵌入式 Linux 系统时,最终的固件打包(如生成 sdcard.img 或 flash.bin)通常包含以下几个核心部分:
1. Bootloader(如 U-Boot)
- 作用:初始化硬件,加载内核和设备树。
- 打包形式:
u-boot.bin(裸二进制文件)u-boot.img(带头部信息的镜像,某些平台需要)
- 存储位置:通常放在存储介质的 起始扇区(如 SD 卡的
0x0偏移)。
2. Linux 内核(Kernel)
- 作用:操作系统核心,管理硬件和进程。
- 打包形式:
zImage(压缩的内核镜像,通用格式)uImage(U-Boot 专用格式,带头部信息)Image(未压缩的原始内核,某些平台使用)
- 存储位置:紧接在 Bootloader 之后(如 SD 卡的
0x8000偏移)。
3. 设备树(Device Tree Blob, DTB)
- 作用:描述硬件配置(如 CPU、内存、外设等)。
- 打包形式:
.dtb文件(如imx6ull-board.dtb)。
- 存储位置:
- 与内核分开存放(如 SD 卡的
0x100000偏移),由 U-Boot 单独加载。 - 或与内核合并(如
zImage + dtb打包成fitImage)。
- 与内核分开存放(如 SD 卡的
4. 根文件系统(Root Filesystem, Rootfs)
- 作用:包含用户空间程序、库、配置文件等。
- 打包形式:
- initramfs:临时内存文件系统(嵌入到内核中)。
- ext4/jffs2/squashfs:持久化文件系统镜像(如
rootfs.ext4)。 - cpio/tar:归档格式(用于 initramfs 或 NFS 挂载)。
- 存储位置:
- 单独分区(如 SD 卡的第二个分区
/dev/mmcblk0p2)。 - 或直接附加到内核后(initramfs)。
- 单独分区(如 SD 卡的第二个分区
5. 用户应用程序(Optional)
- 作用:自定义程序(如
/bin/helloworld)。 - 打包形式:
- 直接编译到根文件系统中(通过 Buildroot 的
package配置)。 - 或后期手动放入
rootfs镜像。
- 直接编译到根文件系统中(通过 Buildroot 的
6. 其他可选组件
- SPL(Secondary Program Loader):某些平台(如 ARM)需要两级 Bootloader(
SPL + U-Boot)。 - 启动脚本/环境变量:如 U-Boot 的
boot.scr或env.txt。 - 固件/驱动模块:如 WiFi 固件(
/lib/firmware)或内核模块(.ko文件)。
典型固件布局(以 SD 卡为例)
| 偏移地址 | 内容 | 文件示例 |
|---|---|---|
0x0 | Bootloader (SPL) | u-boot-spl.bin |
0x40000 | U-Boot | u-boot.bin |
0x80000 | Linux 内核 | zImage |
0x200000 | 设备树 | board.dtb |
| 分区2 | 根文件系统 | rootfs.ext4 |
Buildroot 如何打包固件?
Buildroot 通过 自定义脚本或工具(如 genimage)将上述组件按目标设备的存储布局打包。例如:
-
生成单个镜像文件(如
sdcard.img):genimage -c board/your_board/genimage.cfg
- 配置文件
genimage.cfg定义了分区表和文件填充规则。
- 输出目录结构(
output/images/):output/images/ ├── u-boot.bin # Bootloader ├── zImage # 压缩内核 ├── board.dtb # 设备树 ├── rootfs.ext4 # 根文件系统 └── sdcard.img # 最终固件(完整镜像)
总结
Buildroot 打包的固件通常包含:
- Bootloader(如 U-Boot)
- Linux 内核(
zImage或uImage) - 设备树(
.dtb) - 根文件系统(
rootfs.ext4等) - 用户应用程序(集成在
rootfs中)
最终固件的具体组成和布局取决于 目标硬件 和 Buildroot 配置(如 BR2_TARGET_UBOOT、BR2_LINUX_KERNEL 等)。
1199

被折叠的 条评论
为什么被折叠?



