鸣涧 发表于 2022-11-23 23:07:48

Linux开发笔记--驱动开发之ioctl

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

页: [1]
查看完整版本: Linux开发笔记--驱动开发之ioctl