[[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)。  |