[[toc]]
ioctl函数
1 | int (*ioctl) (struct inode * node, struct file *filp, unsigned int cmd, unsigned long arg); |
参数:
1)inode
和file:ioctl
的操作有可能是要修改文件的属性,或者访问硬件。要修改文件属性的话,就要用到这两个结构体了,所以这里传来了它们的指针。
2)cmd
:命令。
3)arg
:参数。
1 | //linux\include\uapi\asm-generic\ioctl.h |
cmd
cmd
参数,就是一个数,用来与应用层传过来的参数进行比较,执行相应的操作。
1 |
每个cmd
命令都有3个段,在<asm-generic/ioctl.h>
和ioctl-number.txt
这两个文档有说明.
1 | //第一个段。为0~0xFF的数,占8bit,这些数是用来区分不同驱动的,内核有一个文档介绍了推荐或已经使用了的数。 |
1 | //第二个段。序数:用这个数来给自己的命令编号,占8bit(_IOC_NRBITS) |
1 | //第三个段。数据大小:与体系结构相关,ARM下占14bit(_IOC_SIZEBITS),如果数据是int,内核给这个赋的值就是sizeof(int)。 |