如何为 ioctl 选择一个好的魔法/类型号?

问题描述 投票:0回答:2

我想知道是否有一个宏可以为我的设备分配一个 Linux 当前未使用的随机“魔术”数字。这显然是为了可移植性。另外,如果这是不可能的,我想知道在哪里可以找到未使用哪些幻数。我想查阅的文本文件我相信叫做 ioctl-number.txt,但我只能在我下载的源代码树中找到这些文件......而不是我实际运行的编译内核。找到这些文件可能隐藏在编译版本中的位置会很有趣。

感谢您的帮助!

c linux-kernel kernel driver linux-device-driver
2个回答
2
投票

您能否选择您的设备驱动程序不(也永远不会)使用的现有 ioctl 宏,并将其值分配给您需要的 ioctl 宏?

我对 ioclt 如何与设备驱动程序配合使用的了解有限,所以这可能不起作用。

您可以查看另一个具有自定义 ioctl 值的设备驱动程序的源代码,并了解他们如何选择其数字吗?也许有一个操作系统不使用的范围,因此每个设备驱动程序都可以根据需要来解释它们。


0
投票

我假设在谈论幻数时,我们指的是以下内置 IO 调用中的 8 位“类型”

#define _IO(type,nr)        _IOC(_IOC_NONE,(type),(nr),0)
#define _IOR(type,nr,size)  _IOC(_IOC_READ,(type),(nr),(_IOC_TYPECHECK(size)))
#define _IOW(type,nr,size)  _IOC(_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
#define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size))) 

从目前我所看到的情况来看,似乎没有办法动态分配这个值。就像您提到的那样,建议我们查看 ioctl-number.txt 文档以获取开放号码并使用它。为了“确保”其他设备将来不会使用它,我们应该推送更改并注册我们的幻数以添加到列表中。从该文件:

如果您正在为新设备编写驱动程序并需要一封信,请选择一个 有足够扩展空间的未使用块:32 至 256 个 ioctl 命令。 您可以通过修补此文件并提交来注册该块 Linus Torvalds 的补丁。或者您可以发送电子邮件至 [email protected] 并 我给你注册一个。

这看起来有点麻烦而且容易出错。有了庞大的社区,这 8 位很快就会被填满。

© www.soinside.com 2019 - 2024. All rights reserved.