ブートシーケンス

embedded linux でのブートシーケンスについてのメモ. どのフェーズでどういう処理の分岐ができるかというあたりを中心に.

ファームウェアの更新処理(や,そのフォールバック処理)などの機能を実装しようとする場合,

  • どのフェーズで
  • どのような処理を行うか

というあたりを練るのに参考になるかも.

ブートローダ

電源投入もしくはリセットで,まずはブートローダが起動される.

  • initrd イメージ,カーネルイメージの選択
    • (圧縮された)initrd イメージをメモリ上に配置するのはブートローダの仕事
  • カーネルコマンドライン
    • 本番 rootfs デバイス
    • 対話的フォールバック
      • init=/bin/sh で,init の代わりにシェルを直接起動できる.
    • デバイスドライバへの指示
    • ユーザランドプログラムへの指示
      • /proc/cmdline から参照可能.

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環境----

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-07-31 (火) 21:40:37 (6126d)