警告メッセージ

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

Howto : フラッシュメモリのパーティションを変更する

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

カーネルが設定するフラッシュメモリーのパーティションは、カーネルコマンドラインでmtdpartsオプションを指定するか、mtdドライバのデフォルトパーティションを修正することにより変更することが可能です。mtdpartsオプションは、ブートローダ(hermit-at)の環境変数を設定するかソースコードを修正することにより変更できます。

1. mtdpartsオプションを指定してフラッシュメモリーパーティションを変更する

1.1. カーネルコマンドラインでmtdpartsオプションを指定する

Armadillo-300、Armadillo-500、Armadillo-500 FX用のhermit-atでは、カーネルコマンドラインにmtdpartsオプションを渡すことにより、パーティションを指定することができます。この方法では、ソースコードの変更を伴わずにパーティションの変更をおこなうことができます。

mtdパーティションを指定するには、Armadilloを保守モードで起動しhermit-atコンソールのsetenvコマンドを使用します。


hermit> setenv console=ttyAM0 mtdparts=armadillo3x0-nor:0x2000(ipl)ro,0xe000(bootloader)ro,0x200000(kernel),0x5d0000(userland),0x10000(userland2),-(config)

図1. userland領域を二つに分ける場合(Armadillo-300の例)

mtdpartsオプションについては、使用するカーネルソースの「linux-2.6.x/Documentation/kernel-mtdparts.txt」を参照してください。

1.2. hermit-atのソースコードを修正してmtdpartsオプションを指定する

linux-2.6.12.3-a9を使用している製品(Armadillo-9/210/220/230/240)は、hermit-atのソースコードを修正することによりmtdpartsオプションを変更することができます。

製品毎の修正対象のソースコードは以下の通りです。

製品名 ファイル名
Armadillo-9 hermit-at/src/target/armadillo9/memregions.h
Armadillo-210/220/230/240 hermit-at/src/target/armadillo2x0/memregions.h

以下に、Armadillo-9の場合の修正内容を記載します。(hermit-atのソースコードバージョンはv1.1.4です。)

Flash Memory Partitions

図2. 変更前後のArmadillo-9 フラッシュメモリーパーティション


diff --git a/src/target/armadillo9/memregions.h b/src/target/armadillo9/memregions.h
index c7c3f0d..cf090fd 100644
--- a/src/target/armadillo9/memregions.h
+++ b/src/target/armadillo9/memregions.h
@@ -11,9 +11,9 @@ #define FLASH_SIZE    0x00800000
 #define FLASH_BOOTLOADER_START  FLASH_START
 #define FLASH_BOOTLOADER_SIZE   0x10000
 #define FLASH_KERNEL_START      (FLASH_BOOTLOADER_START + FLASH_BOOTLOADER_SIZE)
-#define FLASH_KERNEL_SIZE       0x170000
+#define FLASH_KERNEL_SIZE       0x200000
 #define FLASH_USERLAND_START    (FLASH_KERNEL_START + FLASH_KERNEL_SIZE)
-#define FLASH_USERLAND_SIZE     0x670000
+#define FLASH_USERLAND_SIZE     0x5e0000
 #define FLASH_CONFIG_START      (FLASH_USERLAND_START + FLASH_USERLAND_SIZE)
 #define FLASH_CONFIG_SIZE       (FLASH_START + FLASH_SIZE - FLASH_CONFIG_START)
 
@@ -26,11 +26,11 @@ #define FLASH_USERLAND_NAME     "userlan
 #define FLASH_CONFIG_NAME       "config"
 
 #define FLASH_BOOTLOADER_BLOCK  "8x8K/l"
-#define FLASH_KERNEL_BLOCK      "23x64K"
-#define FLASH_USERLAND_BLOCK    "103x64K"

+#define FLASH_KERNEL_BLOCK      "32x64K"
+#define FLASH_USERLAND_BLOCK    "94x64K"
 #define FLASH_CONFIG_BLOCK      "8x8K"
 
-#define MTDPARTS "mtdparts=armadillo9-nor:0x10000(bootloader)ro,0x170000(kernel),0x670000(userland),-(config)"
+#define MTDPARTS "mtdparts=armadillo9-nor:0x10000(bootloader)ro,0x200000(kernel),0x5e0000(userland),-(config)"
 
 #define SRAM_START     0x80014000
 #define SRAM_SIZE      0x00001100
@@ -45,7 +45,7 @@ #define DRAM2_SIZE        0x02000000
 
 #define SECTOR_IDX_BOOTLOADER  0
 #define SECTOR_IDX_KERNEL  8
-#define SECTOR_IDX_USERLAND  31

+#define SECTOR_IDX_USERLAND  40
 #define SECTOR_IDX_CONFIG  134 
 
 #define LINUX_PARAM_SIZE   (0x00000f00)
