首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >内核调试- vmlinux-gdb.py无法在gdb上运行

内核调试- vmlinux-gdb.py无法在gdb上运行
EN

Stack Overflow用户
提问于 2020-03-23 02:10:28
回答 2查看 1.5K关注 0票数 1

我正在尝试远程调试Linux的内核。我已经创建了一个VM (使用VMware),并使用gdb从我的PC连接到它,一切正常。

问题是gdb无法加载vmlinux-gdb.py脚本。我尝试使用

命令,得到以下错误:

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File "~/workspace/kernels/default-kernel/scripts/gdb/vmlinux-gdb.py", line 28, in 
ImportError: No module named 'linux'

目录树:

代码语言:javascript
运行
复制
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,并使用以下命令添加了路径

..。此外,linux下的所有文件都具有正确的权限。

有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2020-04-17 21:30:33

简短回答

切勿使用...linux.../scripts/gdb/ vmlinux-gdb.py。请使用内核构建输出根目录中的文件vmlinux -gdb.py以及vmlinux文件。

如果该文件不存在,您需要:

代码语言:javascript
运行
复制
Activate CONFIG_GDB_SCRIPTS in your kernel configuration

长教程

首先,确保在内核构建期间创建gdb-scripts:

代码语言:javascript
运行
复制
make menuconfig
Enable CONFIG_GDB_SCRIPTS
make

然后找出您的内核构建是否使用了单独的构建输出文件夹,然后遵循以下章节之一(xor):

任一:在没有构建二进制目录的情况下就地构建

如果你在编译你的内核时,.o和.ko文件在源代码中乱七八糟的(例如,这就是Ubuntu推荐的方式

wiki.ubuntu.com

)您可以cd到源根文件夹,例如,假设您在~/gdbenv文件夹中构建,从那里启动gdb,然后加载应该是开箱即用的:

代码语言:javascript
运行
复制
cd ~/gdbenv
gdb ./vmlinux
(gdb) add-auto-load-safe-path ~/gdbenv
(gdb) source ~/gdbenv/vmlinux-gdb.py

或者:当构建内核的方式在单独的构建目录中输出二进制文件时

这是在Yocto构建中完成的,其中所有二进制文件最终都在不同的文件夹中,而不是与源文件夹混合。在这样的环境中,您需要在一个环境(vmlinux、gdb脚本和可选的内核源代码)中获取所有内容。

代码语言:javascript
运行
复制
tar -xf ~/Downloads/linux-blabla.tgz -C ~/gdbenv       (optional)
cp .../build/vmlinux-gdb.py ~/gdbenv
mkdir ~/gdbenv/scripts
cp -r .../build/scripts/gdb ~/gdbenv/scripts
cp .../build/vmlinux ~/gdbenv

Then procede like in the preceeding chapter (cd ~/gdbenv, gdb ./vmlinux ...)
票数 1
EN

Stack Overflow用户

发布于 2021-02-26 17:33:26

对于最新的内核,您需要构建gdb脚本:

编写脚本

_

地理数据库

完成后,将在内核源代码的根目录下创建vmlinux-gdb.py的符号链接。然后:

:gdb vmlinux

:add-auto-load-safe-path root-of-kernel-source vmlinux-gdb.py

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60803129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档