ブートローダーが完備されているとはいえ、私は暇な時間に教育の練習としてオンとオフを書きました。私は問題に遭遇しました。カーネルをロードする準備をする
私は初期ブートを実行でき、他のセクタを問題なくチェーンロードできます。私が自分のOSを書いていたら、行きたいと思う。 :)代わりに、私はLinuxをブートストラップしようとしています。私が持っている課題は2倍です。
- 私はそれがI need to load the kernel (Linux) into memory at 0x100000であることを理解しています。カーネルのオフセット0x202に "HdrS"という署名があるはずです。私はまた、開始アドレスは0x214にあるべきであることを知っています。しかし、その場所の住所にジャンプすると、その場所は停止します。明らかに、これを回避するのはかなり難しいです。 :) カーネルの正しい開始アドレスを決定するために必要なこの一連の事実に何かがないのですか?
- 私は、(1)に対する答えは、メモリ領域にハードウェアディスカバリ情報を書き込む必要があると考えられます。私はOSDev Wikiにこれを渡すいくつかの参照を見てきましたが、私はこれがどこにあるのか正確にどのデータがそこにある必要があるのか見当たりません。 ブートローダはハードウェアの検出を担当していますか?もしそうなら、どのデータをどこに置く必要がありますか?
のノートを取るために、追加のポイントは、私はEFIブートシステムの作成を扱っていますので、私は32ビットプロテクトモードで既にだということなので、16ビットリアルモードは本当にここにオプションではありませんされ、排除カーネル内のリアルモード開始位置。
デバッガをこの周りに包むのは簡単です...仮想マシンを使用してください。地獄、linuxにもソースコードが付属しています;) – Jester
ベアメタルでデバッグしようとしていますか?ボッシュ内部の別のマシンシミュレータを試してみてください。これは、クロック(およびタイマー割り込みなど)が停止するため、シングルステップに一時停止することが完全に透過的になるという利点があります。 –
@PeterCordesはい。 Bochsにもデバッグ接続インターフェースがあることを覚えているようですね。それが役に立っているかどうか分かりますが、本当に私には、0x214で示された場所にジャンプしています。私は間違った場所からアドレスを取得していると思われます。私の問題。 –