第一步:定义命令(可以在头文件中定义,也可以在驱动函数中定义),驱动自已定义,不是系统带的
_IO(幻数(对应的一类设备),命令序号) 不带参数
_IOR(幻数(对应的一类设备),命令序号,用户传递数据的类型)
第二步:实现命令
1).注意返回值
2).作命令的有效性的检测,如用户空间地址的有效性
_IOC_TYPE(cmd) 提取幻数
_IOC_NR(cmd) 提取命令序号
access_ok 检测户空间地址的有效性
3).用switch语句实现
__put_user(传递的数据,(int *)arg)
__get_user(传递的数据,(int *)arg)
上面两个函数使用前需要对用户空间的地址指针作检测
int (*ioctl) (struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
用户空间调用
ioctl(fd,cmd,&arg)