* ブートシーケンス [#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 環境に指示を与えることができる ** まとめると [#x97f514c] 思いっきり大雑把にまとめてみる. |CENTER:|CENTER:|CENTER:|CENTER:|CENTER:|c |フェーズ |カーネルイメージ|initrdイメージ|rootfs |カーネルコマンドライン|h |ブートローダ|選択可能 |選択可能 |選択可能|設定可能 | |initrd環境 |- |- |選択可能|- | |rootfs環境 |- |- |- |- |