基于kgdb调试uos-1060-6026

本文最后更新于:2023年7月12日 下午

基于kgdb调试uos-1060-6026

  • cpu架构:amd64

基于virt-manager搭建调试环境

串口设备

基于virt-manager可以模拟串口,加快调试环境的搭建,本次宿主机提供的串口设备为/dev/pts/2,x86虚拟机内一般为/dev/ttyS0

在宿主机上安装minicom、虚拟机上安装cutecom可以测试串口设备通不通。

1
2
sudo apt install minicom
sudo minicom -s
1
2
sudo apt install cutecom
sudo cutecom

如果使用的是真实串口设备,宿主机串口设备设别一般为/dev/ttyUSB0,x86被调试机串口设备一般为/dev/ttyS0,arm被调试机串口设备一般为/dev/ttyAMA0

具体串口请使用minicomcutecom测试确认。

被调试设备引导参数

1
cat /etc/default/grub
1
2
3
4
5
6
7
8
9
# Generated by deepin-installer
GRUB_BACKGROUND="/boot/grub/themes/deepin-fallback/background.jpg"
GRUB_CMDLINE_LINUX_DEFAULT="video=efifb:nobgrt splash quiet kgdboc=ttyS0,115200 nokaslr"
GRUB_DEFAULT=0
GRUB_DISTRIBUTOR="`/usr/bin/lsb_release -d -s 2>/dev/null || echo UOS 20`"
GRUB_THEME="/boot/grub/themes/deepin-fallback/theme.txt"
GRUB_TIMEOUT=1
GRUB_GFXMODE=1024x768
DEEPIN_GFXMODE_DETECT=1
kgdb启动参数

如果想在内核引导阶段调试,在上图红框中增加kgdbwait参数即可。

1
update-grub
1
cat /proc/cmdline
1
BOOT_IMAGE=/boot/vmlinuz-4.19.0-amd64-desktop root=UUID=586655c5-5cd3-421c-a1b5-e1b1b2b9e545 ro video=efifb:nobgrt splash quiet kgdboc=ttyS0,115200 nokaslr DEEPIN_GFXMODE= ima_appraise=off libahci.ignore_sss=1

不想修改引导参数

echo "ttyS0,115200" > /sys/module/kgdboc/parameters/kgdboc

这种方式最简单,可以不重启机器调试内核。

被调试设备陷入kgdb

1
echo g > /proc/sysrq-trigger

注意,每次打断点前都要先执行上述命令。

宿主机gdb vmlinux

进入内核源码目录后使用gdb vmlinux命令进入gdb:

1
2
3
4
add-auto-load-safe-path .
source ./vmlinux-gdb.py
set serial baud 115200
target remote /dev/pts/2

执行完上述命令后即可通过串口设备连接被调试设备。

gdb串口

打断点

宿主机上执行

内核编译选项CONFIG_GDB_SCRIPTS = y会在内核源码根目录下生成vmlinux-gdb.py软链接,指向编译内核源码机器的scripts/gdb/vmlinux-gdb.py文件,由于我是在服务器上编译后拷贝到我本机的,需要先删除此链接,然后根据实际源文件新建,具体命令如下:

1
2
rm -rf vmlinux-gdb.py
ln -s /home/wujing/code/qemu/amd64/uos/1060/6064/x86-kernel/scripts/gdb/vmlinux-gdb.py vmlinux-gdb.py

使用kgdb提供的额外扩展命令lx-symbols可以加载内核ko模块调试符号,不然断点会显示no source file named ... pending

1
lx-symbols
1
b sound/core/pcm_native.c:2511
1
c

被调试机上执行

1
aplay bensound-sunny.mp3

段点命中

aplay bensound-sunny.mp3
b sound/core/pcm_native.c:2511

基于kgdb调试uos-1060-6026
https://realwujing.github.io/linux/kernel/sysrq_trigger/基于kgdb调试uos-1060-6026/
作者
Wu Jing
发布于
2023年7月11日
许可协议