Armadilloフォーラム

Armadillo-440 で ruby 2.1.2 を動かす方法

nagashima

2018年4月15日 19時35分

長島と申します。いつもお世話になっております。

Armadillo-440, Linux-3.14 の環境で、Rubyが使えるようにしようとしているのですが、
うまく行きません。

OSのカーネルコンフィギュレーションで

Miscellaneous Applications --->
  :
 [*] ruby
(2.1.2) Version

としてビルドし、フラッシュにイメージを書き込むところまでは良いのですが、
その後起動してきません。(ruby 2.0.0-p451 もダメ)

Ruby を OFF にしたイメージだと問題なく起動します。
他に何か設定を変えれば起動できるものでしょうか?

ご存じの方いらっしゃいましたらご教授ください。よろしくお願い申し上げます。

コメント

中村です。

> Armadillo-440, Linux-3.14 の環境で、Rubyが使えるようにしようとしているのですが、
> うまく行きません。
...
> その後起動してきません。(ruby 2.0.0-p451 もダメ)
>
> Ruby を OFF にしたイメージだと問題なく起動します。

起動時のコンソールにはどのようなメッセージがでてますか?

Armadillo-IoT(G2)にperlを入れたとき、
https://armadillo.atmark-techno.com/forum/armadillo/1661
https://users.atmark-techno.com/comment/2531#comment-2531
次のようなブートメッセージで起動できなくなりました。

...
RAMDISK: ext2 filesystem found at block 0
RAMDISK: Loading 58408KiB [1 disk] into ram disk... -
...
swapper invoked oom-killer: gfp_mask=0x10200d0, order=0, oom_score_adj=0
...
Kernel panic - not syncing: Out of memory and no killable processes...

原因は、メッセージの通り、メモリ不足です。

Armadillo-IoT(G2)は、Armadillo-440でLinux-3.14を使ったときに
近い環境にあると思います。

この記事
参考情報)Armadillo-IoT:ユーザーランドイメージ内のサイズの大きなプログラム(Java、Ruby)
https://users.atmark-techno.com/blog/615/1733
によると、rubyのサイズは約6.8MBらしいです。

もしこれと同じようなメモリ不足が原因ならば、
不要なものを削除するなどしてみてはどうでしょうか?
他には・・・コンフィグレーションでRAMDISKのサイズを
変更することで回避できるかもしれません。

--
なかむら

中村です。

寝る前に先ほどの自分の投稿を考えていて、
起動時に、フラッシュのユーザランド(romfs)をRAMDISKに
展開するときのメモリ不足の話をもう1つ思い出しました。

その話の前にちょっとした訂正です。
> https://armadillo.atmark-techno.com/forum/armadillo/1661
> https://users.atmark-techno.com/comment/2531#comment-2531

この2つめのURLは
https://armadillo.atmark-techno.com/forum/armadillo/1661#comment-2531
の方がよかったですね。同じスレッド(node)なので。

で、もう1つのメモリ不足の話というのは、
Armadillo-840なのですが、これです。
https://armadillo.atmark-techno.com/forum/armadillo/1202#comment-1475
https://armadillo.atmark-techno.com/news/140711/software-update

起動時にカーネルがユーザーランド(romfs)をRAMDISKに
コピーするときに、カーネルメモリに対してコピー(展開する)
ユーザランド(romfs)が大きすぎると、カーネルのメモリが
括弧することがあるということです。

FAQ : ルートファイルシステムの最大サイズはいくつですか?
https://armadillo.atmark-techno.com/faq/initrd-max-size
にも参考にできることが書いてあります。
「ブートローダがイメージを一度RAM上に書き込む領域と」
という記述もあります。

とすると、先ほど書いた
> もしこれと同じようなメモリ不足が原因ならば、
> 不要なものを削除するなどしてみてはどうでしょうか?

の方法で解決できればいいのですが、

> 他には・・・コンフィグレーションでRAMDISKのサイズを
> 変更することで回避できるかもしれません。

こちらの場合はRAMDISKのサイズを減らしてメインメモリを
増やしてあげないとならないのですが(たぶんそうだと思います)、
rubyを追加してユーザランド(romfs)が大きくなっているのですから、
RAMDISKのサイズを減らす余裕があるのかどうか・・・・、です。

--
なかむら

中村様

長島です。いろいろとご教授ありがとうございました。

bootメッセージですが、現在コンソールを ttyUSB0 にしている関係で、
途中から見ることができない状態です。
(後で setenv と etc/inittab の設定を変えて確認してみます)

ruby を組み込む前後の romfs.img のサイズを比較したところ、
約53MB:約70MBと肥大しておりました。これが一番の原因ですね。
まずは romfs.img のダイエットを目指します。

「initrd最大サイズ = (RAMサイズ - (カーネルイメージやパラメータ、MMUテーブルの予約領域)) / 2」
 ・initrd最大サイズ:約70MB
 ・RAMサイズ:128MB(Armadillo-440)
 ・カーネルイメージ:約6.5MB(linux.bin)

の計算式を参考に、RAMディスクサイズの調整も検討してみます。