genimage的使用
·
genimage的使用
一、环境准备与安装
安装依赖工具
sudo apt install libconfuse-dev genext2fs # 核心依赖
sudo apt install mtools dosfstools # FAT分区支持(可选)
sudo apt install autoconf automake libtool # 安装核心依赖
编译 genimage
git clone https://gitcode.com/gh_mirrors/genimage # 克隆源码 地址1
git clone https://github.com/pengutronix/genimage # 克隆源码 地址2
cd genimage
./autogen.sh && ./configure && make
sudo make install # 安装到系统路径
二、配置文件编写(genimage.cfg )
必须手动创建 genimage.cfg 文件,该文件不会自动生成
genimage.cfg 文件内容
以下示例配置文件适配 ARM32 设备(如全志 F1C200s、树莓派等):
# 定义最终输出的镜像文件
image sdcard.img {
size = 512M # 镜像总大小(按实际调整)
# 分区1:FAT32 格式(存放内核、设备树)
partition boot {
partition-type = 0xC # FAT32 类型标识
bootable = true # 设为可启动分区
image = "boot.vfat" # 子镜像名称
}
# 分区2:EXT4 格式(根文件系统)
partition rootfs {
partition-type = 0x83 # Linux 文件系统标识
image = "rootfs.ext4" # 子镜像名称
mountpoint = "/" # 挂载点(用于自动填充文件)
}
}
# 子镜像1:FAT32 分区内容
image boot.vfat {
size = 64M # 分区大小
type = "vfat" # 文件系统类型
files = {
"zImage", # ARM32 内核文件
"sunxi-f1c100s.dtb" # 设备树文件(按实际替换)
}
}
# 子镜像2:EXT4 分区内容
image rootfs.ext4 {
size = 448M # 分区大小
type = "ext4" # 文件系统类型
source = "rootfs/" # 根文件系统目录(需提前准备)
}
关键配置说明:
- partition-type:ARM32 设备通常使用 0xC(FAT32)和 0x83(EXT4)。
- bootable:启动分区必须标记为 bootable。
- source:根文件系统目录需包含 ARM32 架构的库和程序(如 lib/arm-linux-gnueabihf)。
三、生成镜像步骤
1 准备文件
将编译好的 ARM32 内核 zImage、设备树 .dtb 文件放入当前目录。
准备好 ARM32 的根文件系统(如通过 debootstrap 构建或从现成系统复制)。
2 运行 genimage
genimage --rootpath rootfs/ \ # 根文件系统路径
--tmppath build-tmp/ \ # 临时目录
--inputpath ./ \ # 输入文件路径(含 zImage/dtb)
--outputpath output/ \ # 输出目录
--config genimage.cfg # 配置文件
生成的文件位于 output/ 目录(如 sdcard.img )
3 烧录到设备
sudo dd if=output/sdcard.img of=/dev/sdX bs=4M status=progress
替换 /dev/sdX 为实际的 SD 卡设备节点。
四、ARM32 特殊注意事项
1 分区对齐问题
ARM32 设备通常要求分区起始扇区为 1(而非 0),确保 genimage.cfg 中未强制指定偏移量4。
若出现启动失败,检查分区表是否包含 扩展分区(ARM32 可能不支持逻辑分区)4。
2 内核兼容性
ARM32 镜像需使用 uImage 格式(非标准 Image),可通过 mkimage 工具转换:
mkimage -A arm -O linux -T kernel -C none -a 0x22008000 -e 0x22008000 -n "Linux" -d zImage uImage
3 文件系统权限
根文件系统需包含 ARM32 动态库(如 libc.so.6 ),可通过 file rootfs/bin/bash 验证架构。
五、完整流程总结
| 步骤 | 操作要点 | ARM32 特殊性 |
|---|---|---|
| 环境安装 | 安装依赖并编译 genimage | 无需交叉编译,x86 主机即可运行 |
| 配置文件 | 明确分区类型、大小及内容来源 | 分区标识符用 0xC/0x83 |
| 文件准备 | 内核需为 uImage,根文件系统需适配 ARM32 指令集 | 使用 mkimage 转换内核 |
| 生成与烧录 | 输出 .img 文件并用 dd 写入存储设备 | 检查分区表是否含扩展分区 |
问题排查:若设备无法启动,可通过 fdisk -l sdcard.img 验证分区表,或使用 QEMU 模拟测试(qemu-system-arm)。
更多案例参考:树莓派定制工具 rpi-image-gen(基于 genimage)
更多推荐




所有评论(0)