QEMU+(K)GDBを使用したLinuxカーネルのデバッグ - いくつかの疑問と質問

QEMU+(K)GDBを使用したLinuxカーネルのデバッグ - いくつかの疑問と質問

QEMUを介してLinuxカーネル(v3.13)をデバッグしようとしています。使っていますこれこれそしてこれ参照。私のホストはLinux Mint Victoriaなので、v3.13(2014年頃)カーネルとrootfsをコンパイルするのはあまりにも多くの問題です。

だから私は次のようにUbuntu Trust Tahrを取得するためにDockerコンテナを使用しました。

mkdir docker
FROM ubuntu:14.04" > docker/Dockerfile
RUN apt-get update && apt-get install -y vim wget unzip bc git python rsync build-essential libncurses5-dev locales" >> docker/Dockerfile
docker build --tag "ubuntu-trusty" docker/

コンテナに入った後、buildrootを複製してタグをチェックアウトしました2014/08。それからbuildrootにカーネル(v3.13.5)を構築するように頼みました。これは私のビルドルートディレクトリです構成そしてカーネル構成オプション。

参考までに、私はrootfsをカーネルに統合することにしました。initramfsによる上記のようにここ。完了したら、アーカイブrootfs.cpiobzImage下にoutput/images。すべての操作が完了したら、次のようにqemuを呼び出します。

sudo qemu-system-x86_64 --enable-kvm -serial tcp::1234,server,nowait -m 512M -kernel ./bzImage -append "kgdbwait kgdboc=ttyS0,115200 nokaslr ip=dhcp" -net nic,model=virtio -device virtio-blk,drive=drive0 -drive file=./disk.img,format=raw,if=none,id=drive0

これにより、起動ログを表示する新しいウィンドウが開き、結果としてgettyプロセスが実行されてログインできるようになります。だからこれは私のクエリです

  1. QEMUに移動すると、-nographicログインプロンプトは表示されません。なぜ?
  2. -swhichを使用すると、-gdb tcp:1234gdbクライアントが正しく接続できないようです(使用時とカーネルの他の場所で中断されます-serial tcp::1234,server,nowait)。リモートGDB
  3. このようなext2イメージを作成しましたが、qemu-img create disk.img 10G && mkfs.ext2 -F disk.img起動中に接続/検出されるかどうかはわかりません。マシンの起動後に確認する方法は?

答え1

この問題について質問が多すぎます。 #2に答えます。

while-s-gdb tcp::1234は同等です。-serial tcp::1234,server,nowait何かをしているところです。全く違う

最初の2つのオプション(-sおよびそれに対応する項目-gdb tcp::1234)は有益です。ゲームデバッガ接続を受信します。

このオプションは-serial tcp::1234,server,nowait単にqemuに仮想マシンのシリアルポートをTCPソケットに接続するように指示します。それ自体はデバッグとは関係ありません。

しかし...

KGDBをサポートするようにカーネルを設定して設定したkgdboc=ttyS0,115200場合コアシリアルポートでgdb接続をリッスンします。

両方のメカニズムはカーネルのデバッグを可能にしますgdbが、最初のメカニズムはqemuのデバッグ機能を利用しますが、後者はカーネルでkgdbサポートを有効にする必要があります。

関連情報