Yocto Linux 기반 임베디드 장치에서 내 rootfs는 RO이고 RW 데이터를 위한 추가 파티션이 있습니다. 이제 부팅 시 다른 파티션에 저장된 /etc에 오버레이를 자동으로 마운트하고 싶습니다. 이것은 내 fstab입니다.
/dev/mmcblk0p6 /data_local ext4 defaults,sync,noexec,rw 0 2
[...]
overlay /etc overlay defaults,lowerdir=/etc,upperdir=/data_local/overlayfs/upper/etc,workdir=/data_local/overlayfs/workdir,X-mount.mkdir,x-systemd.requires=/data_local,x-systemd.before=local-fs.target,x-systemd.before=systemd-networkd 0 0
그러나 처음 시작할 때 upperdir 및 workdir 디렉터리가 없기 때문에 이 작업은 실패합니다. 이러한 디렉터리를 자동으로 생성하려면 fstab 또는 systemd.mount를 어떻게 얻나요?
답변1
나는 결국 Yocto 4.0부터 사용할 수 있는 Yocto의 overridefs-etc.bbclass 기능을 사용하게 되었습니다. 설명서는 다음 위치에 있습니다.https://docs.yoctoproject.org/ref-manual/classes.html#ref-classes-overlayfs-etc
bbclass 오버레이가 설치되기 전에 런타임에 폴더가 생성되도록 /sbin/init의 init 프로세스를 패치합니다. 바라보다:https://git.yoctoproject.org/poky/plain/meta/files/overlayfs-etc-preinit.sh.in
이미지에 이것을 추가하는 것은 매우 간단합니다.
machine.conf에 추가하십시오:
OVERLAYFS_ETC_MOUNT_POINT = "/data_local"
OVERLAYFS_ETC_DEVICE = "/dev/mmcblk0p6"
OVERLAYFS_ETC_FSTYPE = "ext4"
OVERLAYFS_ETC_MOUNT_OPTIONS = "defaults,sync"
이미지에 추가:
IMAGE_FEATURES:append = " overlayfs-etc"
물론, 부팅 미디어에 사용 가능한 추가 읽기/쓰기 설치 파티션이 있는지 확인해야 합니다(SD 카드에 플래시된 이미지에 있음). 제 경우에는 mmcblk0p6입니다.