ルートファイルシステムを圧縮可能なファイルシステムであるcramfs[1]で作成し、読み込み専用のルートファイルシステムを構築する方法を紹介します。
おおまかな手順は下記のようになります。
- cramfsに関するオプションを追加したカーネルのイメージを作成する。
- fstabを編集し、ルートファイルシステムにmtdblock2を使用するように指定したユーザランドのイメージを作成する。
- 2.で作成したイメージから、cramfsのイメージを作成し、フラッシュメモリに書き込む。
- hermitのKernel Command Lineを変更し、ブートする。
なお、本 Howto では、以下の環境を想定しています。
ご利用の環境に合わせて適宜読みかえてください。
- 対象製品:Armadillo-220
- atmark-dist: v20080617
- linux-kernel:linux-2.6.12.3-a9-15
1. cramfsに関するオプションを追加したカーネルのイメージを作成する。
今回使用するlinux-kernelでは、デフォルトの設定ではcramfsが有効になっていません。
make menuconfigを使用する場合は、下記のようにkernel configurationで、「Compressed ROM file system support (cramfs)」にチェックを追加してください。
File systems --->
Miscellaneous filesystems --->
<*> Compressed ROM file system support (cramfs) <--チェックを追加
2. fstabを編集し、ルートファイルシステムにmtdblock2を使用するように指定したユーザランドのイメージを作成する。
次に、ユーザランドの設定をおこないます。
必ず設定しなければならないのは、/etc/fstabのルートファイルシステムに使用するデバイスノードに関する設定のみです。
下記のように、ユーザランド領域(mtdblock2)をルートにし、そのファイルシステムにはcramfsを使用するように設定します。
/dev/mtdblock2 / cramfs defaults 0 1
#/dev/hda1 / ext2 defaults 0 1
#/dev/hda2 none swap sw 0 0
proc /proc proc defaults 0 0
usbfs /proc/bus/usb usbfs defaults 0 0
sysfs /sys sysfs defaults 0 0
また、読み込み専用のため、追加設定しても反映されませんので、/etc/init.d/rcを、削除してしまいます。
以上の設定をおこなったあと、通常どおりmakeし、カーネルとユーザランドのイメージを作成します。
3. 2.で作成したイメージから、cramfsのイメージを作成し、フラッシュメモリに書き込む。
作成したユーザランドのイメージからcramfsのイメージを作成し、フラッシュメモリに書き込みます。
開発用PCで、作成したイメージを一度マウントし、mkcramfsコマンドでcramfsのイメージを作成します。
$ sudo mount -t ext2 -o loop images/romfs.img /mnt/
$ sudo mkcramfs /mnt images/romfs.img.cramfs
作成したユーザランドイメージromfs.img.cramfsとカーネルイメージlinux.bin.gzをhermitなどでフラッシュメモリに書き込みます。
4. hermitのKernel Command Lineを変更し、ブートする。
最後に、hermitのsetenvコマンドを使用して、Kernel Command Lineを指定し、起動します。
hermit> setenv noinitrd root=/dev/mtdblock2 rootfstype=cramfs
hermit> b