调试Linux Kernel 5.15.47及内核模块时遇gdb.error问题求助
解决GDB加载vmlinux时
hrtimer_resolution类型错误及kernel/module.c找不到问题 问题分析
你遇到的两个核心问题:
- GDB加载vmlinux时触发
hrtimer_resolution类型未知的错误,根源是内核自带的GDB脚本直接解析该全局变量时,GDB无法自动识别其类型 kernel/module.c实际存在但GDB提示找不到,是因为GDB未关联内核源码路径
解决方案
1. 修复hrtimer_resolution类型错误
直接修改内核GDB脚本,为变量添加强制类型转换:
- 打开内核编译目录下的
scripts/gdb/linux/constants.py文件 - 找到第10行的代码:
LX_hrtimer_resolution = gdb.parse_and_eval("hrtimer_resolution") - 修改为(
hrtimer_resolution在5.15内核中是unsigned long类型):LX_hrtimer_resolution = gdb.parse_and_eval("(unsigned long)hrtimer_resolution") - 保存文件后,重新在GDB中执行
file vmlinux加载符号
2. 解决kernel/module.c找不到问题
在GDB中手动指定内核源码根目录:
dir /home/administrator/Kernels/built/linux-5.15.47
执行完该命令后,再重新运行lx-symbols加载模块符号即可。
额外检查项
- 确保编译内核时开启了
CONFIG_DEBUG_INFO=y和CONFIG_DEBUG_INFO_DWARF4=y(或更高版本),否则符号信息不完整会导致类似问题 - 尽量使用GDB 9.0及以上版本,旧版本对DWARF格式的符号支持存在兼容性问题
内容的提问来源于stack exchange,提问作者PiranhaMonkey9953
相关产品推荐
相关产品推荐

