Howto

NANDフラッシュメモリに保存したルートファイルシステムで起動する

Armadillo-220、Armadillo-230、Armadillo-240のNANDフラッシュメモリ(以下、NANDフラッシュ)に保存したファイルシステムをルートファイルシステムとして使う方法について説明します。 現在、atmark-distでNANDフラッシュ用のファイルシステムイメージを自動的に生成できませんが、atmark-distで設定しているユーザランド(romfs)を元に作成することは可能です。

1. ファイルシステムの選択

デフォルトでは、起動時にatmark-distで生成したromfsイメージがNORフラッシュメモリからRAMにコピーされ、書き込み可能でルートファイルシステムとしてマウントされます。そのため、ファイルシステムの内容を変更することができますが、電源を切るとその変更が消えてしまいます。

NANDフラッシュに保存しているファイルシステムの方を利用する時、上記のようにRAMにコピーされないので、ファイルシステムの内容を変更するとNANDフラッシュ上のデータが更新されます。

NANDフラッシュ上にファイルシステムを構築する際、NANDフラッシュの劣化とデータ更新中に電源を切った時のデータ破壊という問題を意識する必要があります。この2つの問題の対策として、NANDフラッシュメモリ用のファイルシステムを使う方法があります。

フラッシュメモリ用のファイルシステムについて

jffs2などのフラッシュメモリ用のファイルシステムを利用することで、上記の問題の影響を最小にすることができます。jffs2はNANDフラッシュの劣化をできるだけ避けるためにウェアレベリング機能を実装しています。そして、書き込み中に電源が切れた時にデータが破壊されないように、NANDフラッシュの領域をすぐ削除するのではなく、別の空き領域にデータを新しいバージョンとして保存します。保存されたデータはマウントの時にチェックされて、古いバージョンのデータが必要に応じて削除されます。そのため、データが更新中に電源を切断した場合、データはもちろん保存されませんが、壊れたデータが保存されませんし、ファイルシステムが不安な状態になりません。

2. ルートファイルシステムの準備

通常ArmadilloのNORフラッシュメモリに書き込むファイルシステムイメージ(romfs.img/romfs.img.gz)をそのまま利用します。このイメージの作成方法についてはArmadilloのソフトウエアマニュアルやatmark-distのDevelopers Guideを参照してください。

[PC ~/atmark-dist]$ make
[PC ~/atmark-dist]$ ls images
linux.bin  linux.bin.gz  romfs.img  romfs.img.gz

FTPでルートファイルシステムを持つromfs.imgをArmadilloに転送しますが、ファイルサイズが少々大きめなため、先に /home/ftp/pub/ をRAMファイルシステムとしてマウントしておきます。

[armadillo ~]# mount -t ramfs none /home/ftp/pub/
[armadillo ~]# chmod o+xw /home/ftp/pub/
[PC ~/atmark-dist]$ ncftpput -u ftp [Armadilloのipaddr] pub images/romfs.img

3. NANDフラッシュへの書き込み

flash_eraseallコマンドを使用してNANDフラッシュをjffs2ファイルシステムで初期化します。

[armadillo ~]# flash_eraseall -j /dev/mtd4

NANDフラッシュとromfsイメージのファイルシステムをマウントして、romfsイメージの中身をNANDフラッシュにコピーします。

[armadillo ~]# mkdir /mnt/nand
[armadillo ~]# mkdir /mnt/romfs
[armadillo ~]# mount -t jffs2 /dev/mtdblock4 /mnt/nand
[armadillo ~]# mount -t ext2 -o loop /home/ftp/pub/romfs.img /mnt/romfs
[armadillo ~]# cp -a /mnt/romfs/* /mnt/nand/

コピー後、ファイルシステムをumountして、終了します。

[armadillo ~]# umount /mnt/nand
[armadillo ~]# halt

4. カーネルパラメータの変更

Hermitを起動し、カーネルパラメータを設定します。 ArmadilloのJP2をショートしてから電源を投入します。 hermitのsetenvコマンドを使用して、NANDフラッシュのjffs2ファイルシステムがルートファイルシステムとしてマウントされるようにカーネルパラメータを設定します。

hermit> setenv root=/dev/mtdblock4 rootfstype=jffs2 noinitrd
hermit> setenv
1: root=/dev/mtdblock4
2: rootfstype=jffs2
3: noinitrd

それぞれのパラメータの意味は以下の通りです。

root=/dev/mtdblock4 : ルートファイルシステムにNANDフラッシュのMTDパーティションを利用する rootfstype=jffs2 : ルートファイルシステムはjffs2である noinitrd : 起動時にinitrd(RAMディスク)を利用しない

5. Linuxの起動

hermitのbootコマンドを使用してLinuxを起動します。

hermit> boot

これで、NANDフラッシュに保存されているユーザランドが利用されます。