LinuxカーネルイメージをRAMにロードした後


9

ブートプロセス後にLinuxカーネルイメージをRAMにロードした後に発生するアクティビティのフローを知りたいだけです。


2
あなたはそれを知りたくないはずです。あなたがしたいことはそれを学ぶことです。
アレックス

回答:


15

Linux 2.6以降:

カーネル

カーネルは、RAMに読み込まれた後、次の機能を実行します。

setup()

  1. 物理メモリのレイアウトを説明するテーブルをRAMに作成します。
  2. キーボードのリピート遅延とレートを設定します。
  3. ビデオアダプタカードを初期化します。
  4. ハードディスクパラメータでディスクコントローラを初期化します。
  5. IBM Micro Channelバスを確認します。
  6. PS / 2ポインティングデバイス(バスマウス)を確認します。
  7. Advanced Power Management(APM)サポートを確認します。
  8. サポートされている場合は、使用可能なハードディスクを説明するテーブルをRAMに作成します。
  9. カーネルイメージのRAMが少ない場合は、高に移動します。
  10. A20ピン(古代の8088マイクロプロセッサの互換性ハック)を設定します。
  11. 暫定割り込み記述子テーブル(IDT)と暫定グローバル記述子テーブル(GDT)をセットアップします。
  12. 浮動小数点ユニット(FPU)をリセットします。
  13. プログラマブル割り込みコントローラー(PIC)を再プログラムします。
  14. リアルモードから保護モードに切り替えます。

startup_32()

  1. セグメンテーションレジスタと暫定スタックを初期化します。
  2. eflagsレジスタのすべてのビットをクリアします。
  3. 初期化されていないデータの領域をゼロで埋めます。
  4. decompress_kernel()カーネルイメージを解凍するために呼び出します。

startup_32() (同じ名前、その他の機能):

  1. 最終セグメンテーションレジスタを初期化します。
  2. bssセグメントをゼロで埋めます。
  3. 暫定カーネルページテーブルを初期化します。
  4. ページングを有効にします。
  5. プロセス0のカーネルモードスタックをセットアップします。
  6. 再度、eflagsレジスタのすべてのビットをクリアします。
  7. IDTにnull割り込みハンドラを入力します。
  8. システムパラメータを使用して最初のページフレームを初期化します。
  9. プロセッサのモデルを特定します。
  10. GDTとIDTのアドレスでレジスタを初期化します。

start_kernel():ほぼすべてのカーネルコンポーネントがこの関数によって初期化されますが、これらはごく一部です。

  • スケジューラー
  • メモリーゾーン
  • バディシステムアロケータ
  • IDT
  • SoftIRQ
  • 日時
  • スラブアロケーター
  • プロセス1を作成(/sbin/init

完全な「リスト」は、linux / init / main.cのソースから入手できます。

初期化

Initは、システムを望ましい状態にするために必要なすべてのユーザープロセスを開始します。このルーチンは、配布と呼び出されるランレベルに大きく依存します。

runlevelコンソールに入力すると、システムの現在のランレベルが表示されます。

/etc/rcX.d/(または/etc/rc.d/rcX.d/)を調べて、Xをランレベルに置き換えます。
これらは、実行優先度順に並べられたシンボリックリンクです。S01....つまり、このスクリプトは非常に早く開始さS99....れ、起動プロセスの最後に実行されます。KXX....シンボリックリンクはシャットダウンシーケンスのために同じですが、操作を行います。

一般に、これらのスクリプトは、ディスク、ネットワーク、ロギング、デバイス制御、特別なドライバー、環境、およびその他の多くの必要なシーケンスを処理します。


LXRは、Linuxカーネルソースを読み取るための優れたインターフェースです。いいリストですが、その多くは非常にアーキテクチャに依存しています(これはPCバージョンです)。
Gilles「SO-悪をやめる」

1
  • カーネルは、「Uncompressing Linux ..」が表示されるとすぐに、システムH / Wの制御を引き継ぎます。
  • カーネルは、グラフィックカードのBIOSレジスタと画面出力形式をチェックして設定します。
  • 次に、カーネルはBIOS設定を読み取り、基本的なハードウェアインターフェイスを初期化します。
  • 次に、カーネルのドライバーがハードウェアを初期化します。
  • 次に、カーネルがパーティションをチェックします
  • 次に、ルートファイルシステムをマウントします
  • 次に、カーネルはinitを開始します。これにより、メインシステムがすべてのプログラムと構成で起動されます。

0

ブートローダーは、カーネルコマンドライン(存在する場合)を渡してイメージエントリポイントにジャンプし、カーネルが残りを処理します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.