2012-05-31 101 views
0

的printk的,我试图让我的模块显示printk。我是新来的,所以我可能会有一些编程错误。这是我的模块的C文件:宏module_init不显示,我希望它

#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但我不能任何参数添加到它并显示该消息的消息的消息,但它并没有显示任何东西对于firstname或对于myid

+0

什么是'current'的类型?为什么不在'sys_mycall'中声明? “pantherid”同样的问题? –

+0

@EitanT我不知道整个'current-> id'如何工作 – randomizertech

+1

'current'指向某种结构,'id'是该结构中的一个字段。 'current-> id'指那个字段。你使用'current-> id'而不是'current.id',因为'current'是一个指针。在继续编码之前,您应该阅读[this](http://www.taranets.net/cgi/ts/1.37/ts.ws.pl?w=329;b=282)。 –

回答

1

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

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

+0

就像printk的说,这只是一个普通的问候消息说你的名字,目前的方法,其中该方法被从(电流 - > ID)调用,然后员工ID – randomizertech

+0

ID和名称可以是任何 – randomizertech

+1

好了,你可以在http://tldp.org/LDP/lkmpg/2.6/html/x323.html找到如何添加参数到模块。在定义它之后,你运行inmod myname =“name”myid = 2,它在本教程中写得很清楚。 – roni

0

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

相关问题