|
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
|