私はプログラミングの挑戦が好きで、カーネルを書くことはプログラミングの挑戦のようです。
残念ながら、カーネルは基本的にオペレーティング システムのコアであり、オペレーティング システム上で簡単に実行できないため、特にテストが困難です。
ただし、コンピューター ハードウェアをエミュレートできる仮想マシンと呼ばれるアプリケーションについては知っています。
仮想マシンを使用してカーネル (C+Assembly) を開発およびテストする最も簡単で最良の方法は何ですか?
私はプログラミングの挑戦が好きで、カーネルを書くことはプログラミングの挑戦のようです。
残念ながら、カーネルは基本的にオペレーティング システムのコアであり、オペレーティング システム上で簡単に実行できないため、特にテストが困難です。
ただし、コンピューター ハードウェアをエミュレートできる仮想マシンと呼ばれるアプリケーションについては知っています。
仮想マシンを使用してカーネル (C+Assembly) を開発およびテストする最も簡単で最良の方法は何ですか?
BOCHSは、ペットのOSにひどい問題が発生したときに通知するのに優れているようですが、非常に遅いです。私はVirtualPCを汎用テストに使用し、物事が曖昧になった場合はBOCHSを使用します。
また、2分ごとにOSを起動する可能性が高いため、起動イメージを作成してVirtualPCを起動するための何らかの自動化された方法があると役立ちます。
ルートからKernel.Binを起動するために必要なすべてのものを含むGRUBブートフロッピーイメージを作成しました。バッチファイルを使用してこのファイルを仮想プロジェクトディレクトリにコピーし、 FATImageGeneratorを使用してカーネルをイメージにコピーします。次に、VirtualPCプロジェクトを起動します。ヴォラ!
私のバッチファイルからの抜粋:
COPY Images\Base.vfd Images\Boot.vfd /Y
fat_imgen.exe modify Images\Boot.vfd -f Source\Bin\KERNEL.BIN
COPY Images\Boot.vfd Emulators\VirtualPC\ /Y
START Emulators\VirtualPC\MyOS.vmc
最後の提案:VirtualPCプロセスの優先度を低く設定します-これを信頼してください!コードを交換させていただきます。
ツール: DGJPP、NASM、GRUB。
コード: osdev.org、osdever.net
HelenOSを見ることに興味があるかもしれません。これは、Simics や QEMU などのシミュレーターを使用して開発された多くのアーキテクチャー (ベアメタルで問題なく起動) に移植されたゼロからのマイクロカーネルです。
ビルド プロセス中に最終的な ISO にコピーされる静的 grub を使用します。OSがセルフホスティングになるまで、いくつかのことはそのままにしておく必要があります。本当にゼロからすべてをやりたい場合を除いて、独自のユーザー空間 C ライブラリを実装しないことを強くお勧めします.. すぐにセルフホスティングになるでしょう :)
Simics はフリーではありませんが、カーネルを作成する際には Simics (および組み込みのデバッグ/プロファイリング ツール) を強くお勧めします。ある種のカーネル コンソールとロガーを配置すると、QEMU は非常にうまく機能します。
自問する必要がある最初の質問は、どのハードウェア アーキテクチャを対象としているかということです。この説明のために、IA_32 アーキテクチャをターゲットにしていると仮定します。これは、そのプロセッサに関するドキュメントがすぐに入手できるため、おそらく賢明な選択です。
この作業に真剣に取り組んでいる場合は、エミュレーターまたは VM に対してデバッグ/コード/ビルド/デプロイ サイクルを実行する必要があります。誰かが非常に人気のあるBOCHSについて言及しました。エミュレーション速度が問題なら、BOCHS よりも高速な Qemu というエミュレーターもあります。
開発環境は Linux または Windows で実行することをお勧めします。これらの開発環境のドキュメントを利用できるため、これもおそらく賢明な選択です。
メイクはあなたの友達です。これを使用して、ビルド/実行プロセスを自動化します。ツールセット/コンパイラを事前に選択し、時間をかけてよく学習することをお勧めします。それは長期的にあなたを救うでしょう。
おそらく、マシン (x86 だと思います) をセットアップしてから、起動時にどのように動作するかを正確に調査します。ホスト マシンのファイル システムには、仮想マシンのファイル システムとして機能する 1 つまたは複数のファイルが必要です。開発中のカーネルを起動させるブート セクター情報をそこに配置する必要があります。
これはもちろん、ホスト上のビルド システムが仮想マシンのファイル システムにカーネルを書き込む方法を備えていることを意味しますが、これは難易度が異なる場合があります。
ランダムに 1 つを選択すると、bochsはdd などの標準ツールを使用して外部からブート メディアを編集することをサポートしているようです。
それは簡単です。仮想マシンをセットアップし、カーネルを書き、それを仮想マシンにコピーし、仮想マシンを起動します。
より具体的なアドバイスが必要な場合は、より具体的にする必要があります。