カーネルの開発と仮想マシンでのテスト
-
19-08-2019 - |
質問
プログラミングの課題が好きで、カーネルの作成はプログラミングの課題のようです。
残念ながら、カーネルは基本的にオペレーティングシステムの中核であり、オペレーティングシステム上で簡単に実行できないため、テストが特に困難です。
ただし、コンピューターハードウェアをエミュレートできる仮想マシンと呼ばれるアプリケーションについては知っています。
仮想マシンを使用してカーネル(C + Assembly)を開発およびテストする最も簡単で最良の方法は何ですか?
解決
BOCHSは、ペットOSで何かがひどくうまくいかない場合に通知するのに優れているようですが...それは非常に遅いです!汎用テストにはVirtualPCを使用し、物事が曖昧になる場合はBOCHSを使用します。
また、OSを2分ごとに起動する可能性が高いため、何らかの自動化された方法でブートイメージを構築することができます<!> amp; Virtual PCを起動します。
ルートからKernel.Binをブートするために必要なすべてのものを含むGRUBブートフロッピーイメージを作成しました。バッチファイルを使用してこのファイルを仮想プロジェクトディレクトリにコピーし、 FAT Image Generator を使用しますa>カーネルをイメージにコピーします。次に、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は非常に素晴らしい仕事をします。
それは簡単です。仮想マシンをセットアップし、カーネルを作成し、仮想マシンにコピーして、仮想マシンを起動します。
より具体的なアドバイスが必要な場合は、より具体的にする必要があります。
おそらくマシン(x86、私は推測する)をセットアップし、ブート中の動作を正確に調査します。ホストマシンのファイルシステムには、仮想マシンのファイルシステムとして機能する1つ以上のファイルがあり、開発中のカーネルを起動させるブートセクター情報をそこに置く必要があります。
それはもちろん、ホスト上のビルドシステムが仮想マシンのファイルシステムにカーネルを書き込む方法を持っていることを意味します。これは難易度が異なります。
ランダムに1つを選択すると、 bochs は ddなどの標準ツールを使用した外部からのブートメディアの編集をサポート
最初に自問する必要がある質問は、対象とするハードウェアアーキテクチャです。この説明のために、IA_32アーキテクチャをターゲットにしていると仮定します。IA_32アーキテクチャは、そのプロセッサに関するドキュメントがすぐに入手できるため、おそらく賢明な選択でしょう。
この取り組みに真剣に取り組んでいるのであれば、エミュレータまたはVMに対してデバッグ/コード/ビルド/デプロイサイクルを実行することをお勧めします。誰かがBOCHSに言及しました。これは非常に人気があります。エミュレーション速度が重要な場合は、BOCHSよりも高速なQemuというエミュレーターもあります。
開発環境はLinuxまたはWindowsで実行することをお勧めします。これらの開発環境については、ドキュメントが用意されているため、おそらく賢明な選択でしょう。
Makeはあなたの友達です。これを使用して、ビルド/実行プロセスを自動化します。ツールセット/コンパイラを事前に選択し、それらを十分に学習することをお勧めします。長期的にはあなたを救います。