linux驱动错误: 初始值设定…
来源:互联网 发布:mac压缩包解压错误 编辑:程序博客网 时间:2024/05/01 22:39
long (*unlocked_ioctl) (struct file *, unsigned int, unsignedlong);
long (*compat_ioctl) (struct file *, unsigned int, unsignedlong);
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
long (*unlocked_ioctl) (struct file *filp, unsigned int cmd, unsigned long arg);
If a driver or filesystem providesan
Michael's patch adds one other operation:
long (*compat_ioctl) (struct file *filp, unsigned int cmd, unsigned long arg);
If this method exists, it will be called (without the BKL) whenevera 32-bit processcalls
The
1、消失的时间
2、消失的原因
当然,顺便了解一下大内核锁也是很有必要的:转载好文:《大内核锁将何去何从》
对于原来的ioctl,其实可以叫做lockedioctl。这个其实是相对于他的替代方法来讲的
3、在驱动编程时的注意事项
- 在注册文件操作方法的结构体structfile_operations的时候原先的.ioctl=OOXX;替换为.unlocked_ioctl=OOXX;
但是要注意ioctl和unlocked_ioctl的定义有一点不同:unlocked_ioctl少了一个inode参数。但是如果方法中真的需要其中的数据,可以通过filp->f_dentry->d_inode获得。
- 由于失去了大内核锁的保护,所以必须在unlocked_ioctl方法中自行实现锁机制,以保证不会在操作设备的时候(特别在SMP系统中)产生竞态。(也就实现了用小锁替换大锁)
- linux驱动错误: 初始值设定…
- 记录一下,几个错误:初始值设定元素不是常量
- flex DropDownList 初始值 获取当…
- linux启动错误 Invalid module for…
- 【转】 linux设备驱动模型之 bus(…
- S3C2410 Linux IIS音频设备驱动分…
- S3C2410 Linux IIS音频设备驱动分…
- linux powerpc i2c驱动 之 i2c设备…
- 无效初始值错误
- Android 系统初始值修改
- Linux IIC驱动笔记
- Linux PCI驱动模型
- Linux PCI驱动模型
- linux mmap驱动实现
- linux mmap驱动实现
- JSF点滴积累--初始值的设定
- Ext.form.ComboBox setValue()初始值设定问题
- 单片机的定时初始值的设定
- svm应用范例,采用svm实现图片的分…
- Opencv写视频文件
- QT中字符串的比较
- 【原】mmap方法实现物理内存…
- 打开Eclipse时出现"Failed&nb…
- linux驱动错误: 初始值设定…
- OpenCV移动平均法背景建模
- DM365IPNC开发环境搭建
- linux启动错误 Invalid module for…
- dm36x烧写UBL,UBOOT(ccs5.2)
- Linux下socket编程示范(一个服务…
- 搭建一个免费的,无限流量的Blog--…
- ubuntu下安装mysql及mysql开发包SD…
- HTTP请求更新服务器SVN代码