問題タブ [grub]
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.
linux - Grub2 で kgdb を構成するには?
PCIe HW デバイスでいくつかのレジスタを覗き見できるように、カーネル デバッグ セッションをセットアップする必要があります。Grub2 を使用する Ubuntu 12.04 を使用しています。私の /boot/config-3.5.0-23-generic ファイルに基づくと、カーネルは既に KGDB サポート付きでビルドされていますが、明らかに kgdb-over-ethernet サポート付きではありません。このため、カーネルを再構築中です。
それまでの間、Grub2 構成ファイルを変更して KGDB のエントリを追加する方法を見つけようとしています。これについて私が見つけることができた唯一のチュートリアルはすべて、これを行うための従来の Grub スタイルの構文を参照しています。
「kernel」コマンドが「linux」に置き換えられているように見えるため、Grub2 の構文は明らかに異なります。他にもさまざまな違いがあります。これにより、古い構文が「そのまま機能する」と期待することにはほとんど期待できません。
オンラインで Grub2 を使用して KGDB を構成するための手順を見つけることができませんでした。これを行う正しい方法は何ですか?Grub2 構文を使用してサンプルを提供できますか?
また、私は Linux でのカーネル デバッグに慣れていないので、おそらくこれについても正しい方法で行っていません。これに別の方法を使用する必要があるかどうかを教えてください。たとえば、イーサネットの既知の問題のために他の人がシリアルデバッグを使用している場合、またはその他の場合です。
ありがとう!
kernel - Grub 2 がカーネルでマルチブート ヘッダーを検出しない
Grub 2 (および QEMU の-kernel
) がカーネルで Multiboot v1 ヘッダーを検出しないという問題があります。の前に別のセクションにヘッダーがあり.text
ます。
linker.ld
:
boot.s
(構文としての GNU):
ヘッダー セクションがマジック ナンバーで指定されたとおりに追加されていることを確認しました。
それでも Grub 2 は、カーネルに有効なマルチブート ヘッダーがなく、QEMU の-kernel
オプションを使用すると次の原因になると述べています。
これは、マルチブートがあるべき場所ではなく、BIOS によってマップされた範囲内のアドレスのようです。
Bran と OSDev (および私の以前のカーネル) の通常のコードと比較しましたが、何が間違っているのかわかりません。
debian - Debian GRUB レスキュー - 「アーチに依存しない ELF マジックが無効です」
最近、Windows PC を Debian Wheezy でデュアルブートしました。インストールはエラーなく正常に完了しましたが、Debian を起動するとすぐに GRUB レスキューが表示されます。
コマンドを使用してさらに調べたところset
、間違ったパーティションから起動していることに気付きました。
(hd0,gpt4)
ここでは、Debian がインストールされている場所が であるときを指してい(hd0,gpt5)
ます。set
そこで、変数を本来あるべき状態に戻すために を使用して簡単な修正を行いました。
これを行った後、OSを起動して実行するために覚えていることだけを行いました。
これは、エラーが発生したときに問題が発生し始める場所です。
次に、この問題について調査したところ、ライブ CD から GRUB を再インストールするのが一般的な解決策のようでした。そこで、Debian のライブ CD を起動して、次のコマンドを実行しました。
エラーが表示される場所:
このファイルが存在し、編集可能であることは保証できますが、
では、何が問題になるのでしょうか?
assembly - 基本的なカーネルで GDT を実装する
私は最近、カーネル開発に夢中になり、OSDev Wiki の基本的なチュートリアルから始めました。Hello World の例を実装した後、次に進み、Global Descriptor Table の作成を試みました。オンラインのさまざまなソースから、GDT のコードをつなぎ合わせましたが、最終的には失敗しました。これの私の実装に何か問題がありますか?それがすぐに明らかにならない場合、より多くの情報を提供できるソースはありますか?
つまり、GDT を使用したカーネルの次の実装は、GRUB を使用したロードに失敗します。gcc
andでコンパイルしていas
ます。必要なその他の情報を提供できます。
ブーツ
カーネル.c
gdt.c
assembly - マルチブート ヘッダーがブート ファイルで機能しない
grub (レガシー) 仕様を使用してマルチブート カーネルに準拠したものを作成しようとしています。これが私の boot.s の内容です (gnu as で作成)
boot.h ファイルには、grub の定義が含まれています。
また、リンカーを次のように設定しました。
今のところ、kernel_main は %eax レジスタで期待している値 0x01 を返すだけですが、カーネルを次のように実行すると、次のようになります。
info registers
qemu でコマンドを発行すると、 %eax の値は常に 18 になります。私の質問は次のとおりです。私の boot.s ファイルは grub に準拠するように正しく定義されていますか? また、%eax の値が 0x01 ではなく 18 である理由は何ですか?