|
このページは「24環境」の情報です 第6回 MTD + JFFS2 (cramfs)で最強武装 †海老原祐太郎
2002/8/30
MTD (メモリーテクノロジーデバイス)とは、素のRAMやフラッシュROMをディスクとして扱う機能です。 JFFS2は "The Journalling Flash File System, version 2" ファイルシステムで、 カーネル 2.4.19 で作業しますので、まだ 2.4.19 に移行していない方は第4回 Linux-2.4.19を使おう を参考にしてください。 フラッシュROMの型番が SST 39SF010A と最後に"A"付きのものしかサポートしていません。 メモリマップ †フラッシュROMの容量はわずか128Kバイトです。 パッチを当てる †kernelpatch_2.4.19_cat68701-mtd.diff.gz をダウンロードして linux-2.4.19 にパッチを当てます。 $ cd linux-2.4.19 $ zcat kernelpatch_2.4.19_cat68701-mtd.diff.gz | patch -p1 patching file drivers/mtd/chips/jedec_probe.c patching file drivers/mtd/maps/Config.in patching file drivers/mtd/maps/Makefile patching file drivers/mtd/maps/cat68701.c コンパイル †いつもと同じように make menuconfig します。 Memory Technology Devices (MTD) ---> <*> Memory Technology Device (MTD) support [ ] Debugging <*> MTD partitioning support < > MTD concatenating support < > RedBoot partition table parsing --- User Modules And Translation Layers < > Direct char device access to MTD devices <*> Caching block device access to MTD devices < > FTL (Flash Translation Layer) support < > NFTL (NAND Flash Translation Layer) support RAM/ROM/Flash chip drivers ---> < > Detect flash chips by Common Flash Interface (CFI) probe <*> Detect non-CFI AMD/JEDEC-compatible flash chips [ ] Flash chip driver advanced configuration options < > Support for Intel/Sharp flash chips <*> Support for AMD/Fujitsu flash chips <*> Support for RAM chips in bus mapping < > Support for ROM chips in bus mapping < > Support for absent chips in bus mapping [ ] Older (theoretically obsoleted now) drivers for non-CFI chips Mapping drivers for chip access ---> < > CFI Flash device in physical memory map <*> CAT68701 mtd map (JEDEC_FLASH and SRAM) File systems ---> <*> Journalling Flash File System v2 (JFFS2) support
$ make dep zImage modules モジュールにした場合はロードの順番がありますので、 mtdpart gen_probe cfi_cmdset_0002 jedec_probe map_ram cat68701 mtdblock jffs2 起 動 †liloを打って新しいカーネルで起動してください。 Found: SST 39SF010A number of JEDEC chips: 1 Creating 2 MTD partitions on "CAT68701 FLASH": 0x00000000-0x00008000 : "IPL" 0x00008000-0x00020000 : "Flash FS" 確認してみます。 supercat:~# cat /proc/mtd dev: size erasesize name mtd0: 00008000 00001000 "IPL" mtd1: 00018000 00001000 "Flash FS" mtd2: 00080000 00001000 "CAT68701 SRAM" フォーマット †jffs2ファイルシステムを使うので、まずはツールをインストールします。 この作業は PCで行ってもSH3マシンで行ってもどちらでもOK # apt-get install mtd-tools # mkdir jffs2tmp 仮のルートファイルシステムを作る # touch jffs2tmp/hoge 最低でも何か一個ファイルが必要らしい # mkfs.jffs2 -r jffs2tmp/ -p -e 0x1000 -o jffs2.img -r ルート -p 残りのスペースは埋める -e セクターサイズ(=4K) -o 出力ファイル名 jffs2.img が出来上がります。これがJFFS2ファイルシステムのイメージです。 この作業はSH3マシンで行わないと意味無い # mknod /dev/mtd0 b 31 0 # mknod /dev/mtd1 b 31 1 # mknod /dev/mtd2 b 31 2 # cp jffs2.img /dev/mtd1 間違って /dev/mtd0 に書き込まないよーに。こちらはipl領域なので起動できなくなります。 マウント †早速マウントしてみます。 # mkdir /flash # mount -t jffs2 /dev/mtd1 /flash # cd /flash # ls hoge # mount /dev/hda1 on / type ext2 (rw,errors=remount-ro) proc on /proc type proc (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) /dev/mtd1 on /flash type jffs2 (rw) # df -h Filesystem Size Used Avail Use% Mounted on /dev/hda1 323M 199M 107M 65% / /dev/mtd1 96k 24k 72k 25% /flash 容量は本当に少ないですが、使い方を考えれば便利に使えると思います。 <2002-08-31 追記> JFFS2はデフォルトで圧縮機能を持ってると教えてもらいました(知らなかった。汗) 早速圧縮率を見てみたら半分とは言わないまでもかなり小さくなってました。 ちなみに オールゼロのファイルをコピーしたらどんなにサイズがでかくても4Kでした。 supercat:/flash# du -hs /boss/kernel/linux-2.4.19/fs/cramfs/ 72k /boss/kernel/linux-2.4.19/fs/cramfs ← ハードディスク上 supercat:/flash# du -hs cramfs/ 42k cramfs ← jffs2上でのサイズ BIOSのアップグレード †/dev/mtd0 の方は、ipl領域ですから、ここにiplプログラムを書き込むことでBIOSのアップグレードができます。 BIOSダウンロードページ (sh-stub.bin) # cp sh-stub.bin /dev/mtd0 (5秒くらい・・電源は絶対に切らないこと) これだけです。これで最新のBIOSに更新できます。 SRAMの方は? †/dev/mtd2 がSRAMですが、同じ手順で JFFS2 を使うとうまくいきません。(>_<) # mkdir /sram # mkfs.ext2 /dev/mtd2 # mount /dev/mtd2 /sram <2001-08-31追記> JFFS2はMTDのフラッシュメモリ上でしか動かないような感じです。 struct mtd_info -> read8() や write8() を呼び出しているのでうすうすそんな気がしてたんですけど、、 例えば HDDの空きパーテーションで実験しましたがNGでした。 ということはCF(コンパクトフラッシュ)とかにも使えないっぽい。残念。 cramfs †おまけ。 $ make menuconfig File systems ---> <*> Compressed ROM file system support 先ほどと同じように、イメージを作るところまでは PCでもSH3でもどちらで行ってもOK # apt-get install mkcramfs # mkdir cramfsroot # cp 入れたいファイル cramfsroot # mkcramfs cramfsroot cramfs.img 書き込みはSH3で行う # cp cramfs.img /dev/mtd1 # mount /dev/mtd1 /flash |