我想调试我的内核模块。为此,我试图在调用我的do_one_initcall之前在kernel/module.c中的init_module中放置一个断点,但它正在显示
无法访问地址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请给我建议一下有什么问题。
发布于 2011-07-07 08:50:12
只有在插入模块时才会设置可加载内核模块在内存中的位置。当您在模块函数上设置断点时,gdb将查询模块文件(.ko)中的地址,这是错误的。您需要将模块的实际位置通知gdb。
您可以查阅这本书 (第4章,调试程序和相关工具部分)以获得更多信息,但下面是我为此设计的一个简短过程。
modpbrobe your_module_namegdb vmlinux。target remote /dev/ttyS0连接到machine1 (假设您的串口位于ttyS0)echo g > /proc/sysrq-trigger。机器会结冰可能还有其他问题阻止您设置断点,但这是要跨越的主要障碍。
https://stackoverflow.com/questions/6260927
复制相似问题