シェル操作で利用する「ls」や「mv」などのコマンドは,Androidでは「toolbox」と呼ぶ一つのプログラムがまとめて面倒を見ている。組み込みLinuxでは同種の機能を提供する「BusyBox」を使うことが多い。ここにも普通のLinuxとの違いが見える。

起動プロセスは必要最小限に

 もう少し詳細にAndroidのLinuxを調べるため,KMCの協力を得て起動の過程を観察した(図5注7)

注7) KMCは同社のデバッガ・ソフトウエア「PARTNER」をエミュレータと接続できるようにエミュレータのソース・コードを一部修正し,エミュレータが模擬するハードウエアのICE(in-circuit emulator)相当の部分を実装した。

図5 Androidの起動プロセス エミュレータであるQEMUを制御できるデバッガ・ソフトウエアでAndroidの起動プロセスを観察した(a)。組み込みLinuxはシェル・スクリプトを使って初期化することが一般的で,mkdirやlnといったUNIXコマンドが起動プロセスに多く登場する。しかしAndroidの起動時に実行するプロセスの名称には,一般的なUNIXコマンドがほとんど登場しなかった。(b)の右側の緑色の線が,当該時間に実行中だったプロセスを示している。AndroidはカーネルとしてLinuxを利用し,画面表示や通信といった部分はAndroid独自のソフトウエアで実行する形態を採っている。
図5 Androidの起動プロセス エミュレータであるQEMUを制御できるデバッガ・ソフトウエアでAndroidの起動プロセスを観察した(a)。組み込みLinuxはシェル・スクリプトを使って初期化することが一般的で,mkdirやlnといったUNIXコマンドが起動プロセスに多く登場する。しかしAndroidの起動時に実行するプロセスの名称には,一般的なUNIXコマンドがほとんど登場しなかった。(b)の右側の緑色の線が,当該時間に実行中だったプロセスを示している。AndroidはカーネルとしてLinuxを利用し,画面表示や通信といった部分はAndroid独自のソフトウエアで実行する形態を採っている。 (画像のクリックで拡大)

 一般に組み込みLinuxでは,起動時に複数のシェル・スクリプトが動作し,ハードウエアの初期化やOS自体の初期設定などを実行する。最初の起動スクリプトとして「/etc/rc.d/rc.sysinit」が動作することが多い。さらにGUIを使うかなどの設定に応じて「/etc/rc.d/rc」スクリプトが動く。もちろんLinuxはいろいろな構成が可能なので,違う方法もあり得るが,通常はこうしたスクリプトを通じて多数のLinuxコマンドが動作する。

 これに対しAndroidで起動時に動作するスクリプトは,「init.rc」程度である。init.rcは例えば環境変数の設定や,USBを利用するためのサービス・プロセスの起動,adbと接続するサービス・プロセスの起動などを実行している。