首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ioctl()、unlocked_ioctl()和compat_ioctl()之间有什么区别?

ioctl()、unlocked_ioctl()和compat_ioctl()之间有什么区别?
EN

Unix & Linux用户
提问于 2010-12-10 07:03:29
回答 2查看 63K关注 0票数 44

通过lxr.linux.no的Linux2.6.36源代码,我无法在file_operations中找到ioctl()方法。相反,我发现了两个新的调用:unlocked_ioctl()compat_ioctl()ioctl()unlocked_ioctl()compat_ioctl()有什么区别?

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2010-12-10 19:47:21

元答案:所有发生在Linux内核上的原始内容都是通过lkml ( Linux内核邮件列表)实现的。要获得说明性摘要,请阅读或搜索lwn (Linux周刊新闻)

答:来自ioctl()的新方法 by 乔纳森·科贝特

ioctl()是运行在大内核锁(BKL)下的内核的剩余部分之一。在过去,BKL的使用使得长期运行的ioctl()方法能够为不相关的进程创建较长的延迟。

下面是对将unlocked_ioctlcompat_ioctl引入2.6.11的补丁的解释。移走ioctl字段发生的时间很晚,在2.6.36。

说明:当ioctl被执行时,它使用了大内核锁 (BKL),所以其他任何东西都不能同时执行。这在多处理器机器上是非常糟糕的,所以为了摆脱BKL做了很大的努力。首先,介绍了unlocked_ioctl。它允许每个驱动程序编写器选择要使用的锁。这可能很困难,因此有一段时间的过渡期间,旧的驱动程序仍然工作(使用ioctl),但是新的驱动程序可以使用改进的接口(unlocked_ioctl)。最终,所有驱动程序都被转换,ioctl可以被删除。

compat_ioctl实际上是不相关的,尽管它是同时添加的。它的目的是允许32位用户程序在64位内核上进行ioctl调用。ioctl的最后一个参数的含义取决于驱动程序,因此无法进行独立于驱动程序的转换。

票数 46
EN

Unix & Linux用户

发布于 2011-01-12 16:09:54

在内核2.6.36中,将(include/linux/fs.h) struct file_operations方法ioctl()替换为compat_ioctl()是不起作用的(例如,对于某些设备驱动程序),必须使用unlocked_ioctl()。

票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/4711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档