gdbデバッグカーネルのプロセス全体

カーネルをコンパイルします

make i386_defconfig //32位架构
make menuconfig


カーネルハッキングをデバッグできます—>
コンパイル時チェックとコンパイラオプション—>
[]デバッグ情報
を使用してカーネルをコンパイルしますネットワーク
デバイスドライバへのブリッジを使用できます—>
ネットワークデバイスサポート—>
[M]ユニバーサルTUN / TAPデバイスドライバサポート

make -j16  //编译

コンパイルされたLinuxカーネルにカーネルイメージがあります
ここに画像の説明を挿入します

ビジーボックス

BusyBoxは、qemuによって開始されたカーネル内のユーザースペースとして実行できます。アイデアは、BusyBoxを小さなファイルシステム構造にパッケージ化し、cpioファイルにアーカイブして、システム起動用のinitramfsとして実行することです。これにより、Linuxを使用できるようになります。操作インターフェースとツールセット。
ダウンロードしてコンパイルする

wget https://busybox.net/downloads/busybox-1.27.2.tar.bz2
tar -xf busybox-1.27.2.tar.bz2
cd busybox-1.27.2
make menuconfig

ここに画像の説明を挿入します

make -j8
make install

結局、私たちは
ここに画像の説明を挿入します

ファイルシステムを作成する

カーネルとファイルシステムについては、他のブログを参照してください
。1
新しいフォルダーを作成し、ターミナルを開いて、新しいrootfsフォルダーを作成します
。qemu_rootfs.imgはファイル名、1gはディスクサイズです。必要に応じて変更します。
ext4ファイルシステムを作成し
、imgファイルをホストシステムにマウントします。

qemu-img create qemu_rootfs.img  1g
mkfs.ext4 qemu_rootfs.img    
sudo mount -o loop qemu_rootfs.img  rootfs

2.
initファイルを含む、マウントされたrootfsファイルに必要なファイルを作成します

cd rootfs
sudo mkdir proc sys dev etc etc/init.d
cd etc/init.d
vim rcS
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
/sbin/mdev -s
chmod u+x rcS
cd ../../..
sudo umount rootfs

3.busybox内のファイルをrootfsにコピーしてからマウントをキャンセルします

cp -a  _install/*  rootfs
umount rootfs

デバッグを開始します

カーネルイメージが配置されているフォルダを入力します
ここに画像の説明を挿入します

注文の実行

qemu-system-i386 -s -kernel bzImage -m 512M -hda qemu_rootfs.img -append "root=/dev/sda rootfstype=ext4 rw"

i386はqemuを起動し、カーネルを指定し、ファイルシステムを指定し、ルートを指定します。-
sは-gdb tcp :: 1234の省略形を意味し、ポート1234を監視し、イメージを開きません。

新しいターミナルを作成し、これを見つけます
ここに画像の説明を挿入します
ここに画像の説明を挿入します

ターゲットリモートtcp:localhost:1234
はデバッグに入ることができます

PS:qemu—ctrl + aを閉じてから、qemuインターフェースでxを押します

おすすめ

転載: blog.csdn.net/qq_42882717/article/details/114646469