440での起動高速化

お世話になっております。
Armadillo-440の起動を短縮したいと考えています。
自作の組み込んだアプリケーションが起動するまでに1分強かかっています。

電源投入時のアプリケーションの起動高速化
https://users.atmark-techno.com/blog/53/3888

こちらのBlogにはArmadillo-440のタグは含まれていませんが、440にも流用できる部分はありますでしょうか。

またBlogの内容とは関係なく、他に有効な手段がありましたら教えて頂けますでしょうか。

よろしくおねがいします。

製品: 
Armadillo-440

伊藤です。

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

中村です。

> ・ユーザーランドのイメージファイルのサイズを小さくする
> ・起動スクリプトで不要なものを削除する

基本はこれなのですけど、
(カーネルの不要なもの削除でも数秒くらい短くなります)
質問投稿の「1分強かかる」が気になりました。

440(ベーシックモデル)の標準イメージでは、
デフォルトのDHCP設定で30秒くらいで起動します。
IPアドレス固定ならもう少し短くなります。

デフォルトのDHCP設定でLANケーブルをはずすと、
50秒くらいでした。

「1分強かかる」のどこに時間がかかっているかを
調べるのが先と思います。

--
なかむら

回答有り難うございます。

> デフォルトの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...`となっています。

中村です。

> しかし、Atmark-dist上でLinuxイメージを作る際に固定IPアドレスにする方法がわかりません。

440のベーシックモデルなら、
atmark-dist/vendors/AtmarkTechno/Armadillo-420/etc/default/interfaces
です。
// 出先で記憶で書いてますので、
// ディレクトリのパスやファイル名に
// 間違いがあるかもしれません。

ここを修正してビルドしたromfsイメージを440に書き込んで起動後、
440本体のconfigをクリアして再起動してください。
(あるいは/etc/config/interfacesファイルを削除して保存して再起動)

--
なかむら

回答有り難うございます。
atmark-dist/vendors/AtmarkTechno/my-product/etc/default/interfaces
atmark-dist/romfs/etc/default/interfaces

に同じ内容を書いた上で、ビルド、tftpdlで書き込みました。

その後Armadillo上の操作で/etc/config/interfacesを削除することで更新を確認いたしました。

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

中村です。

> 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です。

--
なかむら

中村です。

> 他にサイズが大きくて、消しても問題のない項目はありますでしょうか?
>
> 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
を見るとわかります。
サウンド、ビデオ、マルチメディア関連や、
フレームバッファ関連は削除可能ではないでしょうか。

--
なかむら

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

教えてい頂いたもののうち、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を削れば良いのでしょうか。
また削ってもよいのでしょうか。

中村です。

> 教えてい頂いたもののうち、WGETとZCIP以外は消してみました。
> Armadilloを書き換えて、再度起動したところ、32秒ほどになりました。
> 最も時間のかかっている`Uncompressing ramdisk...`が11secのままなので、

あまり変わらなかったみたいですね。

> このなかで、romfs/usr/share/X11が3.6MBと大きいのですが、これはmenuconfigでX WINDOW SYSTEMSを削れば良いのでしょうか。
> また削ってもよいのでしょうか。

たぶん・・・X関連は消して大丈夫です。

ATDEのバックアップをとっておいて、
ダメだったら戻せばいいだけです。

--
なかむら

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

`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