@@ -56,7 +56,7 @@ #define LINUX_SRC_ADDRESS (FLASH_START +
 #define LINUX_LOAD_ADDRESS (DRAM1_START + 0x00018000)
 
 #define INITRD_SRC_SIZE        (FLASH_USERLAND_SIZE)
-#define INITRD_SRC_ADDRESS   (FLASH_START + 0x00180000)
+#define INITRD_SRC_ADDRESS   (FLASH_START + 0x00210000)
 #define INITRD_LOAD_ADDRESS    (DRAM1_START + 0x00800000)
 
 #define GUNZIP_MEM_SIZE 0x20000

図3. hermit-at/src/target/armadillo9/memregions.hの修正内容

2. mtdドライバのソースコードを修正してデフォルトフラッシュメモリーパーティションを変更する

linux-2.6.12.5-atを使用している製品(Armadillo-300)、linux-2.6.18-atを使用している製品(Armadillo-500 開発ボード)、linux-2.6.26-atを使用している製品(Armadillo-500 FX)では、Linuxカーネルのmtdドライバを修正することによりデフォルトのフラッシュメモリーパーティションを変更することができます。

製品名 ファイル名
Armadillo-300 linux-2.6.12.5-at/drivers/mtd/maps/armadillo3x0.c
Armadillo-500 開発ボード linux-2.6.18-at/arch/arm/mach-mx3/armadillo5x0.c
Armadillo-500 FX linux-2.6.26-at/arch/arm/mach-mx3/armadillo500fx.c

以下に、Armadillo-500 開発ボード(a5527)の場合の修正内容を記載します。(linux-2.6.18-atのソースコードバージョンは、linux-2.6.18-at10です。)

図4. 変更前後のArmadillo-500 開発ボード フラッシュメモリーパーティション


diff --git a/arch/arm/mach-mx3/armadillo5x0.c b/arch/arm/mach-mx3/armadillo5x0.c
index c824515..333c4bf 100644
--- a/arch/arm/mach-mx3/armadillo5x0.c
+++ b/arch/arm/mach-mx3/armadillo5x0.c
@@ -114,7 +114,8 @@ static struct mtd_partition mtd_nor_partitions_32MB[] = {
    MTD_PART("nor.bootloader",   4* 32*1024, 0,
         MTD_WRITEABLE /* force read-only */ ),
    MTD_PART("nor.kernel",      16*128*1024, MTDPART_OFS_APPEND, 0),
- MTD_PART("nor.userland",   238*128*1024, MTDPART_OFS_APPEND, 0),
+ MTD_PART("nor.userland",   233*128*1024, MTDPART_OFS_APPEND, 0),
+ MTD_PART("nor.userland2",    5*128*1024, MTDPART_OFS_APPEND, 0),
    MTD_PART("nor.config",       1*128*1024, MTDPART_OFS_APPEND, 0),
 };
 static struct mtd_partition mtd_nor_partitions_64MB[] = {

図5. linux-2.6.18-at/arch/arm/mach-mx3/armadillo5x0.cの修正内容

3. 注意点

  1. イメージの再書き込み

    カーネルもしくはユーザランドのパーティションを変更した場合は、再度カーネルとユーザーランドイメージの両方をフラッシュメモリーへ書き込む必要があります。

  2. パーティションのアライメント

    パーティションの開始アドレス及びサイズは、フラッシュメモリーのイレースブロックと同じ境界にする必要があります。

  3. デバイスノード

    パーティションを変更した場合、ブートローダ領域(/dev/flash/bootloader)、カーネル領域(/dev/flash/kernel)、ユーザーランド領域(/dev/flash/userland)、コンフィグ領域(/dev/flash/config)領域のデバイスファイルのメジャー番号とマイナー番号が適切な領域を指し示すように、「atmark-dist/vendor/Atmark-Techno/(Product)/ext2_devtable.txt」を編集する必要があります。

  4. jffs2を使用する場合

    新しく作成したフラッシュメモリー領域をjffs2で使用する場合、5ブロック以上の領域が必要となります。

  5. コンフィグ領域を変更する場合

    flatfsdは、コンフィグ領域(/dev/flash/config)が2ブロック以上ある場合、2重化してファイルを保存します。そのため、コンフィグ領域に割り当てるブロック数により、動作の違いが生じるので注意が必要です。 また、コンフィグ領域を拡張した場合、コンフィグ領域のリストアの際にルートファイルシステムのramdiskが不足する恐れがあります。その場合は、事前に/etc/configディレクトリをramfsでマウントするなどしてください。コンフィグ領域のリストアは起動スクリプト(rcスクリプト)の中で「flatfsd -r」コマンドによりおこなわれます。詳細な処理内容は、各Productの起動スクリプトを参照してください。

4. 関連リンク