如何为ioctl选择一个好的magic/type编号?

x7rlezfr  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(97)

我想知道是否有一个宏可以给我的设备分配一个随机的“魔法”数字,而Linux目前没有使用这个数字。这显然有利于可移植性。另外,如果这是不可能的,我想知道在哪里我可以找到哪些魔术数字没有使用。我想查阅的文本文件名为ioctl-number.txt,但我只能在下载的源代码树中找到这些文件。而不是我实际运行的编译内核。找出这些文件在编译版本中可能隐藏的位置将是很有趣的。
感谢您的任何帮助!

nx7onnlm

nx7onnlm1#

你可以选择一个你的设备驱动程序不使用(也永远不会使用)的现有ioctl宏,并将其值分配给你需要的ioctl宏吗?
我对ioclt如何与设备驱动程序一起工作的知识有限,所以这可能不起作用。
您能否查看另一个具有自定义ioctl值的设备驱动程序的源代码,看看它们是如何选择数字的?也许有一个范围,操作系统不使用,所以他们可供每个设备驱动程序解释,但它希望。

4smxwvx5

4smxwvx52#

我假设在谈论幻数时,我们指的是以下内置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(https://stackoverflow.com/cdn-cgi/l/email-protection),我会为你注册一个。
这似乎有点麻烦和容易出错。有了一个庞大的社区,这8位可以很快被填满。

相关问题