ブートシーケンス †
embedded linux でのブートシーケンスについてのメモ.
どのフェーズでどういう処理の分岐ができるかというあたりを中心に.
ファームウェアの更新処理(や,そのフォールバック処理)などの機能を実装しようとする場合,
というあたりを練るのに参考になるかも.
ブートローダ †
電源投入もしくはリセットで,まずはブートローダが起動される.
- initrd イメージ,カーネルイメージの選択
- (圧縮された)initrd イメージをメモリ上に配置するのはブートローダの仕事
- カーネルコマンドライン
- 本番 rootfs デバイス
- 対話的フォールバック
- init=/bin/sh で,init の代わりにシェルを直接起動できる.
- デバイスドライバへの指示
- ユーザランドプログラムへの指示
linux カーネルの起動 †
デバイスの初期化など.
initrd †
一般的に UNIX 系 OS では init が世界の始まりである.
が,その前に initrd 環境で本番環境の地ならしをすることができる.
このフェーズを省略して rootfs の本番環境へ直接遷移することも可能.
- 仮の root device は ramdisk
- /linuxrc プログラムを実行し.終了と共に rootfs 環境へ遷移
- デバイスの初期化
- カーネルモジュールの動的なロード.x86 のディストリビューションでは initrd をこの目的で使用
- USB などブートローダでは難しいデバイスも利用できる
- rootfs の選択
rootfs 環境 †
- init の元で動く本番環境.
- initrd イメージを rootfs とすることも可能
reboot / power off †
システムの動作の終わり.
reboot する場合はブートローダのフェーズへ戻る.
- ダイイングメッセージ(?)
- 空ファイルなど
- 次回起動時にブートローダや initrd, rootfs 環境に指示を与えることができる
まとめると †
思いっきり大雑把にまとめてみる.
フェーズ | カーネルイメージ | initrdイメージ | rootfs | カーネルコマンドライン |
ブートローダ | 選択可能 | 選択可能 | 選択可能 | 設定可能 |
initrd環境 | - | - | 選択可能 | - |
rootfs環境 | - | - | - | - |