Armadilloフォーラム

IoTによる50MBを超えるユーザーランドイメージの使用について

morly

2015年4月17日 17時04分

いつもお世話になっております。
現在、Armadillo-IoT上でTomcatを動作させるために、環境構築を行っております。

[作業内容]
このため、ユーザーランドイメージ(roms.img)の作成においてデフォルトから以下の変更を行っております。
・Javaのconfig変更(make menuconfigより)
- profile -> full
- vm -> all
・Tomcatの追加
・rubyなど不要なモノの削除(make menuconfigより)

このため、make後に作成されるimagesフォルダに作成されるユーザーランドイメージは52MBくらいになり、
netflashでフラッシュメモリ領域に書き込むことができなくなりました。

よって、以下を参考にしながらSDカードからのプートを試みましたが、
「8.2.4. ルートファイルシステムの構築」内の
「図8.7 Atmark-Dist イメージによるルートファイルシステムの構築例」の
「wget http://xxx.xxx.xxx.xxx/romfs.img.gz -P tmp」にてエラーが発生してしまします。
※wgetではなく、USBメモリからのコピーも試みましたが結果は同じでした。

http://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_soft…

[エラー概要]
Out of memory: kill process 1136 (ash) score 75 or a child
Killed process 1199 (mv)
など、大量のログがは書き出されました。

本資料の内容はIoT用の資料ではないため、正常に進めることはできないのでしょうか。
また、SDブートではない手段を取るべきであれば、ご指摘をお願いします。

#ちなみに、
#カーネルイメージ、デフォルトイメージはデフォルトのままで、
#USBメモリにjreおよびtomcatを入れ、
#起動時にUSBメモリをマウントおよびパスを通すことでTomcatの動作は確認できておりますが、
#保守性を考え、可能であれば、jreとTomcatもユーザーユーザーイメージの中に含めたく考えております。

コメント

at_takashi.sasayama

2015年4月20日 13時26分

笹山です。

> このため、make後に作成されるimagesフォルダに作成されるユーザーランドイメージは52MBくらいになり、
> netflashでフラッシュメモリ領域に書き込むことができなくなりました。

既に確認されているかもしれませんが、
ユーザーランドイメージ romfs.img を圧縮したものである romfs.img.gz のサイズはどれくらいでしょうか?

Armadillo-IoT のデフォルトではフラッシュメモリに 29.75MB まで書き込むことができますので、
romfs.img.gz がこのサイズ内に納まっていれば書き込むことができます。

> 「wget http://xxx.xxx.xxx.xxx/romfs.img.gz -P tmp」にてエラーが発生してしまします。
> : 一部省略
> [エラー概要]
> Out of memory: kill process 1136 (ash) score 75 or a child
> Killed process 1199 (mv)

メモリが足りなくなってしまったことにより OOM Killer が実行されています。

SDに書き込むユーザーランドイメージのサイズが大きい場合、
使用できるメモリ量の関係で Armadillo 上では作業が行えないことがあります。

マニュアルで解説しています Armadillo 上でのルートファイルシステムの構築は、
microSD カードリーダーが使用できれば ATDE 上でも行えます。

ATDE 上で行う場合は マニュアル内の以下を、適宜読み替えて作業を行ってください。

■ microSD/SD デバイスファイル名

Armadillo 上で作業する場合は /dev/mmcblk0p1 ですが、
ATDE 上で行う場合はデバイスファイル名が異なりますので置き換えます。

当方の環境では、ATDE に USB SDカードリーダーで 2GB の microSD を接続すると、
/dev/sdg1 として認識されました。

[ATDE5]$ dmesg | grep sd
sd 5:0:0:4: [sdg] 3909632 512-byte logical blocks: (2.00 GB/1.86 GiB)
 : 一部省略
sdg: sdg1

■ sudo でコマンドを実行する

Armadillo 上では root 権限で作業を行っている為、ATDE 上で行う場合は、
各コマンドを sudo で実行するか、root 権限で作業を行ってください。

参考情報

図8.7 Atmark-Dist イメージによるルートファイルシステムの構築例
http://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_soft…

morly

2015年4月21日 9時03分

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

まずは、ご質問いただいた内容について回答させていただきます。

>ユーザーランドイメージ romfs.img を圧縮したものである romfs.img.gz のサイズはどれくらいでしょうか?
申し訳ありません。私の書き方が間違っていました。正確には以下のとおりで、圧縮したものが50MBを超えています。
romfs.img 92.6MB
romfs.img.gz 52.8MB

このため、ご教授いただいたATDE上でのSDカードへの書き込みを実施しました。
しかし、いくつかの問題があり、目的を達成できておりません。
大きく分けて3パターンの対応をしましたので、以下に書かせていただきます。

パターン①(LinuxカーネルをArmadilloで書き込んだのか、ATDEで書き込んだのか覚えていません・・・)
この返信をいただき、ATDEにてSDカードにユーザーランドを展開したところ、
エラーが発生し、以下などを参考にしながら対応を試みましたが、解決に至りませんでした。
http://lists.atmark-techno.com/pipermail/armadillo/2007-June/001648.html

hermit> boot
: 一部略
Kernel panic - not syncing : No init found. Try passing init= option to kernel.

結果、イメージが壊れていることなどを疑い、

パターン②(ATDEのみでの書き込み)
ATDEにて再度SDカードのフォーマットから、ユーザーユーザーの書き込みまでを行いましたが、
今度は以下のエラーが表示されブートすらしなくなってしまいました。

hermit> boot
mmcsd: card not found or not available data.
failed image loading from 'mmcblk0p1' device.
-NG invalid argument

このため、
パターン③(LinuxイメージはArmadilloで書き込み、ユーザーユーザーランドはATDEで書き込む)

しかし、パターン②と症状は変わりません。

この問題に対応するための着眼点が間違っているようですが、
次に何を確認するべきであるか、ご教授願えませんでしょうか。

よろしくお願いします。

at_takashi.sasayama

2015年4月21日 10時51分

笹山です。

> hermit> boot
> : 一部略
> Kernel panic - not syncing : No init found. Try passing init= option to kernel.

このエラーが表示される時は、microSDカードに
ルートファイルシステムが正常に構築されていない可能性が高いです。

例としてはファイルシステムの作成だけを行ったmicroSDカード (ファイルが何もない) を接続すると、
同じエラーが発生します。

microSDカードに以下の様な構成でファイルが書き込まれているかを確認してみてください。

[ATDE5] $  ls -al /mnt
合計 100
drwxr-xr-x 19 root root  4096  1月  1  2000 .
drwxr-xr-x 25 root root  4096  3月 17 16:41 ..
drwxr-xr-x  2 root root  4096  4月 13 17:18 bin
-rw-r--r--  1 root root  6733  4月 13 17:13 bom
drwxr-xr-x  2 root root  4096  4月 13 17:17 boot
drwxr-xr-x  4 root root  4096  3月 25 09:34 dev
drwxr-xr-x 17 root root  4096  1月  1  1970 etc
drwxr-xr-x  5 root root  4096  4月 13 17:17 home
drwxr-xr-x  9 root root  4096  4月 13 17:18 lib
lrwxrwxrwx  1 root root    11  4月 13 17:18 linuxrc -> bin/busybox
drwx------  2 root root 16384  4月 13 17:18 lost+found
drwxr-xr-x  2 root root  4096  4月 13 17:17 media
drwxr-xr-x  2 root root  4096  4月 13 17:17 mnt
drwxr-xr-x  4 root root  4096  4月 13 17:17 opt
drwxr-xr-x  2 root root  4096  4月 13 17:17 proc
-rwxr-xr-x  1 root root   570  4月 13 17:13 release
drwxr-xr-x  2 root root  4096  1月  1  1970 root
drwxr-xr-x  2 root root  4096  4月 13 17:18 sbin
drwxr-xr-x  2 root root  4096  4月 13 17:17 sys
drwxr-xr-x  2 root root  4096  1月  1  2000 tmp
drwxr-xr-x  6 root root  4096  4月 13 17:17 usr

> パターン②(ATDEのみでの書き込み)
> ATDEにて再度SDカードのフォーマットから、ユーザーユーザーの書き込みまでを行いましたが、
> 今度は以下のエラーが表示されブートすらしなくなってしまいました。

> hermit> boot
> mmcsd: card not found or not available data.
> failed image loading from 'mmcblk0p1' device.
> -NG invalid argument

このエラーが表示されるときは、Armadillo に microSDカードが接続されていない。
もしくは microSDカード が接触不良となっている可能性が考えられます。
microSDカードの接続状態を確認してみてください。

morly

2015年4月21日 11時41分

笹山さま、ご回答頂きありがとうございます。

構成ファイルを列挙いただき、ありがとうございます。
下記の問題が解決し、同様のKernel panicの問題が発生した際に、照らしあわせて確認させていただきます。

>このエラーが表示されるときは、Armadillo に microSDカードが接続されていない。
>もしくは microSDカード が接触不良となっている可能性が考えられます。
>microSDカードの接続状態を確認してみてください。

これについては疑いましたが、

hermit> setbootdevice flash
hermit> clearenv
hermit> boot

に設定した上で、ブート後にSDカードをマウントした際は問題なくマウントでき、
ファイルを見ることもできます。
ちなみに、列挙いただいた構成とは多少異なりますが、以下のとおりです。

