qemu+gdb调试Linux内核

Qemu+gdb调试Linux内核

qemu+gdb调试Linux内核

前言

调试Linux内核可以使用VM双机调试,不过使用qemu来调试会更加方便。

环境搭建

编译源码

首先到Linux FTP仓库或者官网下载对应版本的源码。

这里下载的是linux-4.10.10

解压tar -xvJf linux-4.10.10.tar.xz

安装依赖

1
2
sudo apt install build-essential ncurses-dev xz-utils libssl-dev bc fakeroot aptitude libncurses5-dev
sudo apt install qemu

编译内核

1
    make menuconfig

img

进行配置:KernelHacking —> Compile-time checks and compiler options选中

1
Compile the kernel with debug info
1
Compile the kernel with frame pointers
1
Provide GDB scripts for kernel debugging
1
Processor type and features→去掉Paravirtualized guest support

保存退出。

命令make -jN 进行编译

之后make all

1
make modules

编译完成之后,vmlinux在源码根目录、bzImage./arch/x86/boot/

构建initramfs根文件系统

借助BusyBox构建极简initramfs,busybox最新版下载地址

编译静态版Busybox

1
make menuconfig

img

设置以下选项:

Settings -> Build Options -> Build static binary (no shared libs) 编译成静态文件

开始编译:

1
make -jNmake install

等待编译完成源码目录下出现_install目录,进行配置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
cd _install

    mkdir proc sys dev etc etc/init.d

    vim etc/init.d/rcS

    \# 文件中的内容如下

    \# #!/bin/sh

    \# mount -t proc none /proc

    \# mount -t sysfs none /sys

    \# /sbin/mdev -s

    chmod +x etc/init.d/rcS

创建文件系统

1
find . | cpio -o --format=newc > ../rootfs.img

运行内核

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
qemu-system-x86_64 \

    -kernel ~/linux-4.10.10/arch/x86_64/boot/bzImage \

    -initrd ~/busybox-1.31.0/rootfs.img \

    -append "console=ttyS0 root=/dev/ram rdinit=/sbin/init" \

    -cpu kvm64,+smep,+smap \

    -nographic \

    -gdb tcp::1234
  • cpu kvm64,+smep,+smap 设置CPU的安全选项,这里开启了smap和smep

  • kernel 设置内核bzImage文件的路径

  • initrd 设置刚才利用busybox创建的rootfs.img,作为内核启动的文件系统

  • gdb tcp::1234 设置gdb的调试端口为1234 在GDB中通过 target remote localhist:1234进行连接

驱动

insmod 加载驱动

rmmod 卸载驱动

lsmod 查看加载了的驱动

调试测试

qemu启动,启动后的界面

img

启动GDB

img

img

使用内核提供的GDB辅助调试功能:(gdb)apropos lx

调试内核模块:add-symbol-file 添加模块文件

断点测试 b cmdline_proc_show

cat /proc/cmdline 触发断点

引用

Licensed under CC BY-NC-SA 4.0
最后更新于 2023-08-17 17:21 UTC
(*╹▽╹*)
Built with Hugo
主题 StackJimmy 设计