相关疑难解决方法(0)

为什么Linux内核的pr_debug没有提供任何输出?

我有一个可加载的内核模块,它的init如下所示

static int __init id_init(void)
{
    struct identity *temp;

    /* some code which is not relevant to the question */

    temp = identity_find(3);
    pr_debug("id 3 = %s\n", temp->name);

    temp = identity_find(42);
    if (temp == NULL)
        pr_debug("id 42 not found\n");

    /* some code which is not relevant to the question */

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我也在我正在使用的内核版本上启用了动态调试 - 即CONFIG_DYNAMIC_DEBUG=y.

而在模块的Makefile文件我已经添加了一行CFLAGS_[id].o := -DDEBUG这里id.c是文件名.

现在我检查/sys/kernel/debug/dynamic_debug/control了这个模块的insmod之后,我在其中找到了下面的行

/home/pauldc/Programming/Kernel/id/id.c:69 [id]id_init =_ "id 42 not found\012"
/home/pauldc/Programming/Kernel/id/id.c:65 [id]id_init =_ "id 3 …
Run Code Online (Sandbox Code Playgroud)

linux debugging linux-kernel

13
推荐指数
2
解决办法
1万
查看次数

查找可加载内核模块的内核地址

我正在尝试找到内核地址空间,我的可加载内核模块由insmod重新定位.

我开始知道通过在修改模块时使用-m,-O开关,我们只能从模块的视点看到符号表和可执行文件的部分地址,而不是它们的重定位地址,因为我们做insmod时进行搬迁过程.

任何人都可以告诉如何在内核内存中找到模块的重定位地址,即加载模块所在的内核中绑定的地址?

谢谢!

PS请注意我使用的是Redhat 2.4 Linux内核,其中/ proc/modules列表没有显示已加载模块的虚拟地址.

linux kernel kernel-module linux-kernel embedded-linux

7
推荐指数
2
解决办法
8038
查看次数