unlocked_ioctl和compat_ioctl
2024-08-26 23:49:30
参考:
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
};
完。
最新文章
- JavaScript对象详解
- JMeter学习-040-JMeter图形化 HTML 报表概要说明
- http中get和post的区别
- Transactional replication-如何跳过一个事务
- java内存管理总结
- distri.lua重写开源手游服务器框架Survive
- jquery个人笔记
- 绘制数据图表的又一利器:C3.js
- 正则表达式测试分析工具Expresso
- 基于Redis的CustomerSessionProvider(二)
- perties类的操作
- pycharm和shell中的sys.path不一样
- css和css3弹性盒模型实现元素宽度(高度)自适应
- JavaScript 从入门到放弃(一)事件委托和使用innerHTML添加元素
- Jmeter ----Bean shell使用
- gulp常用插件汇总
- Java容器——Map接口
- ASP.NET Core SignalR CORS 跨域问题
- Vue 框架-04-计算属性
- TensorFlow中的卷积函数