fukasawa
2019年6月26日 22時59分
お世話になっております。
Armadillo-440の起動を短縮したいと考えています。
自作の組み込んだアプリケーションが起動するまでに1分強かかっています。
電源投入時のアプリケーションの起動高速化
https://users.atmark-techno.com/blog/53/3888
こちらのBlogにはArmadillo-440のタグは含まれていませんが、440にも流用できる部分はありますでしょうか。
またBlogの内容とは関係なく、他に有効な手段がありましたら教えて頂けますでしょうか。
よろしくおねがいします。
コメント
y.nakamura
中村です。
> ・ユーザーランドのイメージファイルのサイズを小さくする
> ・起動スクリプトで不要なものを削除する
基本はこれなのですけど、
(カーネルの不要なもの削除でも数秒くらい短くなります)
質問投稿の「1分強かかる」が気になりました。
440(ベーシックモデル)の標準イメージでは、
デフォルトのDHCP設定で30秒くらいで起動します。
IPアドレス固定ならもう少し短くなります。
デフォルトのDHCP設定でLANケーブルをはずすと、
50秒くらいでした。
「1分強かかる」のどこに時間がかかっているかを
調べるのが先と思います。
--
なかむら
fukasawa
回答有り難うございます。
> デフォルトのDHCP設定で30秒くらいで起動します。
たしかに`Sending discover...`という表示で止まっている時間が長かったため、
DHCPサーバにつながるように、LANケーブルを接続したところ、速くなりました。
> 「1分強かかる」のどこに時間がかかっているかを
> 調べるのが先と思います。
おっしゃるとおりですね。
> IPアドレス固定ならもう少し短くなります。
変更したいArmadilloにログインしてviを使用することで、固定IPアドレスにする方法はマニュアルからわかりました。
しかし、Atmark-dist上でLinuxイメージを作る際に固定IPアドレスにする方法がわかりません。
関係ありそうな以下の場所を見てみましたが、違いそうです。
`atmark-dist>romfs>etc>config`は中身が空ですし、
`atmark-dist>romfs>etc>network>interfaces`は`file`コマンドで調べると`broken symbolic link...`となっています。
y.nakamura
中村です。
> しかし、Atmark-dist上でLinuxイメージを作る際に固定IPアドレスにする方法がわかりません。
440のベーシックモデルなら、
atmark-dist/vendors/AtmarkTechno/Armadillo-420/etc/default/interfaces
です。
// 出先で記憶で書いてますので、
// ディレクトリのパスやファイル名に
// 間違いがあるかもしれません。
ここを修正してビルドしたromfsイメージを440に書き込んで起動後、
440本体のconfigをクリアして再起動してください。
(あるいは/etc/config/interfacesファイルを削除して保存して再起動)
--
なかむら
fukasawa
fukasawa
IPアドレスを固定にしたことで、起動時間は34秒ほどになりました。
そこでさらなる高速化を目指して、起動時メッセージのうち時間がかかるものを抜き出しました。
```
02sec: Uncompressing kernel...
11sec: Uncompressing ramdisk...
05sec: RAMDISK: Loading 40200KiB [1 disk] into ram disk... |
04sec: Synthesizing the initial hotplug events:done
02sec: Starting basic firewall: done
```
起動時のログ全体を添付します。
まず、最も多いのがRAMDISKの解凍なので、RAMイメージサイズを削るのが近道に見えます。
教えていただいたブログの内容にしたがって、Qtを削除しようとしたのですが、
Userland Configurationの項目で選択できないため、もともと含まれていないようです。
他にサイズが大きくて、消しても問題のない項目はありますでしょうか?
Armadilloで動かしているアプリケーションの主な内容は、UART5とUART3の通信、SDカードへのデータ保存です。
ファイル | ファイルの説明 |
---|---|
teraterm_起動 190702.log |
y.nakamura
中村です。
> 他にサイズが大きくて、消しても問題のない項目はありますでしょうか?
>
> Armadilloで動かしているアプリケーションの主な内容は、UART5とUART3の通信、SDカードへのデータ保存です。
atmark-dist/config/.configをみれば、不要なものを探せると思います。
たとえば、
CONFIG_USER_ALSAUTILS=y
CONFIG_USER_ALSAUTILS_APLAY=y
CONFIG_USER_ALSAUTILS_AMIXER=y
CONFIG_USER_ALSAUTILS_ARECORD=y
や
CONFIG_USER_MJPGSTREAMER=y
CONFIG_USER_MJPGSTREAMER182_MJPGSTREAMER=y
CONFIG_USER_V4LUTILS_V4L2CTL=y
は不要なのではないでしょうか?
他には、
CONFIG_USER_AVAHI_AVAHI=y
CONFIG_USER_ZCIP_ZCIP=y
CONFIG_USER_CURL_CURL=y
CONFIG_USER_WGET=y
なども使っていなければ削除してもいいかと。
atmark-dist/config/.configを直接編集するのではなく、
"make menuconfig"で該当メニュー項目を探してOFFにします。
カーネルの方は、
atmark-dist/linux-3.x/.config
を見るとわかります。
サウンド、ビデオ、マルチメディア関連や、
フレームバッファ関連は削除可能ではないでしょうか。
--
なかむら
fukasawa
回答ありがとうございます。
教えてい頂いたもののうち、WGETとZCIP以外は消してみました。
Armadilloを書き換えて、再度起動したところ、32秒ほどになりました。
最も時間のかかっている`Uncompressing ramdisk...`が11secのままなので、
イメージサイズをさらに削るのが有効と推測し、`atmark-dist/romfs`内のサイズの大きいディレクトリを検索しました。
```
atmark@atde5:~/atmark-dist$ du -ak romfs/ | grep ^[0-9][0-9][0-9][0-9]
3768 romfs/lib/libgtk-x11-2.0.so.0.2400.10
1220 romfs/lib/libc-2.13.so
1408 romfs/lib/libcrypto.so.1.0.0
1100 romfs/lib/libX11.so.6.3.0
1144 romfs/lib/libgio-2.0.so.0.3200.4
19888 romfs/lib
2048 romfs/usr/share/X11/xkb/symbols
3668 romfs/usr/share/X11/xkb
3672 romfs/usr/share/X11
4980 romfs/usr/share
1252 romfs/usr/bin/Xfbdev
2052 romfs/usr/bin
8168 romfs/usr
1208 romfs/sbin
2732 romfs/bin
32848 romfs/
```
このなかで、romfs/usr/share/X11が3.6MBと大きいのですが、これはmenuconfigでX WINDOW SYSTEMSを削れば良いのでしょうか。
また削ってもよいのでしょうか。
y.nakamura
中村です。
> 教えてい頂いたもののうち、WGETとZCIP以外は消してみました。
> Armadilloを書き換えて、再度起動したところ、32秒ほどになりました。
> 最も時間のかかっている`Uncompressing ramdisk...`が11secのままなので、
あまり変わらなかったみたいですね。
> このなかで、romfs/usr/share/X11が3.6MBと大きいのですが、これはmenuconfigでX WINDOW SYSTEMSを削れば良いのでしょうか。
> また削ってもよいのでしょうか。
たぶん・・・X関連は消して大丈夫です。
ATDEのバックアップをとっておいて、
ダメだったら戻せばいいだけです。
--
なかむら
fukasawa
回答ありがとうございます。
`X WINDOW SYSTEMS`を削除しました。
再度起動したところ、29秒ほどになりました。
ひとまず、当初の半分になりましたので、これで高速化対応は一区切りとしようかと思います。
参考までに現在の起動ログの全体を添付します。時間のかかった処理は以下でした。
最初の時点で4秒かかっていた`RAMDISK: Loading...`の代わりに`mmcblk0: p1`になっていますが、
これは現在の状態では2つの処理が同時に走っているためかもしれません。
SDカードの抜き差しや自動マウントを追加した覚えはないので、原因は不明です。
```
02sec: Uncompressing kernel...
09sec: Uncompressing ramdisk...
04sec: mmcblk0: p1
04sec: Synthesizing the initial hotplug events:done
02sec: Starting basic firewall: done
```
ファイル | ファイルの説明 |
---|---|
teraterm_起動190704-02.log |
y.nakamura
中村です。
> atmark-dist/vendors/AtmarkTechno/my-product/etc/default/interfaces
> atmark-dist/romfs/etc/default/interfaces
>
> に同じ内容を書いた上で、ビルド、tftpdlで書き込みました。
atmark-distの下でビルド(make)すると、
atmark-dist/romfs
の下は全部が一旦削除されます。
そして、
> atmark-dist/vendors/AtmarkTechno/my-product/etc/default/interfaces
が
> atmark-dist/romfs/etc/default/interfaces
にコピーされます。
ですので、元となる
> atmark-dist/vendors/AtmarkTechno/my-product/etc/default/interfaces
だけ編集すればOKです。
--
なかむら
at_ito
2019年6月27日 9時27分
伊藤です。
Armadillo-440での起動高速化でしたら、Atmark Distを使用しているかと思いますので、
以下のURLのほうが参考になるかと思います。
https://users.atmark-techno.com/blog/53/919
アプリケーション起動までの高速化としてのポイントは、以下の通りです。
・ユーザーランドのイメージファイルのサイズを小さくする
・起動スクリプトで不要なものを削除する
もしSDカード上でDebianを使っている場合は、上記URLでの内容とは異なります。
なお、有償でのソリューションであれば、以下のようなものもあります。
・高速起動ソリューション「Ubiquitous QuickBoot RTP」 : https://armadillo.atmark-techno.com/software/qb_rtp
・組み込みLinux超高速起動ソリューション 「Warp!! 」 : https://armadillo.atmark-techno.com/software/warp