Armadilloフォーラム

armadillo-840 ユーザーランドの領域の分割について

toju

2019年1月28日 18時00分

お世話になっております。

下記のサイトにてユーザーランドの分割を行いたいと思います。

 https://users.atmark-techno.com/blog/750/2142

サイトはArmadillo-810ですが、
Armadillo-840に置き換えて作業を進めています。

そこで、サイトの項目3.2の配列が見当たらず
実際には、

 static struct mtd_partition flash_partitions[]

というものは見つかりました。

編集する箇所はここでよいのでしょうか?

ご教授いただければ幸いです。

コメント

at_kojiro.yamada

2019年1月28日 18時27分

> お世話になっております。
>
> 下記のサイトにてユーザーランドの分割を行いたいと思います。
>
>  https://users.atmark-techno.com/blog/750/2142
>
> サイトはArmadillo-810ですが、
> Armadillo-840に置き換えて作業を進めています。
>
> そこで、サイトの項目3.2の配列が見当たらず
> 実際には、
>
>  static struct mtd_partition flash_partitions[]
>
> というものは見つかりました。
>
> 編集する箇所はここでよいのでしょうか?
>

はい。

ソースコードを見ればわかるかと思いますが、配列の変数名以外も変わっています。
編集の際は、上記ブログの内容の他に、
MTD_PART()マクロの引数に.mask_flags = MTD_POWERUP_LOCKを追加してください。

> > お世話になっております。
> >
> > 下記のサイトにてユーザーランドの分割を行いたいと思います。
> >
> >  https://users.atmark-techno.com/blog/750/2142
> >
> > サイトはArmadillo-810ですが、
> > Armadillo-840に置き換えて作業を進めています。
> >
> > そこで、サイトの項目3.2の配列が見当たらず
> > 実際には、
> >
> >  static struct mtd_partition flash_partitions[]
> >
> > というものは見つかりました。
> >
> > 編集する箇所はここでよいのでしょうか?
> >
>
> はい。
>
> ソースコードを見ればわかるかと思いますが、配列の変数名以外も変わっています。
> 編集の際は、上記ブログの内容の他に、
> MTD_PART()マクロの引数に.mask_flags = MTD_POWERUP_LOCKを追加してください。
>

お世話になっております。

上記の作業を行いました。

一つ質問がございます。

hermitの方で下記のように編集しました

static void armadillo840_setup_flash(struct platform_info *pinfo)
{
int val;

flash_initialize_cfi(FLASH_START);

val = flash_get_size(FLASH_START);
pinfo->map->flash.base = FLASH_START;
pinfo->map->flash.size = 1 << val;
hsprintf(pinfo->default_mtdparts,
"physmap-flash.0:"
"%p(all)ro,"
"0x40000@0(bootloader)ro,"
"0x40000(config),"
"0x40000(license)ro,"
"0x400000(firmware)ro,"
"0x400000(kernel),"
"0x6340000(userland)",
"-(application)",
pinfo->map->flash.size);
}

実際に書き込んでHeamitの「memmap」コマンドで確認してみたところ、
hermit> memmap
0x04000000:0x4480b1c3 FLA all bf:8K bl:
0x04000000:0x0403ffff FLA bootloader bf:8K bl:2x128K/l
0x04040000:0x0407ffff FLA config bf:8K bl:2x128K
0x04080000:0x040bffff FLA license bf:8K bl:2x128K/l
0x040c0000:0x044bffff FLA firmware bf:8K bl:32x128K/l
0x044c0000:0x048bffff FLA kernel bf:8K bl:32x128K
0x048c0000:0x0abfffff FLA userland bf:8K bl:794x128K
0x40000000:0x57ffffff RAM dram-1

とapplicationが表示されていません。
これはどこかの設定ミスなのでしょうか?

