我正在尝试使用 genimage 设置我的 buildroot 映像。这是默认配置文件:
image boot.vfat {
vfat {
files = {
"bcm2710-rpi-3-b.dtb",
"rpi-firmware/bootcode.bin",
"rpi-firmware/cmdline.txt",
"rpi-firmware/config.txt",
"rpi-firmware/fixup.dat",
"rpi-firmware/start.elf",
"kernel-marked/zImage"
}
}
size = 32M
}
image sdcard.img {
hdimage {
}
partition boot {
partition-type = 0xC
bootable = "true"
image = "boot.vfat"
}
partition rootfs {
partition-type = 0x83
image = "rootfs.ext4"
}
}
nconfig > filesystem images 字段设置为默认值。我不需要在 rootfs 上留出更多可用空间。
相反,我想创建另一个 ext4 分区,比如说 100M。因此,这是我创建的新 genimage 文件:
image boot.vfat {
vfat {
files = {
"bcm2710-rpi-3-b.dtb",
"rpi-firmware/bootcode.bin",
"rpi-firmware/cmdline.txt",
"rpi-firmware/config.txt",
"rpi-firmware/fixup.dat",
"rpi-firmware/start.elf",
"kernel-marked/zImage"
}
}
size = 32M
}
image opt.ext4 {
ext4 { }
size = 100M
}
image sdcard.img {
hdimage {
}
partition boot {
partition-type = 0xC
bootable = "true"
image = "boot.vfat"
}
partition rootfs {
partition-type = 0x83
image = "rootfs.ext4"
}
partition opt {
partition-type = 0x83
image = "opt.ext4"
}
}
但它返回此错误:
genext2fs: couldn't allocate a block (no free space)
ext4(opt.ext4): failed to generate opt.ext4
我的错误在哪里?我认为我不需要在 buildroot 设置中保留更多空间,因为我正在创建一个新分区,而不是调整 rootfs 的大小!
答案1
我遇到了类似的问题,请确保您在主机工具中启用了 GENEXT2FS。
R2_PACKAGE_HOST_GENEXT2FS=y
看起来 buildroot 会将所有 rootfs 文件放入您定义的每个分区中。如果您增加最大文件大小并挂载分区,则可以看到整个文件系统。
我发现你不应该使用 genimage 来创建分区,而是参考已经创建的文件系统。(并删除顶部的图像 application.ext4 定义)
genimage.cfg:
partition application {
partition-type = 0x83
image = "application.ext4"
}
您可以在 buildroot/output/images 文件夹中创建 application.ext4 文件,如下所示:
dd if=/dev/zero of=application.ext4 bs=1M count=20
mke2fs application.ext4
完成后,您可以挂载分区并看到您有一个可用的空分区!(在您的物理设备或 QEMU 中)
mkdir /mnt/test
mount -t ext4 /dev/vda3 /mnt/test
我知道这个问题已经很老了,但是我在这个问题上浪费了很多时间,而且谷歌似乎没有足够的资源来解决这个问题。