【14】Linux-字符设备控制技术

Linux-字符设备控制技术

设备控制-应用函数

在用户空间,使用ioctl系统调用来控制设备:

int ioctl(int fd, unsigned long cmd, ....)

fd:要控制的设备文件描述符

cmd:发送给设备的控制命令,其实只是用来起到标识作用

...:可选参数,存在与否依赖于控制命令,可以简单地课程就是一个参数

内核file_operations中对应函数

long (*ioctl)(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg);

long (*unlocked_ioctl)(struct file *filp, unsigned int cmd, unsigned long arg);

定义命令:

命令其实就是用几个字段来对设备的控制命令进行更细致的划分,由驱动设计者自己设定。

命令由类型(1Byte)、序号、参数传送方向、参数长度这四个段组成。其中

类型/幻数:表明这是哪个设备的命令

序号:用来区分同一设备的不同命令

参数传送方向:参数传送的方向,可能的值是_IOC_NONE(没有数据传输),_IOC_READ,_IOC_WRITE(向设备写入参数)

参数长度:size

利用linux提供的宏来帮助定义命令【注意不要和linux中的命令冲突】

_IO(type, nr): 不带参数的命令

_IOR(type, nr, datatype):从设备中读参数的命令

_IOW(type, nr, datatype): 向设备写入参数的命令

操作实现

unlocked_ioctl和ioctl函数中通常是使用一个switch来对命令进行识别,从而实现对设备的控制。当命令号不能匹配任何一个设备所支持的命令时,返回-EINVAL

switch cmd{

case A:

break;

case B:

break;

default:

break;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值