警告メッセージ

Howtoは、Armadilloシリーズを有効に活用するための参考資料です。使用ソフトウェアのバージョンなど諸条件の差異によって、記載内容と実際の動作が異なる場合があります。また、すべての機能検証や長期の動作試験を行ったものではありませんので、必ずご使用目的に適合した検証・試験を行ってください。

Howto : LinuxからオンボードFlashを読み書きする(Armadillo)

対象製品: Armadillo(HT1070)

Linux Kernelバージョン 2.4.16-rmk2-armadillo-2 から、Linux上からのオンボードFlash読み書きをサポートしました。

バイナリ提供イメージは、以下の組み合わせで使用することができます。

カーネル: (→ダウンロード)

    Image_flash-1.1.2.gz
    - drivers/mtd/map/mtd-armadilloにflashサポートを追加した2.4.16-rmk2-armadillo-2を使用

ユーザランド: (→ダウンロード)

    initrd-1.1.2.img.gz (オンボードFlash起動の場合)
    rootimage-1.1.2.tgz (コンパクトフラッシュ起動の場合)
    - /dev/mtd2~5、及び/dev/mtdblock2~5の各ノードを追加

今まで使用していたカーネル/ユーザランドを上記に置き換えてください。
※オンボードFlash上のカーネル/ユーザランドの書き換え方などは、ソフトウェアマニュアルを参照してください。

LinuxからのオンボードFlash使用

オンボードFlashは、4つのパーティションに分割して扱われます。

アドレス パーティション内容 対応デバイスノード
0x000000
|
0x007fff
Bootloader
(hermitブートローダ/読み込み専用)
mtd2(キャラクタデバイス)
mtdblock2(ブロックデバイス)
0x008000
|
0x00ffff
Free
(任意使用領域/読み書き可能)
mtd3(キャラクタデバイス)
mtdblock3(ブロックデバイス)
0x010000
|
0x17ffff
KernelImage
(Linuxカーネル/読み込み専用)
mtd4(キャラクタデバイス)
mtdblock4(ブロックデバイス)
0x180000
|
0x3fffff
Initrd
(ユーザランド/読み込み専用)
mtd5(キャラクタデバイス)
mtdblock5(ブロックデバイス)
オンボードFlashのパーティション


それぞれのパーティションは、対応するデバイスノード(例えば2つめのFreeパーティションをブロックデバイスとして扱うなら/dev/mtdblock3)を使用して、ユーザ空間上から使用することができます。
※各パーティションの対応は、/proc/mtdから参照することができます。


[armadillo ~]# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 0000c000 00001000 "SRAM"
mtd1: 00000080 00000080 "BootROM"
mtd2: 00008000 00002000 "Flash/Bootloader"
mtd3: 00008000 00002000 "Flash/Free"
mtd4: 00170000 00010000 "Flash/KernelImage"
mtd5: 00280000 00010000 "Flash/Initrd"

Examaple: Freeパーティションをファイルシステムとして使用する

読み書き可能なFreeパーティションをMINIXファイルシステムでフォーマットし、使用してみます。

※Freeパーティションは32KBしかないため、Ext2などのファイルシステムでは最小サイズ未満となり使用できません。

まず、FreeパーティションをMINIXファイルシステムとしてフォーマットします。


[armadillo ~]# mkfs.minix /dev/mtdblock3
32 inodes
32 blocks
Firstdatazone=5 (5)
Zonesize=1024
Maxsize=268966912

次に、Freeパーティションを/mntにマウントします。


[armadillo ~]# mount -t minix /dev/mtdblock3 /mnt

これで、Freeパーティションをファイルシステムとして読み書きすることができます。
/mnt下に任意のファイルをコピーするなどしてください。

書き込みが完了したら、アンマウントします。


[armadillo ~]# umount /mnt

この後、リブートして再度マウントを行なってみてください。
書き込んだデータがFlash上に保存されていることが確認できます。

オンボードFlashサポートを有効にしたカーネルの作成について

カーネルソースlinux-2.4.16-rmk2-armadillo-2は、デフォルトではFlashをサポートしない設定となっています。
Flashサポートを有効とした設定を使用する場合、arch/arm/defconfigのシンボリックリンク先を変更してください。


[PC ~]$ cd linux-2.4.16-rmk2-armadillo-2
[PC ~]$ ln -sf `pwd`/arch/arm/def-configs/armadillo-flash `pwd`/arch/arm/defconfig

以降は、通常のmakeと同様に、make menuconfig → make r など行なってください。

なお、デフォルトで読み込み専用となっているBootloader/KernelImage/Initrdの各パーティションを読み書き可能とするためのオプションを、Configに用意しています。
これを有効とするためには、make menuconfig から下記の項目をチェックしてください。


Memory Technology Devices (MTD)  --->
  Mapping drivers for chip access  --->
  <*>   Armadillo mapping
  [*]     Support for on-board flash
  [*]       Enable write operation on all flash partitions