module_init没有显示我想要的printk

时间:2012-05-31 16:19:08

标签: c linux module terminal kernel

我正在尝试让我的模块显示为printk。我是新手,所以我可能会遇到一些编程错误。这是我的模块C文件:

#include <linux/linkage.h>
#include <linux/time.h>
#include <linux/module.h>

asmlinkage long sys_mycall(int myid, char* firstname)
{
    printk ("Hello, %s! \n sys_mycall called from process %d with  ID %d. \n",
        firstname, current->id, myid);

    return 0;
}

static int my_init(void)
{
    return 0;
}

static int my_exit(void)
{
    printk("Goodbye!");
    return 0;
}

module_init(sys_mycall);
module_exit(my_exit);

首先,我不知道箭头指针是如何工作的所以我通常会从printk中省略它,所以它完美地编译。如果有人可以给我一个关于如何理解它的链接,我会非常感激。

当我在终端中使用insmod插入广告然后使用dmesg显示消息时,module_init拨打sys_mycall我会收到消息,但我无法添加任何消息它的参数,它会显示消息,但不显示firstnamemyid的任何内容。

2 个答案:

答案 0 :(得分:1)

我认为模块init期望函数中没有参数的问题,它必须是void(你可以用不同的方式添加它们),所以基本上你的函数是用当前在栈中的垃圾来调用的,这可能是除了它可能为零,否则你的内核会崩溃。

你想要什么打印?我理解current-&gt; id,但没有其他的。

答案 1 :(得分:0)

您没有指定日志级别,因此我怀疑它被过滤掉低于阈值。将KERN_WARNING粘贴在格式字符串前面并验证它是否打印。没有日志级别的消息在.config文件的CONFIG_DEFAULT_MESSAGE_LOGLEVEL中解释。