“错误:初始化程序中指定的未知字段'compat_ioctl',同时创建虚拟ioctl

时间:2014-01-19 14:39:42

标签: linux linux-kernel kernel kernel-module ioctl

static const struct inode_operations msdos_dir_inode_operations = {

.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,但发生了同样的错误

[root @ localhost fat] #make

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

make [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:错误:初始化程序中指定的未知字段'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]:* [ module /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 个答案:

答案 0 :(得分:1)

ioctl已被更改是有原因的,如果您也遵循驱动程序中的内核更改,那将是最好的。您不能使用为另一个版本编译的驱动程序。 这种变化并不太难。

在fops结构中更改

ioctlunlocked_ioctl

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

有关详细信息,请参阅this tutorial