error: ‘const struct file_operations’ has no member named ‘ioctl’
在 file_operations 这个文件操作结构体中没有 ioctl 成员。
原因:这个内核版本中确实没有这个成员。
在内核更新中, ioctl 这个成员被移除了。
解决方法:
- 在注册文件操作方法的结构体struct file_operations的时候原先的.ioctl=OOXX;替换为 .unlocked_ioctl=OOXX;
- 但是要注意ioctl和unlocked_ioctl的定义有一点不同:unlocked_ioctl少了一个inode参数。但是如果方法中真的需要其中的数据,可以通过filp->f_dentry->d_inode获得。
- 由于失去了大内核锁的保护,所以必须在unlocked_ioctl方法中自行实现锁机制,以保证不会在操作设备的时候(特别在SMP系统中)产生竞态。(也就实现了用小锁替换大锁)
其中,第二点的具体操作,就是把函数声明中的第一个参数直接删掉。(如果函数体中用到了这个参数,自行修改对应代码)