Armadilloフォーラム

840のユーザーランド分割について

mitsuya-shin

2018年11月14日 15時45分

お世話になります。

https://armadillo.atmark-techno.com/forum/armadillo/2177」を参考にArmadillo-840のユーザーランド分割
をしておりますが、mountができません。

設定状況を添付しますどなたかご教授願います。

以上

ファイル ファイルの説明
データ.txt
コメント

溝渕です。

以下のコマンドを実行して、JFFS2がLinuxカーネルでサポートされているか確
認してみていただけますか。

[root@armadillo840-0 (ttySC2) ~]# zcat /proc/config.gz | grep JFFS2

ご回答ありがとうございます。

以下、内容です。

root@armadillo840-0 (ttySC2) ~]# zcat /proc/config.gz | grep JFFS2
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
# CONFIG_JFFS2_SUMMARY is not set
# CONFIG_JFFS2_FS_XATTR is not set
# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
CONFIG_JFFS2_ZLIB=y
# CONFIG_JFFS2_LZO is not set
CONFIG_JFFS2_RTIME=y
# CONFIG_JFFS2_RUBIN is not set

以上、よろしくお願いします。

> 溝渕です。
>
> 以下のコマンドを実行して、JFFS2がLinuxカーネルでサポートされているか確
> 認してみていただけますか。
>
>
> [root@armadillo840-0 (ttySC2) ~]# zcat /proc/config.gz | grep JFFS2
>
>

溝渕です。

"flash_eraseall"を実行する前に、次のようにフラッシュメモリのLockを解除
してみていただけますか。

[root@armadillo840-0 (ttySC2) ~]# flash_unlock /dev/mtd6

Linuxカーネルソース内の、
"arch/arm/mach-shmobile/board-armadillo840.c"
の"flash_partitions"で、"application"パーティションの"mask_flags"に
"MTD_POWERUP_LOCK"を追加している場合は、mtd-utilsの書き込みコマンドを
実行する前にLockを解除する必要があります。

下記手順でどうでしょうか。
# echo 0 > /sys/class/mtd/mtd6/ro
# flash_unlock /dev/mtd6
# flash_eraseall -j /dev/mtd6
# mount -t jffs2 /dev/mtdblock6 /root/flash
ファイル書き換え
# umount /dev/mtdblock6
# flash_lock /dev/mtd6 0x00 -1
# echo 1 > /sys/class/mtd/mtd6/ro

また、board-armadillo840.cのmask_flagsを下記とした記憶があります。
MTD_PART("application", MTDPART_OFS_APPEND, MTDPART_SIZ_FULL,
.mask_flags = MTD_WRITEABLE),

まずは、以下となりました。

[root@armadillo840-0 (ttySC2) ~]# echo 0 > /sys/class/mtd/mtd6/ro
[root@armadillo840-0 (ttySC2) ~]# flash_unlock /dev/mtd6
[root@armadillo840-0 (ttySC2) ~]# flash_eraseall -j /dev/mtd6
Erasing 128 Kibyte @ 540000 -- 100 % complete.Cleanmarker written at 520000.
[root@armadillo840-0 (ttySC2) ~]# cp /bin/ssh /mnt
cp: can't create '/mnt/ssh': No space left on device

また、board-armadillo840.cのmask_flagsは以下としています。

MTD_PART("application", MTDPART_OFS_APPEND, MTDPART_SIZ_FULL,
.mask_flags = MTD_WRITEABLE | MTD_POWERUP_LOCK),

以上です。

>
> 下記手順でどうでしょうか。
> # echo 0 > /sys/class/mtd/mtd6/ro
> # flash_unlock /dev/mtd6
> # flash_eraseall -j /dev/mtd6
> # mount -t jffs2 /dev/mtdblock6 /root/flash
> ファイル書き換え
> # umount /dev/mtdblock6
> # flash_lock /dev/mtd6 0x00 -1
> # echo 1 > /sys/class/mtd/mtd6/ro
>
> また、board-armadillo840.cのmask_flagsを下記とした記憶があります。
> MTD_PART("application", MTDPART_OFS_APPEND, MTDPART_SIZ_FULL,
> .mask_flags = MTD_WRITEABLE),
>

溝渕です。

> [root@armadillo840-0 (ttySC2) ~]# cp /bin/ssh /mnt
> cp: can't create '/mnt/ssh': No space left on device

"/mnt"には何をmountしていますか?

何もmountしていない状態だと、root ramfs上にcpされています。

失礼しました。以下になりました。

