如何解决在linux中查找IOCTL编号
我看到头文件
#define IOCTL_MAGIC 'A'
#define IOCTL_NAME _IOWR(IOCTL_MAGIC,2,ioctl_param)
我怎么知道这是 IOCTL_NAME
的 ioctl 编号?
解决方法
标题include/uapi/asm-generic/ioctl.h顶部描述了ioctl编号的构造方式:
ioctl 命令编码:共 32 位,命令为低 16 位, 低 14 位参数结构的大小 高 16 位。
...
然而事实上,低 16 位的前 8 位 位确实用作类型字段
即一个ioctl编号由4个字段构成,从上到下:
-
dir
- 方向,2 位。- 高位表示用户写了一个参数,
- 低位表示用户读取参数。
-
size
- 参数的大小,14 位。 -
type
- 唯一代表驱动程序的数字,8 位。 -
nr
- 类型(驱动程序)唯一的数字,8 位。
用于解码
#define IOCTL_MAGIC 'A'
#define IOCTL_NAME _IOWR(IOCTL_MAGIC,2,ioctl_param)
您需要知道ioctl_param
结构(sizeof(ioctl_param)
)的大小。
例如,如果结构的大小为 16 字节,则 ioctl 字段为:
-
dir
- 0x3(读取和写入)。 -
size
- 0x10(结构大小,16)。 -
type
- 0x41(字符A
的 ASCII 码)。 -
nr
- 0x2(第二个参数)。
ioctl 编号本身是 0xc0104102。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。