2012-06-15 1 views
1

У меня есть такая функция:Ошибка компиляции модуля ядра для драйвера устройства простой

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 

Эта линия является один с, если заявление. Вы знаете, что я делаю неправильно?

ответ

3

Это означает, что unregister_chrdev не имеет возвращаемого значения (это void), но вы поставили его в случае. То есть вы используете значение void, которое должно было быть проигнорировано. Отсюда сообщение об ошибке.

Отъезд this question, который спрашивает, почему возвращаемое значение было изменено на пустое.

2

На основе thisunregister_chrdev() используется для возвращения int но его типа возврата был изменен на void, как возвращаемое значение не имеет смысла. Удалите if полностью из отправленного кода:

unregister_chrdev(Major, DEVICE_NAME); 
1

Ошибка указывает, что функция unregister_chrdev() является функцией типа void, то есть ничего не возвращает. Однако вы проверяете его возвращаемое значение с помощью оператора <.