1. 程式人生 > >error unknown field 'ioctl' specified in initializer

error unknown field 'ioctl' specified in initializer

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

在linux-2.6.36核心上載入編譯驅動時,出現

 error:unknown field 'ioctl' specified in initializer

原因是:在2.6.36核心上file_operations發生了重大的改變:

原先的

  int (*ioctl)(struct inode*, struct file*, unsigned int, unsigned long);

被改為了       

   long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
        long (*compat_ioctl) (struct file *, unsigned int, unsigned long);

因而在實際驅動中,我們需要將原先的寫的ioctl函式頭給改成下面的unlocked_ioctl,在file_operations結構體的填充中也是一樣。




error: unknown field 'ioctl' specified in initializer問題是由於2.6.36核心之後 去掉了原來的ioctl,新增兩個新的成員,所以會出錯

long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);

 long (*compat_ioctl) (struct file *, unsigned int, unsigned long);

 所以修改原始檔中file_operations內.ioctl 改為 .compat_ioctl 即可

OK,編譯通過,警告咱就忽略了


           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述

error: unknown field 'ioctl' specified in initializer問題是由於2.6.36核心之後 去掉了原來的ioctl,新增兩個新的成員,所以會出錯

long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);

 long (*compat_ioctl) (struct file *, unsigned int, unsigned long);

 所以修改原始檔中file_operations內.ioctl 改為 .compat_ioctl 即可

OK,編譯通過,警告咱就忽略了