|  | 
 
| Linux开发笔记--驱动开发之ioctl 
 
 驱动数据传递
 
 copy_from_user   == write()
 copy_to_user     === read()
 
 ioctl 高级控制接口
 
 除了读写之外,设置功能比如设置波特率,数据位,校验
 方向性:
 无方向,
 读方向
 写方向
 
 app:对应有xx_ioctl()
 long (*unlocked ioctl) struct file *, unisigned int, unsigned long)
 long (*unlocked_ioctl) struct file *, unisigned int cmd, unsigned long arg)
 long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
 
 struct file *filp 文件属性,只有打开成功
 unsigned int cmd 命令值
 unsigned long arg 用来读或写的数据参数
 
 标准用法:
 cmd:  体现出命令的方向,分成四部分
 1 magic:高8位,用来区别不同设备的命令
 2 type:        设备命令
 3 dir:         传输方向
 4 sizeof: 参数大小
 
 设置命令
 magic |= 1<<24
 type |=  1<<16
 linux内核提供一系列的接口函数
 _IO(type,nr)        //设置方向的命令
 _IOW(type,nr,size)        //设置写方向
 _IOR(type,nr,size)        //设置读方向        size变量类型
 nr是这个设备的哪个命令
 egg
 #define MAGIC        'p'
 #define XNULL        _IO(MAGIC,5)        //设置方向的命令
 #define _IOW(MAGIC,1,char)        //设置写方向
 #define _IOR(MAGIC,1,char)        //设置读方向        size变量类型
 
 
 app应用层调用
 ioctl
 int ioctl(int d, int cmd , ...)
 int d 文件描述符
 int cmd 命令
 
 
 | 
 
+10 |