The Android boot process from power on(翻訳)

前に偶然見つけたページですが、電源ONから起動までが良くまとまっています。
http://www.androidenea.com/2009/06/android-boot-process-from-power-on.html

ざっくりですが翻訳してみました。



電源ONからのAndroid起動プロセス

モバイル・プラットフォームや組み込みシステムでは、デスクトップ・システムに比べていくつかの相違点を持っているので、これらがどのように最初に起動してブートするかについて、この記事ではAndroid携帯の初期ブートステージについての詳細を説明します。
我々はいくつか以前の例で参照としてBeagleBoardを使用しているので、いくつかの特定のものは同様のシステムに関連しています。

1.電源ONそしてBootROM codeの実行
画像

CPUの電源投入時には初期化が行われていない状態です。内部クロックは設定されておらず、利用可能な唯一のメモリは内部RAMです。
電源供給が安定したら、BootROMコードが実行されます。これはコードの小さな一部分で、CPU ASICの中に埋め込まれています。
BootROMと構成の詳細については、OMAP3530 TRMの初期化の章を参照して下さい。

BootROMコードはシステムレジスタを使用してブートメディアを検出します。そしてそれはASIC上のいくつかの物理ボールにマップされます。
これはブートローダの最初のステージがどこにあるかを決定することです。
ブートメディアのシーケンスが確立されると、BootROMは最初のステージのブートローダを内部RAMへロードしようとします。
ブートローダが配置されたら、BootROMコードはブートローダにジャンプしブートローダで処理を継続します。

2、ブートローダ
ブートローダはカーネルから独立した特別なプログラムで、初期メモリの設定とカーネルをRAMにロードするために使用されます。
デスクトップシステムにおいてはブートローダはGRUBのようなプログラムであり、組み込みLINUXではuBootがしばしばブートローダとして選択されます。
デバイスメーカは、しばしば独自のブートローダを使います。
ARMシステム上で動作するLinux用のブートローダの要件はカーネルソースツリーの「/Documentation/arm」下のブートドキュメントで記載されています。

画像


  1. 最初のブートローダの段階では外部RAMを検出して設定します。

  2. 外部RAMが利用可能でシステムが実行準備できていれば、最初のステージはメインブートローダをロードし、外部RAMに配置します。

  3. ブートローダの第二段階は最初の主要なプログラムであり、実行します。
    これはファイルシステム、追加メモリ、ネットワークのサポートとその他の設定をコードに含みます。
    携帯電話においては、それはまたモデムCPUのためのコードをロードし低レベルのメモリ保護とセキュリティオプションの設定に対して責任があるかもしれません。

  4. ブートローダが特別なタスクで実行されると、ブートのためにLinux Kernelを探します。
    それはブートメディア(あるいはシステム構成に応じていくつかの他のソース)からロードしてRAMに配置します。
    それはまた、起動時にKernelが読めるように、いくつかのブートパラメータをメモリ内に配置します。

  5. ブートローダが完了したら、Linux Kernel(通常はいくつかの解凍ルーチン)へジャンプします、そしてKernelはシステムの責任を負います。



3. The Linux kernel
Linux KernelはAndroidにおいて他のシステムと同様の方法で起動します。
それはシステムを実行するのに必要な全てを設定します。割り込みコントローラを初期化し、メモリ保護、キャッシュ及びスケジューリングを設定します。
画像



  1. メモリ管理ユニットとキャッシュが初期化されたら、システムは仮想メモリとユーザ空間プロセスの起動が出来るようになります。

  2. Kernelはinitプロセス(Androidのソースツリーのsystem/core/initの下にある)のためにルートファイルシステムを調べて初期ユーザ空間プロセスとして起動します。



4. The init process
initプロセスは全てのシステムプロセスの祖先です。
システム内の他の全てのプロセスはこのプロセスあるいはその子孫のいずれから起動されます。

画像



  1. Androidのinitプロセスはinit.rcと呼ばれるファイルを探します。
    これはシステムサービス、ファイルシステムそして設定のために必要な他のパラメータを記述するスクリプトファイルです。init.rcスクリプトはAndroidオープンソースプロジェクトのsystem/core/rootdirにあります。

  2. initプロセスはinitスクリプトを解析し、システムサービスプロセスを起動します。



5. Zygote and Dalvik
Zygoteはinitプロセスにより起動されます、そして基本的に起動するとDalvik VMを初期化します。
画像


6. The system server
システムサーバはシステム内で実行する最初のJavaコンポーネントです。
それはテレフォニーマネージャやBluetoothといった全てのAndroidサービスを開始します。
それぞれのサービスの起動は、現在システムサーバのrunメソッドに直接書き込まれます。
システムサーバのソースはオープンソースプロジェクトのframeworks/base/services/java/com/android/server/SystemServer.javaで見つけることが出来ます。
画像


7. Boot completed
それは非常に有用であり、何かが私は残っているべきではないので、20090831に投稿するためにこの部分を追加しました。
システムサーバが稼動し、システムの起動が完了するとACTION_BOOT_COMPLETEDと呼ばれる標準ブロードキャストが発生します。
自分独自のサービスを起動するには、アラームを登録するか、そうでなければ
自分のアプリケーションにブート後に何らかのアクションを実行させる、それはこのブロードキャストインテントを受信するために登録すべきである。
分離したブート手順と独自機能を追加については、別記事で詳しく説明しています。




Linuxのブートプロセスをみる (UNIXMAGAZINE COLLECTION)
アスキー
白崎 博生

ユーザレビュー:

amazon.co.jpで買う
Amazonアソシエイト by Linuxのブートプロセスをみる (UNIXMAGAZINE COLLECTION) の詳しい情報を見る / ウェブリブログ商品ポータル

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック