Armadilloフォーラム

tftpdl でエラー(tftp: Out of memory -NG overflow)

nagashima

2018年3月6日 10時53分

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

tftpdl でカーネルとユーザランドの書き換えを行おうとしたところ、
ユーザランドのところで「tftp: Out of memory -NG overflow」が出るようになり、
書き換えができなくなり困っております。

tftpboot も試しましたが同じエラーが出ます。
1tftpdlに関する投稿で「--blksize 1024」のオプションを付けていたので、
Out of memory には関係ないだろうなと思いつつ試してみましたが、
やはり同じエラーが発生いたします。

こちら原因はユーザランドの肥大化でしょうか?
(現在、ダイエット中)

原因と対策をご教授頂ければ幸いです。
皆様、よろしくお願いいたします。

コメント

お世話になっております。長島です。
自己レスになります。

現在のターゲットでは日本語を表示するので TakaoGothic を入れているのですが、
これが大きいと思い、外してビルドしてみました。

-rw-r--r-- 1 atmark atmark 32111261 3月 6 10:54 dame.img.gz <== 日本語フォント(TakaoGothic)入り
-rw-r--r-- 1 atmark atmark 27808882 3月 6 11:08 romfs.img.gz <== 日本語フォントなし

tftpdl, tftpboot とも、上記 dame.img.gz(日本語フォント入り)だとエラー、
romfs.img.gz(日本語フォントなし)ならエラーが出ないので、
「Out of memory」の文字通り、romfs.img.gz のファイルサイズが原因ですね。

さて、どうしたものか... ^^;

フラッシュメモリのマップを標準から変更しているでしょうか?

> -rw-r--r-- 1 atmark atmark 32111261 3月 6 10:54 dame.img.gz <== 日本語フォント(TakaoGothic)入り
> -rw-r--r-- 1 atmark atmark 27808882 3月 6 11:08 romfs.img.gz <== 日本語フォントなし

フラッシュメモリのuserland領域は3.x系のA440だと標準で 26.875MBなので
前者のイメージは書き込めないはずです。

hermitはOut of memoryとは出していますが、受信バッファのサイズは
フラッシュメモリの書込みする領域分(--userland=ならユーザーランド領域)
だけバッファを取って、そこから溢れた時にOut of memoryを表示してエラー
させているので、ワーキングメモリ不足というより書き込み先のフラッシュ
メモリの領域に対してデータが大きすぎる状態だと思います。

> tftpdl, tftpboot とも、上記 dame.img.gz(日本語フォント入り)だとエラー、
> romfs.img.gz(日本語フォントなし)ならエラーが出ないので、
> 「Out of memory」の文字通り、romfs.img.gz のファイルサイズが原因ですね。
>
> さて、どうしたものか... ^^;

長島です。
ohsawa 様、コメントありがとうございます。

> フラッシュメモリのマップを標準から変更しているでしょうか?

変更は
・独自アプリとそのための画像の追加
・カーネルコンフィグ(GPIO、デバイスドライバなど)
ぐらいです。

romfs.img.gz の中身を見ると
 6.9M libavcodec.so.53.35.0
が目立っております。
今回のターゲットでは動画や音声を使わないので、これを消して、
イメージファイルのサイズを4MBぐらい小さくしたいところです。

カーネルコンフィグを見てますが、今のところ選択項目が見つけられておりません。
ご存じの方いらしゃいましたらご教授ください。よろしくお願いいたします。

>  6.9M libavcodec.so.53.35.0
標準ではArmadillo-440のユーザーランドにlibavcodec.soは入らないので、
お客様が追加したアプリケーション、またはライブラリがlibavcodecに
依存しているため、探索されて取り込まれています。

ohsawa様

長島です。ご回答ありがとうございました。

調べたところ、ohsawa様のご指摘通り、
~/atmark-dist-20171227/vendors/AtmarkTechno/xxxx の下の usr/lib/ に、
アプリで使用する共有ライブラリのファイルを置いたせいで、
ライブラリが勝手に組み込まれておりました。
このファイルを削除したことでイメージサイズが大幅に小さくなりました。

お騒がせいたしました。今後ともよろしくお願い申し上げます。