ioctl

来源:互联网 发布:暨大网络教学平台 编辑:程序博客网 时间:2024/06/04 00:13


如何用Linux内核里的操作函数集file_operationioctl函数编写

        

步骤一:打开linux内核源代码里的Documentation文件夹下的ioctl文档

        文档里介绍了要用到的头文件和ioctl函数介绍

步骤二:打开文档ioctl-decoding,可知要包含头文件

defined in <linux/ioctl.h>

        里面又需要包含的头文件是

include\asm-generic\ioctl.h

打开这个头文件,里面的红函数告诉你怎么定义一个命令,type是用来区别不同设备的,nr是同一个设备下的不同命令号,size是要传递的数据类型

#define_IO(type,nr)         _IOC(_IOC_NONE,(type),(nr),0)

#define_IOR(type,nr,size)        _IOC(_IOC_READ,(type),(nr),(_IOC_TYPECHECK(size)))

#define_IOW(type,nr,size)       _IOC(_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))

#define_IOWR(type,nr,size)    _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))

#define_IOR_BAD(type,nr,size)      _IOC(_IOC_READ,(type),(nr),sizeof(size))

#define_IOW_BAD(type,nr,size)     _IOC(_IOC_WRITE,(type),(nr),sizeof(size))

#define_IOWR_BAD(type,nr,size)   _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size))

举例:

#define LED2_ON  _IOR(‘L’,0,unsigned char) L字符表示这个设备,0表示第一个命令,unsignedchar表示这个命令会传递一个字节的数据