init没有显示我想要的printk

我试图让我的模块显示一个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显示消息时,我通过调用sys_mycallmodule_init得到消息,但我无法向其中添加任何参数,并显示消息,但它不显示任何firstname或for myid


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

你想打印什么? 我了解current-> id,但没有其他人。


您没有指定日志级别,所以我怀疑它是在阈值以下被筛选出来的。 将KERN_WARNING放在格式字符串前,并确认它已打印。 没有日志级别的消息在您的.config文件的CONFIG_DEFAULT_MESSAGE_LOGLEVEL中解释。

链接地址: http://www.djcxy.com/p/78117.html

上一篇: init not showing the printk that I want it to

下一篇: Linux how to copy but not overwrite?