参考:

https://www.cnblogs.com/super119/archive/2012/12/03/2799967.html

https://lwn.net/Articles/119652/

http://b8807053.pixnet.net/blog/post/3610561-ioctl%2cunlocked_ioctl%e5%92%8ccompat_ioctl

Linux内核中struct file_operations含有下面两个函数指针:

struct file_operations {
... ...
long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
... ...
};

注意:

1、compat_ioctl:支持64bit的driver必须要实现的ioctl,当有32bit的userspace application call 64bit kernel的IOCTL的时候,这个callback会被调用到。如果没有实现compat_ioctl,那么32位的用户程序在64位的kernel上执行ioctl时会返回错误:Not a typewriter

2、如果是64位的用户程序运行在64位的kernel上,调用的是unlocked_ioctl,如果是32位的APP运行在32位的kernel上,调用的也是unlocked_ioctl

示例:

 #ifdef CONFIG_COMPAT
static long debussy_compat_ioctl (struct file *filp, unsigned int cmd, unsigned long arg)
{
return debussy_ioctl(filp, cmd, (unsigned long)compat_ptr(arg));
}
#endif static const struct file_operations debussy_fops = {
.owner = THIS_MODULE,
.unlocked_ioctl = debussy_ioctl,
#ifdef CONFIG_COMPAT
.compat_ioctl = debussy_compat_ioctl,
#endif
};

完。

最新文章

  1. JavaScript对象详解
  2. JMeter学习-040-JMeter图形化 HTML 报表概要说明
  3. http中get和post的区别
  4. Transactional replication-如何跳过一个事务
  5. java内存管理总结
  6. distri.lua重写开源手游服务器框架Survive
  7. jquery个人笔记
  8. 绘制数据图表的又一利器:C3.js
  9. 正则表达式测试分析工具Expresso
  10. 基于Redis的CustomerSessionProvider(二)
  11. perties类的操作
  12. pycharm和shell中的sys.path不一样
  13. css和css3弹性盒模型实现元素宽度(高度)自适应
  14. JavaScript 从入门到放弃(一)事件委托和使用innerHTML添加元素
  15. Jmeter ----Bean shell使用
  16. gulp常用插件汇总
  17. Java容器——Map接口
  18. ASP.NET Core SignalR CORS 跨域问题
  19. Vue 框架-04-计算属性
  20. TensorFlow中的卷积函数

热门文章

  1. 【CTF WEB】服务端请求伪造
  2. Linux下USB suspend/resume源码分析【转】
  3. LTE:eMBMS架构
  4. dblinks
  5. centos6.5环境通过shell脚本备份php的web及mysql数据库并做远程备份容灾
  6. ASP.NET MVC环境下实现一个网站多个网站模板的方法
  7. opencv 车牌字符分割 ANN网络识别字符
  8. CMD命令行下修改网络IP设置的方法
  9. CF1064B 【Equations of Mathematical Magic】
  10. C/C++的64位整型