打印

关于ioctl 命令码 的问题???

[复制链接]
1138|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
suxilong|  楼主 | 2017-11-14 17:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
字符设备中 ioctl的命令码  是为了避免 程序员简单的定义命令号,导致不同设备驱动拥有相同命令号时,本来传输给A 设备的命令,传输到了B 设备,而B设备也有同样的命令号 而执行了不应该的操作....

Linux 内核推荐采用一套统一的 ioctl()命令生成方式 : 参考
https://www.mjmwired.net/kernel/Documentation/ioctl-number.txt

关于 幻数 的使用很模糊

1. 虽然 ioctl-number.txt 规定了那些会冲突, 但是我尝试 将幻数 规定我 冲突的 那一类, 结果驱动程序也可以编译通过~~
2. 这个幻数 具体代表什么意义??


网上有很多例子,好像都没有规律,随便使用似的

使用k作为幻数:
#define MY_MAGIC_DATA 'k'
#define MY_IOC_PRINT_DATA  _IO(MY_MAGIC_DATA, 1)
#define MY_IOC_GET_DATA  _IOR(MY_MAGIC_DATA, 2, int)
#define MY_IOC_SET_DATA  _IOW(MY_MAGIC_DATA, 3, int)
#define MY_IOC_EXCHANGE_DATA  _IOWR(MY_MAGIC_DATA,4,int)

但是k 好像是冲突的啊~~~

相关帖子

沙发
dirtwillfly| | 2017-11-17 08:50 | 只看该作者
幻数就是具体的数,反映不出数字所代表的意义
注意对幻数的编号千万不能重复定义,如ioctl-number.txt已经说明‘k'的编号已经被占用的范围为:
'k'    00-0F    linux/spi/spidev.h    conflict!
'k'    00-05    video/kyro.h        conflict!

使用特权

评论回复
板凳
suxilong|  楼主 | 2017-11-20 15:39 | 只看该作者
dirtwillfly 发表于 2017-11-17 08:50
幻数就是具体的数,反映不出数字所代表的意义
注意对幻数的编号千万不能重复定义,如ioctl-number.txt已经 ...

但是 很多“教程”  甚至是教科书都用过‘k‘~~~

使用特权

评论回复
地板
dirtwillfly| | 2017-11-21 09:09 | 只看该作者
suxilong 发表于 2017-11-20 15:39
但是 很多“教程”  甚至是教科书都用过‘k‘~~~

不重复就可以

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:没有最差,只有最懒

55

主题

339

帖子

4

粉丝