2009-05-12 11 views
4

通常のオペレーティングシステムを起動する前に、小さなLinuxディストリビューションを開始したいとします。Linuxカーネルをシャットダウンしてリアルモードで再開することはできますか?

  1. BIOSがMBRをロードしてMBRを実行します。
  2. MBRは自分のlinuxパーティションであるアクティブなパーティションを探し出します。
  3. Linuxが起動し、私は何が必要なのかを実行します。
  4. Linuxがシャットダウンし、再びリアルモードに切り替わります。
  5. 元のパーティションのブートセクタがロードされ、通常のOSが起動します。

AFAIK、手順4は難しい作業です、Linuxに先立つすべてのデバイスの状態を復元する、INT13hは機能するでしょうか?割り込みベクタテーブルを復元する必要はありますか?いくつか言及する。

おそらくこれは既存のプロジェクトで行われていますか?

+1

GRUBのようなものよりも優れたLinuxベースのブートローダを作成しようとするのなら、これは本当に難しいことです。私はそのようなプロジェクトを始めましたが、決してそれを終えたことはありません。しかし、これは間違いなく可能です。Splashtopを参照してください。 – Zifre

+1

これは本当に(IMHO)プログラミング関連ではありません。ただし、IIRCは、いったんx86または互換プロセッサが保護モードになると、リセットせずにリアルモードに戻ることはできません。 –

+3

私は実際にこれを試してみたいので、私にとってはプログラミング関連です。 はい、再度リアルモードに戻すことができます(Intelソフトウェアマニュアル3章9)。 –

答えて

4

Linuxはこれを通常サポートしません。特に、BIOSやDOSプログラムが予期しない方法でハードウェアを再初期化するためです。しかし、再起動(特にarch/x86/kernel/reboot.cのmachine_real_restartを参照してください)や、kexecやサスペンドのためのハードウェアを再初期化するコードがあります。私はあなたがこれらの組み合わせで何かをすることができるかもしれないと思う - しかし、結果が真にDOSやWindowsが再起動時に見られるものと一致するかどうかはわかりません。

より簡単な計画は、GRUBのような特定の設定で一度起動するように設定できるチェーンロード用ブートローダを使用することです。 grub-set-defaultを呼び出してリブートすることができます。 GRUBが起動すると、Windowsに制御が渡されます。フォールバックOSをLinuxパーティションに設定すると、次の起動時に制御がLinuxに戻ります。

さらに別のオプションはCorebootを使用することがありますが、これはまだ起動するための準備が整っているかわかりません。

3
私はそれがうまくいく場合、これは私は知りませんしようとしたが、ここにいない

:リアルモードコードのアドレスを指定するイメージ、bzImage形式のカーネルファイルのヘッダ内のオプションがあります

プロテクトモードコードが開始する前に実行します。あなたは、実際のカーネルを持たない最小限のbzImage準拠ファイルを作成することができますが、INT 0x13〜0x7c00を使用してMBRをロードするリアルモードのコードと、BIOSがそうするようなjmpがあります。

"-t bzImage-x86 --real-mode"オプションを使用してbzImageをロードする場合、CR0のPEビットをリセットしてrealmode(前述のbdonlan)にしてコードを実行する必要がありますbzImageヘッダーオプションが指しています。

bzImageヘッダーオプションはrealmode_swtchと呼ばれ、/usr/src/linux/Documentation/x86/boot.txtに文書化されています。ヘッダフォーマットコードは/ usr/src/linux/arch/x86/boot/headerにあります。 .S

関連する問題