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