[root@armadillo840-0 (ttySC2) ~]# mount -t jffs2 /dev/mtdblock6 /mnt
[root@armadillo840-0 (ttySC2) ~]# cp /bin/ssh /mnt
jffs2: Write error in obliterating obsoleted node at 0x00500000: -30
jffs2: Write of 68 bytes at 0x0050000c failed. returned -30, retlen 0
jffs2: Not marking the space at 0x0050000c as dirty because the flash driver returned retlen zero
jffs2: Write of 68 bytes at 0x0050000c failed. returned -30, retlen 0
jffs2: Not marking the space at 0x0050000c as dirty because the flash driver returned retlen zero
cp: can't create '/mnt/ssh': Read-only file system

以上です。

> 溝渕です。
>
> > [root@armadillo840-0 (ttySC2) ~]# cp /bin/ssh /mnt
> > cp: can't create '/mnt/ssh': No space left on device
>
> "/mnt"には何をmountしていますか?
>
> 何もmountしていない状態だと、root ramfs上にcpされています。
>

溝渕です。

> [root@armadillo840-0 (ttySC2) ~]# mount -t jffs2 /dev/mtdblock6 /mnt
> [root@armadillo840-0 (ttySC2) ~]# cp /bin/ssh /mnt
> jffs2: Write error in obliterating obsoleted node at 0x00500000: -30
> jffs2: Write of 68 bytes at 0x0050000c failed. returned -30, retlen 0
> jffs2: Not marking the space at 0x0050000c as dirty because the flash driver returned retlen zero
> jffs2: Write of 68 bytes at 0x0050000c failed. returned -30, retlen 0
> jffs2: Not marking the space at 0x0050000c as dirty because the flash driver returned retlen zero
> cp: can't create '/mnt/ssh': Read-only file system

Read-onlyになっているため、書き込みができていないようです。cp実行前に
再度以下のコマンドを実行してみていただけますか。

[root@armadillo840-0 (ttySC2) ~]# flash_unlock /dev/mtd6

再起動後、コピーした実行ファイル(アプリケーション)が残っていることを確認できました。
大変ありがとうございました。

もう2点教えてください。
<質問1>
今回ユーザランドエリアを適当なサイズを確保しましたが、商品化の際には
実際のromfsが入るサイズを確保すればよいかと思います。
その際のromfsサイズ確認方法を教えてください。
<質問2>
hermitで直接applicationエリアにユーザアプリケーションをロードする事はできませんでしょうか?

よろしくお願いします。

> 溝渕です。
>
> > [root@armadillo840-0 (ttySC2) ~]# mount -t jffs2 /dev/mtdblock6 /mnt
> > [root@armadillo840-0 (ttySC2) ~]# cp /bin/ssh /mnt
> > jffs2: Write error in obliterating obsoleted node at 0x00500000: -30
> > jffs2: Write of 68 bytes at 0x0050000c failed. returned -30, retlen 0
> > jffs2: Not marking the space at 0x0050000c as dirty because the flash driver returned retlen zero
> > jffs2: Write of 68 bytes at 0x0050000c failed. returned -30, retlen 0
> > jffs2: Not marking the space at 0x0050000c as dirty because the flash driver returned retlen zero
> > cp: can't create '/mnt/ssh': Read-only file system
>
> Read-onlyになっているため、書き込みができていないようです。cp実行前に
> 再度以下のコマンドを実行してみていただけますか。
>
>
> [root@armadillo840-0 (ttySC2) ~]# flash_unlock /dev/mtd6
>
>

溝渕です。

> <質問1>
> 今回ユーザランドエリアを適当なサイズを確保しましたが、商品化の際には
> 実際のromfsが入るサイズを確保すればよいかと思います。
> その際のromfsサイズ確認方法を教えてください。

ユーザーランドイメージサイズになります。

[Armadillo-840 製品ソフトウェア]
https://users.atmark-techno.com/armadillo-840/software

から取得できる今日(2018/11/15)現在の最新イメージ
(romfs-a840-v1.14.img.gz)だと、約42MBytes(44213944Bytes)です。

> <質問2>
> hermitで直接applicationエリアにユーザアプリケーションをロードする事はできませんでしょうか?

ダウンローダー(hermit)を利用して書き込みたいという理解で良いでしょうか?

[Armadillo-840 製品マニュアル]
https://manual.atmark-techno.com/armadillo-840/armadillo-840_product_ma…

上記コマンドを利用して書き込みが可能と思います。書き込むイメージは、
Armadillo-840のフラッシュメモリの該当リージョンからdd等で読み出したファ
イルになります。