字符设备中 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 好像是冲突的啊~~~
|