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.cpio
とbzImage
下に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プロセスが実行されてログインできるようになります。だからこれは私のクエリです
- QEMUに移動すると、
-nographic
ログインプロンプトは表示されません。なぜ? -s
whichを使用すると、-gdb tcp:1234
gdbクライアントが正しく接続できないようです(使用時とカーネルの他の場所で中断されます-serial tcp::1234,server,nowait
)。リモートGDB- このような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サポートを有効にする必要があります。