我正在尝试调试LinuxKernel5.15.47和我正在构建的内核模块。我正在使用gdb,不幸的是,每次我在gdb中加载vmlinux文件以准备使用qemu进行远程调试时,都会出现以下错误。注意,我也尝试在qemu上使用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文件确实存在,它正在抱怨这个文件。
发布于 2022-09-20 22:25:04
解决了。
发现了我的问题。通常,gdb应该能够使用在使用以下标志时生成的两个单独的dwo文件。但是,在我的例子中,它似乎只是没有使用我所拥有的gdb版本,或者我可能需要在gdb中执行一个命令。我有正确版本的gdb (任意版本的>=7.2) gcc version 11.2.0 (Ubuntu 11.2.0-19ubuntu1)。
CONFIG_DEBUG_INFO_SPLIT将内核和内核模块的调试信息拆分到单独的.dwo文件中。这大大减少了安装在设备或VM上的内核映像和内核模块的大小,我们将进行调试。请注意,此选项需要一个大于或等于4.7版本的gcc版本,因为它向编译器标志中添加了选项-gsplit侏儒。
在您的n文件中将此值设置为.config,然后重新构建内核修复了我遇到的问题。
https://stackoverflow.com/questions/73778746
复制相似问题