Squashfsマウントできた
Orange pi R1用OS作成でSquashfsマウントできた。initramfsなしで。
リードオンリーになっちゃうけど、これで/sbin/init実行できるから/etc/fstabにoverlay書けばいいんじゃないかな?
まずinitramfsを使ってみようと思って、実機の方で作業しようと思ったがBusyBoxのcpioが違っててやり方がわかんなかったので母艦でやった。
作業ディレクトリのしたに dev bin mnt を作成。
binにbusyboxをコピーしてシンボリックリンクで sh mount switch_root を作る。
作業ディレクトリの直下に init スクリプトを作る。
initの内容は
/mnt にrootfsをマウントする。
/mnt にswitch_root で/sbin/init を実行。
て感じかな?
initを実行可能にして作業ディレクトリをinitramfs化する。
てな感じでやってブートしてみてエラーでなかったが、もともとextのrootfsでinitramfsなしでブートできてたからよくわからん。
というわけで、rootfsをSquashfsにして起動してみたがダメ。initramfsなしでブートしてもダメ。
kernelをSquashfs有効にしないで作ってるから当然w
kernel作り直しだが、menuconfigの Miscellaneous filesystems の下にSquashfsあった。
これ有効にしてリビルド。
extのrootfsで起動確認したあとでSquashfsで起動してみたが、initramfsなしで起動できた。
今回のリビルドの際に要らないもん消したからzImageは4MB割ってるがあまり削減余地はなさそう。
リードオンリーになっちゃうけど、これで/sbin/init実行できるから/etc/fstabにoverlay書けばいいんじゃないかな?
まずinitramfsを使ってみようと思って、実機の方で作業しようと思ったがBusyBoxのcpioが違っててやり方がわかんなかったので母艦でやった。
$ su
# mount /dev/sdg2 /mnt
# mkdir /tmp/initrd
# mkdir /tmp/initrd/dev
# mkdir /tmp/initrd/bin
# mkdir /tmp/initrd/mnt
# cp -a /mnt/bin/busybox /tmp/initrd/bin
# ln -s busybox /tmp/initrd/bin/sh
# ln -s busybox /tmp/initrd/bin/mount
# ln -s busybox /tmp/initrd/bin/switch_root
# nano /tmp/initrd/init
# chmod 744 /tmp/initrd/init
# mount /dev/sdg2 /mnt
# cd /tmp/initrd
# find . | cpio -o | gzip -9 -c > /mnt/initramfs.img
こんな感じの作業内容かな?# mount /dev/sdg2 /mnt
# mkdir /tmp/initrd
# mkdir /tmp/initrd/dev
# mkdir /tmp/initrd/bin
# mkdir /tmp/initrd/mnt
# cp -a /mnt/bin/busybox /tmp/initrd/bin
# ln -s busybox /tmp/initrd/bin/sh
# ln -s busybox /tmp/initrd/bin/mount
# ln -s busybox /tmp/initrd/bin/switch_root
# nano /tmp/initrd/init
# chmod 744 /tmp/initrd/init
# mount /dev/sdg2 /mnt
# cd /tmp/initrd
# find . | cpio -o | gzip -9 -c > /mnt/initramfs.img
作業ディレクトリのしたに dev bin mnt を作成。
binにbusyboxをコピーしてシンボリックリンクで sh mount switch_root を作る。
作業ディレクトリの直下に init スクリプトを作る。
initの内容は
#!/bin/sh
/bin/mount -t devtmpfs devtmpfs /dev
/bin/mount /dev/mmcblk0p2 /mnt
exec /bin/switch_root /mnt /sbin/init
/dev にdevをマウントする。/bin/mount -t devtmpfs devtmpfs /dev
/bin/mount /dev/mmcblk0p2 /mnt
exec /bin/switch_root /mnt /sbin/init
/mnt にrootfsをマウントする。
/mnt にswitch_root で/sbin/init を実行。
て感じかな?
initを実行可能にして作業ディレクトリをinitramfs化する。
てな感じでやってブートしてみてエラーでなかったが、もともとextのrootfsでinitramfsなしでブートできてたからよくわからん。
というわけで、rootfsをSquashfsにして起動してみたがダメ。initramfsなしでブートしてもダメ。
kernelをSquashfs有効にしないで作ってるから当然w
kernel作り直しだが、menuconfigの Miscellaneous filesystems の下にSquashfsあった。
これ有効にしてリビルド。
extのrootfsで起動確認したあとでSquashfsで起動してみたが、initramfsなしで起動できた。
# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 7424 7424 0 100% /
devtmpfs 116652 0 116652 0% /dev
tmpfs 125356 0 125356 0% /dev/shm
tmpfs 125356 32 125324 0% /tmp
tmpfs 125356 24 125332 0% /run
圧縮しても7MBで、u-bootとzImage等で別途5MBくらい必要だから余裕ないね。Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 7424 7424 0 100% /
devtmpfs 116652 0 116652 0% /dev
tmpfs 125356 0 125356 0% /dev/shm
tmpfs 125356 32 125324 0% /tmp
tmpfs 125356 24 125332 0% /run
今回のリビルドの際に要らないもん消したからzImageは4MB割ってるがあまり削減余地はなさそう。
Squashfs+overlayfsだとSquashfs側が変更されないから、もうちょいextで調整する。
寝てる間にlighttpdはやっぱuhttpdに変えてBuildrootもやり直してみるか。
寝てる間にlighttpdはやっぱuhttpdに変えてBuildrootもやり直してみるか。