我正在尝试使用 swupdate 对基于 yocto 的系统实施更新。问题是,我实际上在
.wic
和 .tar.gz
版本的图像中没有相同的内容。第一个具有从 .wks
文件生成的分区表,另一个具有来自 poky
的默认分区表。
我的问题的简短版本是:我可以在
/etc/fstab
中获取由 wic
生成的 rootfs
用于除 .wic
之外的导出吗?
所以我有一个项目,它生成三个文件作为输出
IMAGE_FSTYPES = "wic.bz2 wic.bmap tar.gz"
最重要的是,我有一个
my-project-swu
配方,它使用基本图像生成 .swu
文件
IMAGE_DEPENDS = "my-project-full"
SWUPDATE_IMAGES = " \
my-project-full \
"
SWUPDATE_IMAGES_FSTYPES[my-project-full] = ".tar.gz"
并且
wic
文件是根据以下wks
配置生成的
part /boot --source bootimg-partition --ondisk mmcblk0 --fstype=vfat --label boot --active --align 4096
part / --source rootfs --ondisk mmcblk0 --fstype=ext4 --label root --align 4096 --size=1G
part --ondisk mmcblk0 --label alt_rootfs --align 4096 --size=1G
part /data --size 1G --ondisk mmcblk0 --fstype=ext4 --label data --align 4096
当我第一次使用
bmaptool
部署映像时,/etc/fstab
文件包含以下内容
/dev/root / auto defaults 1 1
# Some default values here ...
/dev/mmcblk0p1 /boot vfat defaults 0 0
/dev/mmcblk0p4 /data ext4 defaults 0 0
这包括
/boot
分区,其中包含 u-boot
使用的 SWUpdate
环境以及数据分区。
但是成功更新后文件包含:
/dev/root / auto defaults 1 1
# Some default values here ...
所以现在
/boot
丢失了,因此尝试向 u-boot
发出启动成功的信号是行不通的,并且 /data
分区也不可用。现在,我可以在更新后将文件从一个根复制到下一个根,但这仅在我有可写根时有效,但情况可能并不总是如此。
如果我查看构建目录,我确实会看到两个文件
./tmp-glibc/work/raspberrypi3_64-oe-linux/my-project-full/1.0-r0/build-wic/fstab
具有完整版本,而 ./tmp-glibc/work/raspberrypi3_64-oe-linux/my-project-full/1.0-r0/rootfs/etc/fstab
具有默认版本。据我了解,这是可以预料的,因为 wic
仅针对 .wic
输出自动执行,因此添加或删除 .wic
输出不会影响不相关的输出。
解决该问题的最简单的解决方案是用硬编码文件替换默认的
fstab
文件,但这意味着 wks
和 fstab
之间的信息必须保持一致,我宁愿只使用该文件由 wic
生成,作为 .swu
文件的基础。
另一种解决方案是直接使用
.wic
文件作为我的更新的输入。虽然我认为这是可能的,但这看起来不像是标准的事情,也不是正确的方法。
所以理想情况下我宁愿将
fstab
直接放在.wic
中,这样无论使用哪种格式导出,分区都会一致使用,但我不明白我怎样才能做到这一点。rootfs
传递其他参数。您的情况的开关是
WIC_CREATE_EXTRA_ARGS
。例如在你的--no-fstab-update
meta-myproject-bsp/conf/machine/mydevice.conf
缺点:您必须添加自己的 /etc/fstab 并且必须使其与您的 *.wks 文件保持同步