ioctl与unlocked_ioctl区别
来源:互联网 发布:如何在淘宝买东西便宜 编辑:程序博客网 时间:2024/05/02 01:28
原文地址来源:http://blog.csdn.net/cbl709/article/details/7295772
今天调一个程序调了半天,发现应用程序的ioctl的cmd参数传送到驱动程序的ioctl发生改变。而根据《linux设备驱动》这个cmd应该是不变的。因为在kernel 2.6.36 中已经完全删除了struct file_operations 中的ioctl 函数指针,取而代之的是unlocked_ioctl ,所以我怀疑二者是不是兼容的。上网查了一些资料,很多文章只是泛泛谈了一下,说在应用程序中ioctl是兼容的,不必变化。而在驱动程序中这个指针函数变了之后最大的影响是参数中少了inode ,所以应用程序ioctl是兼容的,但驱动程序中我们的ioctl函数必须变化,否则就会发生cmd参数的变化:
原来的驱动程序
static const struct file_operations globalmem_fops=
{
.owner=THIS_MODULE,
.llseek=globalmem_llseek,
.open=globalmem_open,
.read=globalmem_read,
.write=globalmem_write,
.ioctl=globalmem_ioctl,
.release=globalmem_release,
};
int globalmem_ioctl(struct inode* inode,struct file* filp, unsigned int cmd,unsigned long arg)
{
switch (cmd)
{
case:XXX: ...
……
}
}
改变后的
static const struct file_operations globalmem_fops=
{
.owner=THIS_MODULE,
.llseek=globalmem_llseek,
.open=globalmem_open,
.read=globalmem_read,
.write=globalmem_write,
.unlocked_ioctl=globalmem_ioctl,
.release=globalmem_release,
};
int globalmem_ioctl(struct file* filp, unsigned int cmd,unsigned long arg)//没有inode参数!
{
switch (cmd)
{
case:XXX: ...
……
}
}
- ioctl与unlocked_ioctl区别
- ioctl与unlocked_ioctl区别
- ioctl与unlocked_ioctl区别
- ioctl与unlocked_ioctl区别
- ioctl与unlocked_ioctl的区别
- Ioctl使用及与unlocked_ioctl区别
- ioctl与unlocked_ioctl
- ioctl 与unlocked_ioctl
- 2416开发记录四: ioctl与unlocked_ioctl区别
- ioctl 与unlocked_ioctl之间的转换
- ioctl 变成了 unlocked_ioctl
- ioctl 变成了 unlocked_ioctl
- ioctl,unlocked_ioctl 处理方法
- ioctl,unlocked_ioctl 处理方法
- ioctl,unlocked_ioctl 处理方法
- ioctl 变成了 unlocked_ioctl
- ioctl 变成了 unlocked_ioctl
- ioctl/unlocked_ioctl/compat_ioctl
- 优酷网架构
- 使用inotify实现实时文件同步shell脚本
- STL之迭代器及traits编程
- error C2440: 'static_cast' : cannot convert from 'void (__thiscall CMainFrame::* )(void)' to 'LRESUL
- .Net启动外部程序 .
- ioctl与unlocked_ioctl区别
- linux install php5
- 我遇到的奇怪问题之一加载出错
- Effective C++(二)构造/析构/赋值运算
- 4-4 正整数类
- 在64位的windows server 2003运行IIS6运行32位的.NET程序 .
- Fedora 18安装google输入法和云拼音
- memcached完全剖析–1. memcached的基础
- Sql分组查询,如何把纵向显示的结果变成横向显示