int ioctl(srutct inode *inode, struct file *fp, unsigned int cmd, unsigned long arg);cmd参数的定义:设备类型(type)序列号(number)方向(direction)数据尺寸(size)8bit8bit2bit13/14bittype、number位字段通过参数传入,而size位字段通过对datatype参数取sizeof获得。 构造命令编号的宏:
_IO(type, number, )用于构造无参数的命令编号;
_IOR(type, number, datatype)用于构造从驱动程序中读取数据的命令编号;
_IOW(type, number, datatype)用于写入数据的命令;
_IORW(type, number, datatype)用于双向传输;
//ioctl函数模版
int xxx_ioctl(struct inode *inode, struct file *fp, unsigned int cmd, unsigned long arg)
{
...
switch(cmd)
{
case XXX_CMD1:
...
break;
case XXX_CMD2:
...
break;
default: //不能支持的命令
return -ENOTTY;
}
return 0;
}5. 字符设备驱动结构