我正在调试Linux Kernel 5.15.47和我正在构建的一个内核模块。我正在使用gdb,不幸的是,每次我在gdb中加载vmlinux文件以准备使用qemu进行远程调试时,都会出现以下错误。注意,我也尝试在qemu VM上使用GDB(因此没有远程调试),但错误仍然发生在那里。
我没有看到太多的讨论围绕类似的东西,所以我想我会问,如果有人有一个工作周围?
(gdb) file vmlinux
Reading symbols from vmlinux...
Traceback (most recent call last):
File "/home/administrator/Kernels/built/linux-5.15.47/vmlinux-gdb.py", line 34, in <module>
import linux.proc
File "/home/administrator/Kernels/built/linux-5.15.47/scripts/gdb/linux/proc.py", line 15, in <module>
from linux import constants
File "/home/administrator/Kernels/built/linux-5.15.47/scripts/gdb/linux/constants.py", line 10, in <module>
LX_hrtimer_resolution = gdb.parse_and_eval("hrtimer_resolution")
gdb.error: 'hrtimer_resolution' has unknown type; cast it to its declared type
(gdb) lx-symbols /home/administrator/<module>/src
loading vmlinux
Traceback (most recent call last):
File "/home/administrator/Kernels/built/linux-5.15.47/vmlinux-gdb.py", line 34, in <module>
import linux.proc
File "/home/administrator/Kernels/built/linux-5.15.47/scripts/gdb/linux/proc.py", line 15, in <module>
from linux import constants
File "/home/administrator/Kernels/built/linux-5.15.47/scripts/gdb/linux/constants.py", line 10, in <module>
LX_hrtimer_resolution = gdb.parse_and_eval("hrtimer_resolution")
gdb.error: 'hrtimer_resolution' has unknown type; cast it to its declared type
No source file named kernel/module.c.
kernel/module.c
文件确实存在,它正在抱怨。
1条答案
按热度按时间yks3o0rb1#
解决了。
发现了我的问题。通常gdb应该能够使用两个单独的dwo文件,当你使用下面的标志时,会生成这些文件。但是,在我的例子中,它似乎只是不能与我的gdb版本一起工作,或者可能是我需要在gdb内部执行一个命令。我有正确的gdb版本(任何版本〉=7.2)
gcc version 11.2.0 (Ubuntu 11.2.0-19ubuntu1)
。CONFIG_DEBUG_INFO_SPLIT将内核和内核模块的调试信息拆分到单独的.dwo文件中。这将显著减小安装在要调试的设备或VM上的内核映像和内核模块的大小。请注意,此选项要求gcc版本高于或等于4.7版,因为它将选项-gsplit-dwarf添加到编译器标志中。
在您的
.config
文件中将此值设置为n
,然后重新构建内核修复了我遇到的问题。