让我们讨论一个构建系统映像的非常常见的情况,在这种情况下,我们需要将rootfs作为SquashFs
确实是只读的,并需要将另一个ext4
分区(比如说home
)用于常规读取,写存储。
在buildroot环境中,系统映像布局(genimage.cfg
)如下所示:
image sdcard.img {
hdimage {}
partition boot {
partition-type = 0xC
bootable = "true"
image = "boot.vfat"
}
partition rootfs {
partition-type = 0x83
image = "rootfs.squashfs"
}
partition home {
partition-type = 0x83
image = "home.ext4"
}
}
image boot.vfat {
vfat {
files = {
"bcm2711-rpi-4-b.dtb",
"rpi-firmware/cmdline.txt",
"rpi-firmware/config.txt",
"rpi-firmware/fixup4.dat",
"rpi-firmware/start4.elf",
"rpi-firmware/overlays",
"zImage"
}
}
size = 16M
}
image home.ext4 {
name = "home"
mountpoint = "/home"
ext4 {}
size = 32M
}
但是在创建图像的最后阶段,我们最终得到一个错误:
>> Executing post-image script ~/rpi4/post-image.sh
INFO: cmd: "mkdir -p "/home/iman/rpi4/genimage.tmp"" (stderr+stdout):
INFO: cmd: "rm -rf "/home/iman/rpi4/genimage.tmp"/*" (stderr+stdout):
DEBUG: hdimage(sdcard.img): adding implicit file rule for 'rootfs.squashfs'
DEBUG: vfat(boot.vfat): adding implicit file rule for 'bcm2711-rpi-4-b.dtb'
DEBUG: vfat(boot.vfat): adding implicit file rule for 'rpi-firmware/cmdline.txt'
DEBUG: vfat(boot.vfat): adding implicit file rule for 'rpi-firmware/config.txt'
DEBUG: vfat(boot.vfat): adding implicit file rule for 'rpi-firmware/fixup4.dat'
DEBUG: vfat(boot.vfat): adding implicit file rule for 'rpi-firmware/start4.elf'
DEBUG: vfat(boot.vfat): adding implicit file rule for 'rpi-firmware/overlays'
DEBUG: vfat(boot.vfat): adding implicit file rule for 'zImage'
INFO: cmd: "mkdir -p "/home/iman/rpi4/genimage.tmp"" (stderr+stdout):
INFO: cmd: "cp -a "/tmp/tmp.dMfSigyUwW" "/home/iman/rpi4/genimage.tmp/root"" (stderr+stdout):
INFO: cmd: "mv "/home/iman/rpi4/genimage.tmp/root/home" "/home/iman/rpi4/genimage.tmp/home"" (stderr+stdout):
mv: cannot stat '/home/iman/rpi4/genimage.tmp/root/home': No such file or directory
Makefile:809: recipe for target 'target-post-image' failed
make[1]: *** [target-post-image] Error 1
Makefile:84: recipe for target '_all' failed
make: *** [_all] Error 2
应采取哪些其他步骤?
或更笼统地说,在buildroot中创建+挂载新分区的方法是什么?
如果您想要一个空的/home
目录,那么您应该not使用mountpoint
关键字:
image home.ext4 {
name = "home"
ext4 {}
size = 32M
}
mountpoint
关键字不会not告诉将在哪里挂载分区。有关其功能的说明,请参见The genimage docs。
[如果要从rootfs挂载分区,则可以将其添加到/etc/fstab
,也许以rootfs覆盖(BR2_ROOTFS_OVERLAY)。 genimage无法控制实际安装的内容。