問題タブ [multiboot]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - Grub2 でのカスタム カーネルの起動
Grub2 でカスタム カーネルを起動したいと考えています。古い(grub 1)マルチブートヘッダーを使用しました:
しかし、Grub2 では動作しないので、新しいマルチブート仕様を検索して見つけました: http://bzr.savannah.gnu.org/lh/grub/branches/multiboot2/annotate/head:/doc/multiboot2 .h (これは実際の仕様ではなく、単なるヘッダー ファイルです)
だから、今私はこのマルチブート ヘッダーを使用しています。
しかし、それも機能しません:マルチブートヘッダーはありません
助言がありますか?
ありがとう!
kernel - Grub 2 がカーネルでマルチブート ヘッダーを検出しない
Grub 2 (および QEMU の-kernel
) がカーネルで Multiboot v1 ヘッダーを検出しないという問題があります。の前に別のセクションにヘッダーがあり.text
ます。
linker.ld
:
boot.s
(構文としての GNU):
ヘッダー セクションがマジック ナンバーで指定されたとおりに追加されていることを確認しました。
それでも Grub 2 は、カーネルに有効なマルチブート ヘッダーがなく、QEMU の-kernel
オプションを使用すると次の原因になると述べています。
これは、マルチブートがあるべき場所ではなく、BIOS によってマップされた範囲内のアドレスのようです。
Bran と OSDev (および私の以前のカーネル) の通常のコードと比較しましたが、何が間違っているのかわかりません。
framebuffer - GRUB2 + VESA BIOS 拡張機能 / VBE が壊れていますか?
適切なブート イメージのビルドに関する以前の問題は修正されましたが、ほぼ 1 日中、別の GRUB2 関連の問題と格闘していました。
問題は、マルチブート ヘッダーにビデオ情報要求ビットを設定しても、GRUB2 が適切な VESA BIOS 拡張 (VBE) 情報を返さないことです。
カーネルは私自身の作品であり、以前のバージョンの GRUB2 で動作 (TM) していたことは注目に値します (画面を白いピクセルで埋めることができましたが、問題ありませんでした)。
これが私の現在のgrub.cfgです:
ブート イメージの作成に使用するスクリプトは次のとおりです。
bare-metal - エラー: マルチブート ヘッダーが見つかりません
この日、気になるものを見つけました。シンプルなベア OS をビルドする
マルチブート対応にする方法を読みました。NASM と GCC を使用しています。マルチブート ヘッダーを持つローダーを作成し、そのためにシステムのメイン ポイントを呼び出す必要があります。loader.asm と loader.ld の 2 つのファイルがあります。
loader.asm
loader.ld
main.c
私が使用しているビルドのために
そして最後のリンク
grub-mkrescue でシンプルな iso を構築し、qemu で実行しましたが、常に
問題はファイルにあると思いますloader.ld
が、どこにあるのかわかりません
linker - GRUB マルチブート ヘッダーが見つかりません
この質問とそれが主な回答を読んだ後、カーネルで readelf を実行したところ、.text セクションが 0x00100000 ではなく 0x00101000 にあることに気付きました。また、.text セクションがあるはずの場所に .not.gnu.build-i と書かれている上記のセクションに気付きました。.text セクションを正しい場所に配置する方法はありますか? align 4
以前は1Mに設定していました。
assembly - カーネルの終了後に GRUB に戻る
したがって、GRUB2 によってロードされるプロテクト モード (32 ビット、x86) アセンブリ プログラムがあります。マルチブート対応です。このプログラムは、オペレーティング システムではなく、ゲームを意図したものです。したがって、GRUB を一種のプログラム スイッチャーとして使用したいと考えています。
0x7C00 に戻ることは明らかに機能しません。カーネルがロードされるまでに、CPU はすでに保護モードになっており、0x7C00 はリアル モード ブート セクターのエントリ ポイントだからです。では、ステージ 1 によってロードされた GRUB2 ステージ 2 ブートローダーはどこにあるのでしょうか? 私のプログラムが消去されないと仮定すると、それは消去されますか? また、ブートローダーにジャンプするだけで他に問題はありますか?
リアル モードに切り替えたり、マシンを再起動したりせずに、これを実行したいと考えています。