- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想调试我的内核模块。为此,我试图在 init_module
获取之前在 kernel
/module.c
中的 do_one_initcall
处放置一个断点已调用但正在显示
Cannot access memory at address 0x802010a0
下面是我正在使用的Makefile
:
obj-m := hello.o
KDIR=/lib/modules/$(shell uname -r)/build
PWD=$(shell pwd)
EXTRA_CFLAGS += -g
all:
make -C $(KDIR) M=$(PWD) modules
clean:
make -C $(KDIR) M=$(PWD) clean
请告诉我可能存在什么问题。
最佳答案
可加载内核模块在内存中的位置仅在插入模块时设置。当您在模块函数上设置断点时,gdb 会查阅模块文件 (.ko) 来获取地址,这是错误的。您需要告知 gdb 该模块的实际位置。
您可以咨询this book (第 4 章,调试器和相关工具部分)了解更多信息,但这里有一个我为此设计的简短过程。
machine2 是运行调试器的计算机。
modpbrobe your_module_name
MODULE_NAME=your_module_name
MODULE_FILE=$(modinfo $MODULE_NAME| awk '/filename/{print $2}')
DIR="/sys/module/${MODULE_NAME}/sections/"
echo add-symbol-file $MODULE_FILE $(cat "$DIR/.text") -s .bss $(cat "$DIR/.bss") -s .data $(cat "$DIR/.data")
您应该得到类似于以下内容的输出:add-symbol-file /lib/modules/.../your_module_name.ko 0xffffffffa0110000 -s .bss 0xffffffffa011b948 -s .data 0xffffffffa011b6a0
gdb vmlinux
。target remote/dev/ttyS0
连接到 machine1(假设您的串行端口位于 ttyS0)echo g >/proc/sysrq-trigger
。机器会死机关于debugging - 通过KGDB进行模块调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6260927/
我正在尝试调试 Linux 内核,特别是蓝牙内核模块。我想单步执行 net/bluetooth/l2cap_core.c 中的代码 主机:linux mint 18.3(在虚拟机中运行)。 目标机器:
在谷歌搜索和阅读后,我已经通过串行线路设置了 kgdb,我可以进入调试器(通过/proc/sysrq-trigger 停止内核)并从主机 gdb 连接,它是 ARM 工具链的一部分。 基本上我有运行嵌
我使用两个虚拟机进行 kgdb 设置,两个虚拟机都具有 CentOs 6.4(实际上 kgdb 主机是目标的克隆)。我能够成功连接到远程目标并开始调试。我想调试 RAID 驱动程序,特别是 raid4
我正在尝试让内核调试在引导期间工作。我已经按照所有步骤安装它 ( how to use kgdb over ethernet(kgdboe)? ) 并且在加载后 insmod 时可以正常连接,但是如果
我正在尝试为我的 Nexus One 进行内核调试,并且一直在按照 http://bootloader.wikidot.com/android:kgdb 的说明进行操作.我想知道是否有人真的让这个工作
我使用的是ubuntu 12.04,内核版本是3.12.6,想学习如何使用kgdb调试内核。我没有得到太多信息。关于 kgdboe(以太网上的 kgdb)。我编译了内核并在 menuconfig 中启
我使用 ARMv7 作为目标机器。我已经为目标编译了 Linux 源代码 2.6.34.13。 Target使用minicom通过串口与Host(Linux开发机)连接。 目标 加载了新内核,并且在命
我正在使用 kgdb 调试内核。 我正在使用 qemu 2.11.0 和 ubuntu 16.04.3 服务器版本 guest 。 我安装了内核 4.16.0-rc6(主线)并使用带有 kgdb 选项
我在主机和目标之间的串行和 USB 连接方面遇到问题。下面是我的设置。主机和目标都没有任何串行 (DB9) 端口。 主机:运行 windows + VMshare + Ubuntu 目标:运行 lin
我已经在启用以下内核选项的情况下编译了我的内核。这应该足够了。 CONFIG_KGDB=y CONFIG_KGDB_SERIAL_CONSOLE=y CONFIG_DEBUG_INFO=y 我想在内核
我想通过串行 ttyS0 从我的 64 位 suse 机器调试 MIPS linux 驱动程序。使用过的 gdb 在 LAN 上可以很好地调试应用程序,但不能与 kgdb over serial 一起
为什么kgdb总是从kernel/kgdb.c:1749行“kgdb:waiting dor Connection from Remote gdb”开始,只是走上了Linux内核的路。 我想从头开始。
我正在通过GDB + KGDB + 两个虚拟机+串口调试Linux内核。 如果我们使用GDB来调试一个普通的程序,我们只需按Ctrl+C就可以中断程序的执行。 但是,当我将 GDB 连接到远程 KGD
我要设置 kgdb 来调试 Ubuntu debian 内核。 默认情况下,make-kpkg编译的内核已经过优化(-O2),所以我无法调试变量。 有没有办法禁用内核编译优化(例如,-O0)? 谢谢!
我已经能够使用以下方式调用 qemu (v1.7.0) 来启动基于 powerpc 的系统(具体来说是 MPC8544DS) qemu-system-ppc -M mpc8544ds -m 512 -
我正在尝试通过 kgdb 查看文件名,因此我无法调用函数和宏来以编程方式获取它。我需要通过手动检查数据结构来找到它。 就像我在 gdb 中有一个断点一样,我怎么能用 gdb 环顾四周并找到文件名? 我
我是一名优秀的程序员,十分优秀!