Yocto - 创建并填充单独的 /home 分区

13

我正在基于x86创建一个相当简单的Yocto镜像。

我希望文件系统 / 是只读的,因此我进行了设置:

IMAGE_FEATURES_append = " read-only-rootfs "
在原始的 core-image-minimal.bb 的自定义副本中,我确实希望将 /home 设置为可写并且位于单独的分区上。
因此,我正在添加一行。
part /home --ondisk sda --fstype=ext4 --label home --align 1024 --size 600

在genericx86.wks中,这将在最终的wic映像中创建实际的/home分区,但它自然不会保存任何数据,因为没有相应的rootfs。这导致启动后出现以下预期的信息:No directory, logging in with HOME=/

互联网上关于此的信息非常少。有这个解释:

创建或修改构建配方以准备每个分区的一个rootfs目录会更简单。

我只希望文档或示例中有任何参考信息来实现这一点。

我可以看到分区正在被Python脚本(插件)像rootfs.py填充,并且像genericx86.wks这样的提到的映像配方文件中指定了像IMAGE_ROOTFS_SIZE之类的图像参数,但这对我来说并不足以将这些部分连接在一起。

我已阅读creating-partitioned-images-using-wic和链接的openembedded kickstart手册,但那里没有线索。

感激任何人的帮助。

2个回答

19

使用 WIC,您可以像这样做:

custom.wks.in

...

part / --source rootfs --ondisk sda --fstype=ext4 --label system --exclude-path=home/    
part /home --source rootfs --rootfs-dir=${IMAGE_ROOTFS}/home --ondisk sda --fstype=ext4 --label home

...

请注意,如果您想在WKS文件中使用${IMAGE_ROOTFS},则需要使用.in后缀进行命名。


2
非常感谢您的快速和正确的答复。我已经测试过了,运行得很完美,并且也有意义。我已经将原始wks文件复制到了我的层中的wic文件夹下:wic/myfile.wks.in,在我的层的layer.conf中添加了WKS_FILE="myfile.wks.in",并在文件中按照您的建议更改了分区。此外,将--size设置添加到设置/home的大小中也没有问题。 - fault-tolerant
1
当启用包管理功能时,Wic会添加1GB。要修复分区大小,您必须设置IMAGE_ROOTFS_EXTRA_SPACE =“0”IMAGE_OVERHEAD_FACTOR =“1.0”IMAGE_ROOTFS_SIZE =“<size>”IMAGE_ROOTFS_MAXSIZE =“<size>” - Nayfe
1
@alebo611,你可以通过配方或ROOTFS_POSTPROCESS_COMMAND创建一个名为“foo”的文件夹,它应该可以工作。 - Nayfe
@Tomy 通常情况下,WIC会自动为/etc/fstab中的每一行添加一个条目,你这里是这种情况吗?也许你可以检查启动日志,看是否有与磁盘挂载相关的错误? - Nayfe
1
@sopryshko 这是 --exclude-path=home/ 的作用,它会从 rootfs 分区中删除 "home" 文件夹。或者我没有理解你的问题 :( - Nayfe
显示剩余9条评论

0

我遇到了同样的问题,Nayfe提出的解决方案对我有所帮助:它创建了分区并将其填充了/home的内容。但是该分区未被挂载,而且/home中的文件权限也被破坏了。

为了挂载该分区,我在/etc/fstab中添加了一个条目(使用了Yocto recipe to update /etc/fstab进行帮助)

为了修复所有权/权限问题,我使用了--change-directory=home而不是--rootfs-dir=${IMAGE_ROOTFS}/home。(它还可以修复在do_image_wic期间发出的警告,这对于搜索问题的源头非常有帮助:.../pseudo folder does not exist. Usernames and permissions will be invalid


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接