カーネルが設定するフラッシュメモリーのパーティションは、カーネルコマンドラインで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です。)
図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) <span class="rem">-#define FLASH_KERNEL_SIZE 0x170000</span> <span class="add">+#define FLASH_KERNEL_SIZE 0x200000</span> #define FLASH_USERLAND_START (FLASH_KERNEL_START + FLASH_KERNEL_SIZE) <span class="rem">-#define FLASH_USERLAND_SIZE 0x670000</span> <span class="add">+#define FLASH_USERLAND_SIZE 0x5e0000</span> #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" <span class="rem">-#define FLASH_KERNEL_BLOCK "23x64K"</span> <span class="rem">-#define FLASH_USERLAND_BLOCK "103x64K"</span> <span class="add">+#define FLASH_KERNEL_BLOCK "32x64K"</span> <span class="add">+#define FLASH_USERLAND_BLOCK "94x64K"</span> #define FLASH_CONFIG_BLOCK "8x8K" <span class="rem">-#define MTDPARTS "mtdparts=armadillo9-nor:0x10000(bootloader)ro,0x170000(kernel),0x670000(userland),-(config)"</span> <span class="add">+#define MTDPARTS "mtdparts=armadillo9-nor:0x10000(bootloader)ro,0x200000(kernel),0x5e0000(userland),-(config)"</span> #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 <span class="rem">-#define SECTOR_IDX_USERLAND 31</span> <span class="add">+#define SECTOR_IDX_USERLAND 40</span> #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) <span class="rem">-#define INITRD_SRC_ADDRESS (FLASH_START + 0x00180000)</span> <span class="add">+#define INITRD_SRC_ADDRESS (FLASH_START + 0x00210000)</span> #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), <span class="rem">- MTD_PART("nor.userland", 238*128*1024, MTDPART_OFS_APPEND, 0),</span> <span class="add">+ MTD_PART("nor.userland", 233*128*1024, MTDPART_OFS_APPEND, 0),</span> <span class="add">+ MTD_PART("nor.userland2", 5*128*1024, MTDPART_OFS_APPEND, 0),</span> 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. 注意点
イメージの再書き込み
カーネルもしくはユーザランドのパーティションを変更した場合は、再度カーネルとユーザーランドイメージの両方をフラッシュメモリーへ書き込む必要があります。
パーティションのアライメント
パーティションの開始アドレス及びサイズは、フラッシュメモリーのイレースブロックと同じ境界にする必要があります。
デバイスノード
パーティションを変更した場合、ブートローダ領域(/dev/flash/bootloader)、カーネル領域(/dev/flash/kernel)、ユーザーランド領域(/dev/flash/userland)、コンフィグ領域(/dev/flash/config)領域のデバイスファイルのメジャー番号とマイナー番号が適切な領域を指し示すように、「atmark-dist/vendor/Atmark-Techno/(Product)/ext2_devtable.txt」を編集する必要があります。
jffs2を使用する場合
新しく作成したフラッシュメモリー領域をjffs2で使用する場合、5ブロック以上の領域が必要となります。
コンフィグ領域を変更する場合
flatfsdは、コンフィグ領域(/dev/flash/config)が2ブロック以上ある場合、2重化してファイルを保存します。そのため、コンフィグ領域に割り当てるブロック数により、動作の違いが生じるので注意が必要です。 また、コンフィグ領域を拡張した場合、コンフィグ領域のリストアの際にルートファイルシステムのramdiskが不足する恐れがあります。その場合は、事前に/etc/configディレクトリをramfsでマウントするなどしてください。コンフィグ領域のリストアは起動スクリプト(rcスクリプト)の中で「flatfsd -r」コマンドによりおこなわれます。詳細な処理内容は、各Productの起動スクリプトを参照してください。