Howto

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

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 ~]# <span class="input">cat /proc/mtd</span>
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 ~]# <span class="input">mkfs.minix /dev/mtdblock3</span>
32 inodes
32 blocks
Firstdatazone=5 (5)
Zonesize=1024
Maxsize=268966912

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

[armadillo ~]# <span class="input">mount -t minix /dev/mtdblock3 /mnt</span>

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

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

[armadillo ~]# <span class="input">umount /mnt</span>

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

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

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

[PC ~]$ cd linux-2.4.16-rmk2-armadillo-2
[PC ~]$ <span class="input">ln -sf `pwd`/arch/arm/def-configs/armadillo-flash `pwd`/arch/arm/defconfig</span>

以降は、通常の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
  [<span class="input">*</span>]       Enable write operation on all flash partitions