为简单设备驱动程序编译内核模块时出错

时间:2012-06-15 09:06:52

标签: c device-driver kernel-module

我有这样的功能:

void cleanup_module(void)
{
    /* 
     * Unregister the device 
     */
    if(unregister_chrdev(Major, DEVICE_NAME)<0) 
        printk(KERN_ALERT "Error in unregister_chrdev:\n");
}

和错误:

/home/student/kernel/hello.c: In function ‘cleanup_module’:
/home/student/kernel/hello.c:39:2: error: void value not ignored as it ought to be

这一行是if语句。你知道我做错了吗?

3 个答案:

答案 0 :(得分:3)

这意味着unregister_chrdev没有返回值(void),但您已将其放入if中。也就是说,您使用的void值应该被忽略。因此错误信息。

查看this question,询问返回值变为无效的原因。

答案 1 :(得分:2)

基于this unregister_chrdev()用于返回int,但其返回类型已更改为void,因为返回的值无意义。完全从发布的代码中删除if

unregister_chrdev(Major, DEVICE_NAME);

答案 2 :(得分:1)

该错误表示unregister_chrdev()函数是void类型函数,即它不返回任何内容。但是,您正在使用<运算符检查其返回值。