驱动程序的命令设置
来源:互联网 发布:php校园新闻发布系统 编辑:程序博客网 时间:2024/06/15 03:54
除了读和写设备外,大部分驱动还需要另一种能力,即通过设备驱动程序执行各种类型的硬件控制。这些操作通常通过ioctl函数实现。
在用户空间,ioctl的原型:
int ioctl(int fd,unsigned long cmd,…);
在内核空间,ioctl的原型:
int (*ioctl) (struct inode *inode,struct file*filp,unsigned int cmd,unsigned long arg);
在内核的ioctl中大多实现了一个switch语句,根据不同的cmd执行不同的代码。不同的cmd有不同的值,为了方便创建唯一的ioctl的cmd,Linux在<linux/ioctl.h>中包含的<asm.ioctl.h>中提供了一些创建cmd的宏,如下:
_IO(type,nr);
_IOR(type,nr,datatype);
_IOW(type,nr,datatype);
_IOWR(type,nr,datatype);
type是表示一个magic number,一般可以如下定义:
#define XXX_IO_MAGIC ‘k’
nr代表命令序数,一般从1开始,随你设置,不能重复。datatype是数据类型。下面例子,我们定义一个命令cmd:
#define XXX_IOCMD_O _IO(XXX_IO_MAGIC,1)
#define XXX_IOCMD_C _IO(XXX_IO_MAGIC,2)
XXX代表任意,自己定吧,反正是宏定义,自己看着办。
定义了上述命令,我们即刻通过XXX_IOCMD_O传入ioctl,由用户空间到内核空间的联系了。注意,上面定义命令部分,要在用户空间和内核空间进行相同的操作,即在驱动程序和用户程序里面是相同的命令设置。
在驱动程序部分,大概是这样一个switch语句:
switch(cmd)
{
case XXX_IOCMD_O:
……//O对应open操作
case XXX_IOCMD_C:
……//C对应close操作
}
在用户程序部分,就像是ioctl()的调用了。假设一个设备描述符为dev_fd,打开这个设备(用户态),调用ioctl(dev_fd,XXX_IOCMD_O);
就这么简单啦。
- 驱动程序的命令设置
- 带Ioctl命令的字符设备驱动程序
- Eclipse JDBC 驱动程序设置
- Eclipse JDBC 驱动程序设置
- Eclipse JDBC 驱动程序设置
- Eclipse JDBC 驱动程序设置
- 设置驱动程序开机启动
- 驱动程序和AT命令
- 用VC6.0编译驱动程序的工程设置方法
- 用VC6.0编译驱动程序的工程设置方法
- VS2012英文版 编译驱动程序的环境设置
- 简化的 MapReduce 驱动程序:默认值显式设置
- Windows中系统服务、驱动程序和注册表的相关命令
- Linux并口设备驱动程序设置
- Linux并口设备驱动程序设置
- linux的date命令设置
- notepad++运行命令的设置
- linux设置命令的环境变量
- UML_活动图
- 模块手机Project Ara的MDK(Module Developers Kit)模块开发套件
- 下载Android源码时过滤掉无关紧要的大文件
- [最小表示] poj 1509 Glass Beads
- nginx中重写rewrite的语法错误[emerg] unknown directive
- 驱动程序的命令设置
- 2014年第四届“华为杯”南邮程序设计竞赛,选拔赛第二题 亲友团问题
- Swing桌面程序(第1篇)
- ADT 无法关联libs jar包的源代码问题的解决
- 关于等待队列
- <java——多线程>
- week 11 67
- 【中断异常】软中断与Bottom Half
- Not get deviceToken yet极光推送出错