“错误:未知字段‘compat_ioctl’初始值设定”,同时创造虚设的ioctl

问题描述:

静态常量结构体struct inode_operations msdos_dir_inode_operations = {“错误:未知字段‘compat_ioctl’初始值设定”,同时创造虚设的ioctl

.create  = msdos_create, 
.lookup  = msdos_lookup, 
.unlink  = msdos_unlink, 
.mkdir  = msdos_mkdir, 
.rmdir  = msdos_rmdir, 
.rename  = msdos_rename, 
.setattr = fat_setattr, 
.getattr = fat_getattr, 
.compat_ioctl = my_ioctl, ---->error 

};

我也试图与unlocked_ioctl但相同出错

[根@本地脂肪]#使

使-C /lib/modules/3.11.10-100.fc18.x86_64/build M = /home/aditya/linux-3.12.6/fs/fat模块

化妆[1]:进入目录`/usr/src/kernels/3.11.10-100.fc18.x86_64' CC [M]/home/aditya/linux-3.12.6/fs/fat/namei_msdos.o

/home/aditya/linux-3.12.6/fs/fat/namei_msdos.c:646:2:er ROR:未知字段“compat_ioctl”初始值设定

/home/aditya/linux-3.12.6/fs/fat/namei_msdos.c:646:2:警告:[默认启用]从不相容的指针类型初始化 /home/aditya/linux-3.12.6/fs/fat/namei_msdos.c:646:2:警告:(接近'msdos_dir_inode_operations.setxattr'的初始化)[默认启用] make [2]:* [/ home/aditya/linux-3.12.6/fs/fat/namei_msdos.o]错误1 make [1]:* [模块 /home/aditya/linux-3.12.6/fs/fat]错误2 make [1]:离开目录`/usr/src/kernels/3.11.10-100.fc18.x86_64' make:* [all]错误2

+1

据我所看到的,['结构inode_operations'](http://lxr.free-electrons.com/source/include/linux/fs.h?v= 3.12#L1557)在3.12中没有'* _ioctl'字段。这些回调来自'struct file_operations',你打算使用它吗? – Eugene

+0

是的,但我已经修改fs.h并添加了 int(* unlocked_ioctl)(struct file *,unsigned int,unsigned long); } in struct inode_operations ... 然后它也显示相同的错误 – user3172621

+0

嘿请帮忙先前的评论 – user3172621

由于某个原因,ioctl已被更改,如果您也在驱动程序中更改内核更改,则最好。您不能在另一个版本中使用编译的驱动程序。 变化不是太难。

在FOPS结构变化

ioctlunlocked_ioctl

,并在驱动程序中的ioctl函数,不传递inode指针。就是这样,剩下的代码可以保持不变。

看到this tutorial更多细节