カーネルのの方は下記のように編集しました。
static struct mtd_partition flash_partitions[] = {
MTD_PART("bootloader", 0x00000000, SZ_256K,
.mask_flags = MTD_WRITEABLE | MTD_POWERUP_LOCK),
MTD_PART("config", MTDPART_OFS_APPEND, SZ_256K,
.mask_flags = MTD_POWERUP_LOCK),
MTD_PART("license", MTDPART_OFS_APPEND, SZ_256K,
.mask_flags = MTD_WRITEABLE | MTD_POWERUP_LOCK),
MTD_PART("firmware", MTDPART_OFS_APPEND, SZ_4M,
.mask_flags = MTD_WRITEABLE | MTD_POWERUP_LOCK),
MTD_PART("kernel", MTDPART_OFS_APPEND, SZ_4M,
.mask_flags = MTD_POWERUP_LOCK),
MTD_PART("userland", MTDPART_OFS_APPEND, 0x6340000,
.mask_flags = MTD_POWERUP_LOCK),
MTD_PART("application", MTDPART_OFS_APPEND, MTDPART_SIZ_FULL,
.mask_flags = MTD_POWERUP_LOCK),
};

[root@armadillo840-0 (ttySC2) ~]# cat /proc/mtd
dev: size erasesize name
mtd0: 00040000 00020000 "bootloader"
mtd1: 00040000 00020000 "config"
mtd2: 00040000 00020000 "license"
mtd3: 00400000 00020000 "firmware"
mtd4: 00400000 00020000 "kernel"
mtd5: 06340000 00020000 "userland"
mtd6: 01400000 00020000 "application"

のようになっています。

ご教授ください

at_kojiro.yamada

2019年2月6日 15時26分

> お世話になっております。
>
> 上記の作業を行いました。
>
> 一つ質問がございます。
>
> hermitの方で下記のように編集しました
>
> static void armadillo840_setup_flash(struct platform_info *pinfo)
> {
> int val;
>
> flash_initialize_cfi(FLASH_START);
>
> val = flash_get_size(FLASH_START);
> pinfo->map->flash.base = FLASH_START;
> pinfo->map->flash.size = 1 << val;
> hsprintf(pinfo->default_mtdparts,
> "physmap-flash.0:"
> "%p(all)ro,"
> "0x40000@0(bootloader)ro,"
> "0x40000(config),"
> "0x40000(license)ro,"
> "0x400000(firmware)ro,"
> "0x400000(kernel),"
> "0x6340000(userland)",
> "-(application)",
> pinfo->map->flash.size);

2つ間違いがありますね。

・「"0x6340000(userland)"」の後の「,」を消してください。

 "-(application)"が hspritnf() 関数の第3引数となるので、
 %p のところには"-(application)"へのポインタが表示されることになります。

・「(userland)」と「"」の間に 「,」を入れてください。

 "0x6340000(userland)-(application)" は mtdparts の構文に違反しているので、
 意図したメモリマップにはなりません。

修正後、以下の様になります。

         "0x400000(kernel),"
         "0x6340000(userland),"
         "-(application)",
          pinfo->map->flash.size);

> > お世話になっております。
> >
> > 上記の作業を行いました。
> >
> > 一つ質問がございます。
> >
> > hermitの方で下記のように編集しました
> >
> > static void armadillo840_setup_flash(struct platform_info *pinfo)
> > {
> > int val;
> >
> > flash_initialize_cfi(FLASH_START);
> >
> > val = flash_get_size(FLASH_START);
> > pinfo->map->flash.base = FLASH_START;
> > pinfo->map->flash.size = 1 << val;
> > hsprintf(pinfo->default_mtdparts,
> > "physmap-flash.0:"
> > "%p(all)ro,"
> > "0x40000@0(bootloader)ro,"
> > "0x40000(config),"
> > "0x40000(license)ro,"
> > "0x400000(firmware)ro,"
> > "0x400000(kernel),"
> > "0x6340000(userland)",
> > "-(application)",
> > pinfo->map->flash.size);
>
> 2つ間違いがありますね。
>
> ・「"0x6340000(userland)"」の後の「,」を消してください。
>
>  "-(application)"が hspritnf() 関数の第3引数となるので、
>  %p のところには"-(application)"へのポインタが表示されることになります。
>
> ・「(userland)」と「"」の間に 「,」を入れてください。
>
>  "0x6340000(userland)-(application)" は mtdparts の構文に違反しているので、
>  意図したメモリマップにはなりません。
>
> 修正後、以下の様になります。
>
>

>          "0x400000(kernel),"
>          "0x6340000(userland),"
>          "-(application)",
>           pinfo->map->flash.size);
> 

>
>

ありがとうございました。
出来ました。