之前在Centos8操作系统中,通过kgdb调试内核遇到无法执行断点及kdb-22:Permisson denied的问题。接下来,通过本篇文章讲述修改的配置参数。
章节预览:
1. 选择内核配置内核参数
2. 配置内核参数
2.1 配置kgdb基本调试参数
2.2 检查或手动配置参数
3. kgdb相关所需配置参数
4. 后续内容
章节内容:
1. 选择内核配置内核参数
在linux相关系统中调试内核本是一件简单的事情,但某个参数未配置或配置不正确可能会遇到一些小问题:比如无法通过串口连接到目标机器,无法调试目标内核代码等等。
首先,我们先从选择内核版本开始入手,通过 uname -r 查看内核版本:
参考图1,内核版本为4.18.0-240.10.1,可以下载4.18.0-240.10.1或4.18.xx的版本使用。
2. 配置内核参数
首先把内核压缩包拷贝到/usr/src(ubuntu系统) 或 /usr/src/kernels(Centos相关系统)下解压并进入目录,接着配置内核参数。
输入 make menuconfig(根据提示逐一安装所需库即可):
2.1 配置kgdb基本调试参数
首先,按 / 出现搜索窗口:
参考图3,在搜索窗口中输入CONFIG_KGDB:
参考图4,输入回车键:
参考图5,我们可以看到(1)、(2)…下是 CONFIG_KGDB 对应的所有可设置的参数选项,我们按数字1进入:
参考图6,按回车键继续进入:
参考图7,CONFIG_KGDB这样设置即可,然后按右移键到 Save选项,再按回车键:
参考图8,选择ok保存配置,然后一直Esc键退出内核参数配置界面。
2.2 检查或手动配置参数
使用vi .config 或 vim .config打开配置文件(根目录):
参考图9,在我们不确定是否已经正确配置文件时,可以检查或手动设置参数。
3. kgdb相关所需配置参数
现在我们已经知道配置和检查参数的方式,接下来了解所需配置参数有哪些:
CONFIG_KGDB=y
CONFIG_KGDB_SERIAL_CONSOLE=y
CONFIG_KGDB_KDB=y
CONFIG_KDB_KEYBOARD=y
CONFIG_DEBUG_INFO=y
易忽略的配置(可以在检查配置文件时配置):
CONFIG_KDB_DEFAULT_ENABLE=0x1 # kdb -22:Permisson denied
CONFIG_RANDOMIZE_BASE=y # 无法调试断点
4. 后续内容
经过上述步骤后,剩下的部分简单介绍一下:
① 编译及安装内核比较简单,参考一下以前写的文章,ubuntu编译内核方式;
② ubuntu系统在/boot/grub/grub.cfg内增加 kgdboc=ttyS1,102400 kgdbwait ,Centos8在/boot/loader/entries/xxxx-内核版本.conf内增加 kgdboc=ttyS1,102400 kgdbwait ;
③ 远端调试机中的内核源码应放置在与目标机器对应的位置,并把目标机器源码中的vmlinux拷贝至远端调试机中的内核源码中对应的位置;
④ 在vmware中启动目标机器(kgdb调试的机器)时,可以通过添加串行端口与远端调试机通讯。