基于kgdb调试uos-1060-6026
基于kgdb调试uos-1060-6026
- cpu架构:amd64
基于virt-manager搭建调试环境
基于virt-manager可以模拟串口,加快调试环境的搭建,本次宿主机提供的串口设备为/dev/pts/2,x86虚拟机内一般为/dev/ttyS0。
在宿主机上安装minicom、虚拟机上安装cutecom可以测试串口设备通不通。
1 | |
1 | |
如果使用的是真实串口设备,宿主机串口设备设别一般为/dev/ttyUSB0,x86被调试机串口设备一般为/dev/ttyS0,arm被调试机串口设备一般为/dev/ttyAMA0。
具体串口请使用minicom、cutecom测试确认。
被调试设备引导参数
1 | |
1 | |
如果想在内核引导阶段调试,在上图红框中增加kgdbwait参数即可。
1 | |
1 | |
1 | |
不想修改引导参数
echo "ttyS0,115200" > /sys/module/kgdboc/parameters/kgdboc
这种方式最简单,可以不重启机器调试内核。
被调试设备陷入kgdb
1 | |
注意,每次打断点前都要先执行上述命令。
宿主机gdb vmlinux
进入内核源码目录后使用gdb vmlinux命令进入gdb:
1 | |
执行完上述命令后即可通过串口设备连接被调试设备。
打断点
宿主机上执行
内核编译选项CONFIG_GDB_SCRIPTS = y会在内核源码根目录下生成vmlinux-gdb.py软链接,指向编译内核源码机器的scripts/gdb/vmlinux-gdb.py文件,由于我是在服务器上编译后拷贝到我本机的,需要先删除此链接,然后根据实际源文件新建,具体命令如下:
1 | |
使用kgdb提供的额外扩展命令lx-symbols可以加载内核ko模块调试符号,不然断点会显示no source file named ... pending。
1 | |
1 | |
1 | |
被调试机上执行
1 | |
段点命中
基于kgdb调试uos-1060-6026
https://realwujing.github.io/linux/debug/sysrq_trigger/基于kgdb调试uos-1060-6026/