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[]
というものは見つかりました。
編集する箇所はここでよいのでしょうか?
ご教授いただければ幸いです。
コメント
toju
> > お世話になっております。
> >
> > 下記のサイトにてユーザーランドの分割を行いたいと思います。
> >
> > 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
> お世話になっております。
>
> 上記の作業を行いました。
>
> 一つ質問がございます。
>
> 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);
toju
> > お世話になっております。
> >
> > 上記の作業を行いました。
> >
> > 一つ質問がございます。
> >
> > 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); >
>
>
ありがとうございました。
出来ました。
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を追加してください。