ioctl 接口
linux/ioctl.h
1.
int ioctl(int fd, unsigned long cmd, ...);
//在用户空间
int (*ioctl) (struct inode *inode, struct file *filp,
unsigned int cmd, //命令
unsigned long arg//参数
);
//内核空间
2.ioctl 命令:
预定义的命令 和 自定义命令
预定义的命令:内核能够识别,且在你的文件操作被调用之前被操作,例如:FIOCLEX,
FIONCLEX,FIOQSIZE,FIONBIO
3.ioctl命令操作
ioctl 命令4 个位段
type 魔数,8 位宽(_IOC_TYPEBITS).
number 顺序号. 8 位(_IOC_NRBITS)宽
direction 数据传送的方向,_IOC_NONE(没有数据传输), _IOC_READ(从设备读), _IOC_WRITE,
和 _IOC_READ|_IOC_WRITE (数据在2个方向被传送).
size 用户数据的大小
建立命令(type魔数,nr顺序号 datatype数据类型)
IO(type,nr)(
//给没有参数的命令
_IOR(type, nr, datatype)
//从驱动中读数据的
_IOW(type,nr,datatype)
//写数据
_IOWR(type,nr,datatype)
//双向传送
分解命令(nr为命令)
_IOC_DIR(nr) 数据传送的方向
_IOC_TYPE(nr) 魔数
_IOC_NR(nr) 顺序号
_IOC_SIZE(nr) 数据的大小
阅读(1225) | 评论(0) | 转发(0) |