2021/6/22

Try overlayfs in embeddes system.

copy initrd.img-5.4.83-v7+-overlay 出來,rename img.gz, unpack 後,
mkdir out && cd out
cpio -idv < ../initrd.img

ref: 這一篇的方法好像不需要 用到 initramfs,只需要在真正 init 起來之前做就可以。
修改 kernel boot cmd,init=/myinit
然後myinit 就啟動 /bin/sh

進入後,測試 command:
mkdir : OK
mount / /rom : OK
mount -o remount,ro /rom : fail, 說沒有 /proc/mounts

所以 myinit 要加上
mount -t proc none /proc
之後 remount OK

最後是
exec chroot /rom /linuxrc
這樣就可以了。
要測試就把上面改成
/bin/sh
就會開進 shell 測試在這時候的 command 有沒有用。

mount --move 是變更 mount 位置,這樣就不用 unmount 之後再 mount

成功! final version ( /overlay folder must be created in first):
#!/bin/sh

mount -t proc none /proc
mount -t tmpfs none /overlay

mkdir /overlay/lower
mkdir /overlay/upper
mkdir /overlay/worker
mkdir /overlay/newroot

mount / /overlay/lower
mount -o remount,ro /overlay/lower

mount -t overlay overlay -olowerdir=/overlay/lower,upperdir=/overlay/upper,workdir=/overlay/worker /overlay/newroot

exec chroot /overlay/newroot /linuxrc
測試...開機後,在 / create abc, ls to see if exist.
reboot, see abc disappear

用 mount 看:
overlay on / type overlay (rw,relatime,lowerdir=/overlay/lower,upperdir=/overlay/upper,workdir=/overlay/worker)
大概是成功了。

沒有留言:

張貼留言