Howto : ルートファイルシステムをcramfsにする

対象製品: Armadillo-9Armadillo-240Armadillo-230Armadillo-220Armadillo-210

ルートファイルシステムを圧縮可能なファイルシステムであるcramfs[1]で作成し、読み込み専用のルートファイルシステムを構築する方法を紹介します。

おおまかな手順は下記のようになります。

  1. cramfsに関するオプションを追加したカーネルのイメージを作成する。
  2. fstabを編集し、ルートファイルシステムにmtdblock2を使用するように指定したユーザランドのイメージを作成する。
  3. 2.で作成したイメージから、cramfsのイメージを作成し、フラッシュメモリに書き込む。
  4. 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

[1] 小さなストレージ (ROM など) 向けの cram ファイルシステムの情報