Tweet


* ブートシーケンス [#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環境  |-               |-             |-       |-                     |

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS