错误: 初始值设定项里有未知的字段‘ioctl’

长平狐 发布于 2013/06/03 14:53
阅读 148
收藏 0
这个错误网上搜索发现3.0.0.15版本内核 file_operation结构体已经删除了ioctl函数,取代的是:
long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
long (*compat_ioctl) (struct file *, unsigned int, unsigned long);

file_operation结构体在 /usr/src/linux-3.0.0.15/include/linux/fs.h定义。

1546 struct file_operations {
1547         struct module *owner;
1548         loff_t (*llseek) (struct file *, loff_t, int);
1549         ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
1550         ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
1551         ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
1552         ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
1553         int (*readdir) (struct file *, void *, filldir_t);
1554         unsigned int (*poll) (struct file *, struct poll_table_struct *);
1555         long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
1556         long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
1557         int (*mmap) (struct file *, struct vm_area_struct *);
1558         int (*open) (struct inode *, struct file *);
1559         int (*flush) (struct file *, fl_owner_t id);
1560         int (*release) (struct inode *, struct file *);
1561         int (*fsync) (struct file *, int datasync);
1562         int (*aio_fsync) (struct kiocb *, int datasync);
1563         int (*fasync) (int, struct file *, int);
1564         int (*lock) (struct file *, int, struct file_lock *);
1565         ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
1566         unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
1567         int (*check_flags)(int);
1568         int (*flock) (struct file *, int, struct file_lock *);
1569         ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);
1570         ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
1571         int (*setlease)(struct file *, long, struct file_lock **);
1572         long (*fallocate)(struct file *file, int mode, loff_t offset,
1573                           loff_t len);
1574 };

2.6.30.4中file_operation的定义如下:

1484 struct file_operations {
1485         struct module *owner;
1486         loff_t (*llseek) (struct file *, loff_t, int);
1487         ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
1488         ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
1489         ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
1490         ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
1491         int (*readdir) (struct file *, void *, filldir_t);
1492         unsigned int (*poll) (struct file *, struct poll_table_struct *);
1493         int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
1494         long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
1495         long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
1496         int (*mmap) (struct file *, struct vm_area_struct *);
1497         int (*open) (struct inode *, struct file *);
1498         int (*flush) (struct file *, fl_owner_t id);
1499         int (*release) (struct inode *, struct file *);
1500         int (*fsync) (struct file *, struct dentry *, int datasync);
1501         int (*aio_fsync) (struct kiocb *, int datasync);
1502         int (*fasync) (int, struct file *, int);
1503         int (*lock) (struct file *, int, struct file_lock *);
1504         ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
1505         unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
1506         int (*check_flags)(int);
1507         int (*flock) (struct file *, int, struct file_lock *);
1508         ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);
1509         ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
1510         int (*setlease)(struct file *, long, struct file_lock **);
1511 };

在file_operation 赋值处修改:
.unlocked_ioctl = xxx_ioctl


原文链接:http://blog.csdn.net/ce123/article/details/7777069
加载中
返回顶部
顶部