オンラインリソースに基づいてマルチブートELFファイルを作成しましたが、objcopy
「フラット」バイナリまたはデータファイルを作成するために使用されました。カーネルイメージはシンプルで、「hello world」をコンソールに印刷します。 QEMUでは、次のコマンドを使用してフラットバイナリを実行できますqemu-system-i386 -kernel /path/to/flat/binary
。
プロセスの次のステップは、コンピュータの起動時に実際にBIOS画面からカーネルを起動することです。問題は、このフラットバイナリを起動可能なイメージにする方法がわからないことです。これまで私が得た最も遠い方法は、画像をUSBドライブに焼いてCD-ROMで焼いてからBIOS画面に入ることです。 USBから起動するオプションがオプションとして表示されず、CDから起動しようとするとシステムがクラッシュします。
私はまだシステムプログラミングの概念にはあまり慣れておらず、プログラムの実行の次のステップに進む方法がわかりません。まず、USBにグラブをインストールしてからフラットバイナリをコピーする必要がありますか、またはフラットバイナリを起動可能なイメージに直接作成してからUSBに書き込む方法はありますか?正しい方向へのアドバイス、ヘルプ、またはアドバイスは非常に役立ちます。ありがとうございます。
答え1
ソフトウェアを「実行」できるハードウェアプラットフォームは非常に多いです。あなたの質問によると、あなたは標準のPCを使用していると仮定します。 PCでは、従来のBIOSと最新の(実際にはかなり古い)UEFI(Unified Extensible Firmware Interface)という2つのファームウェア実装が使用されます。ファームウェアはROMに保存され(簡単に)、ハードウェアを実行可能な状態に初期化し、大容量ストレージからいくつかのコードをロードして起動することを担当します。
BIOSインターフェイスを使用して何かを起動するには、BIOSの実際の寿命を示す16ビットリアルモードコードを記述する必要があります。 UEFIパスを使用することをお勧めします。これを行うには、UEFI規格への準拠を確認するコードを作成してコンパイルし、結果のバイナリを適切にフォーマットされたUSBスティックまたはハードドライブに保存する必要があります。
詳細については、Roderick W. Smithのこのトピックに関する素晴らしいチュートリアルを参照してください。https://www.rodsbooks.com/efi-programming/index.html
答え2
適切なカーネルを指すEFIファイルがある場合は、UEFIモードで起動する必要があります。