[root@armadillo-iotg (ttymxc1) ~]# ls -l /mnt/
total 300
-r--r--r--    1 root     root          3244 Mar 13 12:11 COPYRIGHT
-r--r--r--    1 root     root            46 Mar 13 12:11 README
-r--r--r--    1 root     root        178400 Mar 13 12:11 THIRDPARTYLICENSEREADME.txt
drwxr-xr-x    2 root     root          4096 Apr 17 14:33 bin/
-rw-r--r--    1 root     root         26562 Mar 13 12:14 bom
drwxr-xr-x    2 root     root          4096 Apr 17 14:33 boot/
drwxr-xr-x    4 root     root          4096 Dec 15 18:56 dev/
drwxr-xr-x   18 root     root          4096 Apr 21 08:33 etc/
drwxr-xr-x    5 root     root          4096 Apr 17 14:33 home/
drwxr-xr-x   15 root     root          4096 Apr 17 14:33 lib/
drwx------    2 root     root         16384 Apr 17 14:33 lost+found/
drwxr-xr-x    2 root     root          4096 Apr 17 14:33 media/
drwxr-xr-x    2 root     root          4096 Apr 17 14:33 mnt/
drwxr-xr-x    4 root     root          4096 Apr 17 14:33 opt/
drwxr-xr-x    2 root     root          4096 Apr 17 14:33 proc/
-rw-r--r--    1 root     root           546 Mar 13 12:11 release
drwxr-xr-x    2 root     root          4096 Apr 17 14:33 root/
drwxr-xr-x    2 root     root          4096 Apr 17 14:33 sbin/
drwxr-xr-x    2 root     root          4096 Apr 17 14:33 sys/
drwxr-xr-x    2 root     root          4096 Apr 17 14:33 tmp/
drwxr-xr-x    6 root     root          4096 Apr 17 14:33 usr/
drwxr-xr-x    9 root     root          4096 Apr 17 14:33 var/

以上より、接続不良の可能性は少ないと考えています。
これ以外に考えられる可能性はありますでしょうか。

at_takashi.sasayama

2015年4月21日 14時03分

笹山です。

> 以上より、接続不良の可能性は少ないと考えています。
> これ以外に考えられる可能性はありますでしょうか。

SDカードの接続状況について教えていただけないでしょうか。

Armadillo-IoT には SDインターフェースが2つ存在します。
ルートファイルシステムを書き込んだSDカードはどちらに接続していますか?

1. Armadillo-410 CON1 SDインターフェース (microSDスロット)
http://manual.atmark-techno.com/armadillo-410/armadillo-410_hardware_ma…

2. ベースボード CON4 SDインターフェース (SDスロット)
http://manual.atmark-techno.com/armadillo-iot/armadillo-iotg-std_produc…

仮に ベースボード CON4 SDインターフェース に接続している場合は、
hermit で以下の設定を行うと正常起動しないか確認していただけないでしょうか。

SDカードに配置したカーネルイメージで起動している場合
(フラッシュメモリに配置している場合は不要です)

hermit> setbootdevice mmcblk1p1
※ hermit では Armadillo-410 CON1 が mmcblk0 , ベースボード CON4 が mmcblk1 に対応しています。

Armadillo-410 CON1 にも データ用などの microSDカードを接続している場合は以下を

hermit> setenv console=ttymxc1,115200 root=/dev/mmcblk1p1 noinitrd rootwait
※ root= を /dev/mmcblk0p1 から /dev/mmcblk1p1 に変更しています。

Armadillo-410 CON1 には microSDカードを接続していない場合は以下を実行してください。

hermit> setenv console=ttymxc1,115200 root=/dev/mmcblk0p1 noinitrd rootwait
※ マニュアルに記載されているものと同じです。

morly

2015年4月21日 16時52分

ご返信ありがとうございます。

問題は全て解決しました。

>ルートファイルシステムを書き込んだSDカードはどちらに接続していますか?
ルートファイルシステムはCON4(SDカード)書き込んでいました。
このため、以下を設定する事により解決しました。

hermit> setbootdevice mmcblk1p1

▼Kernel panicについて
上記により、ブートできるようになりましたが、
先の書き込みにより質問させていただきましたKernel panicが発生しました。
以前に作成したユーザーランドイメージはサイズを小さくするためにいろいろと消していたため、
正常に作成されていなかったようです。
※sbin内にinitもありませんでした。原因までは追求できませんでした・・・

このため、再度ユーザーランドイメージをDVD付属のatmark-dist-20141215.tar.gzから、
最小限の設定を行って作成したところ問題なくSDカード(CON4)からブートすることが出来ました。

お忙しいところ、迅速にご回答頂き大変助かりました。
重ねてありがとうございました。