我正在尝试远程调试一个Linux的内核,我已经创建了一个虚拟机(使用VMware),并使用gdb从我的PC连接到它,一切正常。
问题是gdb无法加载vmlinux-gdb.py脚本。我尝试在gdb上使用source
命令添加它,得到以下错误:
Traceback (most recent call last):
File "~/workspace/kernels/default-kernel/scripts/gdb/vmlinux-gdb.py", line 28, in <module>
ImportError: No module named 'linux'
字符串
目录树:
drwxr-xr-x 2 iofek iofek 4096 Mar 22 19:59 linux
-rwxr-xr-x 1 iofek iofek 577 Mar 22 19:43 Makefile
-rwxrwxr-x 1 iofek iofek 0 Mar 22 19:43 modules.order
-rwxr-xr-x 1 iofek iofek 759 Mar 22 20:00 vmlinux-gdb.py
型
现在我不明白为什么模块找不到Linux目录。我已经更新了PYTHONPATH,并使用sys.path.append
添加了路径。另外,linux下的所有文件都有正确的权限。
有什么想法吗?
2条答案
按热度按时间a6b3iqyw1#
简短回答
不要使用. linux./scripts/gdb/vmlinux-gdb.py。使用vmlinux-gdb.py文件,该文件位于内核构建输出的根目录中,与vmlinux文件一起使用。
如果此文件不存在,则需要:
字符串
长教程
首先确保gdb-scripts将在内核构建期间创建:
型
然后找出你的内核构建是否使用了一个单独的构建输出文件夹,然后按照以下章节之一(xor)进行操作:
Either:就地构建,不使用构建二进制目录
如果你编译内核时.o和.ko文件混杂在源代码中(这是Ubuntu在wiki.ubuntu.com上推荐的方式),你可以cd到源代码根文件夹中,让我们假设你在文件夹~/gdbenv中构建,从那里启动gdb,然后加载应该是可以开箱即用的:
型
或者:当你构建内核的方式在单独的构建目录中输出二进制文件时
例如,在Yocto构建中,所有的二进制文件最终都在不同的文件夹中,而不是与源文件夹混合在一起。在这种环境中,您需要将所有内容都放在一个环境中(vmlinux,gdb-scripts和可选的内核源代码)。
型
bmvo0sr52#
对于最新的内核,您需要构建gdb脚本:
:make scripts_gdb
创建后,将在内核源代码的根目录下创建一个vmlinux-gdb.py的符号链接。然后:
:gdb vmlinux
:add-auto-load-safe-path根目录内核源
来源vmlinux-gdb.py