Linuxカーネルに関する技術情報を集めていくプロジェクトです。現在、Linuxカーネル2.6解読室の第2章までを公開中。
即/etc/initが動作を始める訳ではなく、最初は下記関数を実行するカーネルスレッドとして実行を開始する。initはファイルシステム上のinitコマンドを実行する前に、カーネル初期化処理の続き(do_basic_setup関数)を行う。 これら処理をstart_kernel関数でなく、こちらで行う理由は、start_kernel関数と異なり待ちに入ることが出来るためだと思われる。
init() カーネル初期化処理を行う(do_basic_setup関数) 標準入出力用にコンソール(/dev/console)をオープン if(BOOTからの要求があれば) BOOTから指定されたコマンドをexecする initコマンドをexecする if(initコマンドのexecに失敗したら) シェル(/bin/sh)をexecする do_basic_setup() (各種初期化) : : kflushdデーモンをカーネルスレッドとして起動 スワップの初期化(kswapd_setup関数) スワップ処理のデーモン(kpiod, kswapd)をカーネルスレッドとして起動 各種デバイスドライバの初期化(device_setup関数) 各種実行可能オブジェクト登録(binfmt_setup関数) 各種ファイルシステムの登録(filesystem_setup関数) rootファイルシステムのマウント(mount_root関数) if(ラムディスクがrootの場合) { スレッドを生成 "/linuxrc" コマンドを実行する。 } }
(NIS)HirokazuTakahashi
2000年06月11日 (日) 22時29分57秒 JST1
[PageInfo]
LastUpdate: 2008-08-27 14:45:51, ModifiedBy: hiromichi-m
[Permissions]
view:all, edit:login users, delete/config:members