【嵌入式Linux驱动开发】三、字符设备驱动(二)
来源:互联网 发布:疯狂java博客 编辑:程序博客网 时间:2024/05/01 00:27
1. open函数
int open(struct inode *inode, struct file *fp);
- 模块使用计数加1;
- 识别次设备号;
- 硬件操作:检查设备相关错误;如果设备是首次打开,则对其初始化;如果有中断操作,申请中断处理程序。
2. release函数
int release(struct inode *inode, struct file *fp);
- 模块使用计数减1;
- 释放由open分配的,保存在file->private_data里的内容;
- 硬件操作:如果申请了中断,则释放中断处理程序;在最后一次关闭操作时关闭设备。
3. read/write函数
ssize_t read(struct file *fp, char __user *buf, size_t count, loff_t *offp);
ssize_t write(struct file *fp, const char __user *buf, size_t count, loff_t *offp);
用户空间和内核空间之间的数据传递:
unsigned long copy_from_user(void *to, const void __user *from, unsigned long count);
unsigned long copy_to_user(void __user *to, const void *from, unsigned long count);
//读设备模版ssize_t xxx_read(struct file *fp, char __user *buf, size_t count, loff_t *f_pos){ ... copy_to_user(buf, ..., ...); ...}//写设备模版ssize_t xxx_write(struct file *fp, const char __user *buf, size_t count, loff_t *f_pos){ ... copy_from_user(..., buf, ...); ...}4. ioctl函数
- 为设备驱动程序执行“命令”提供了一个特有的入口点。
- 用来设置或者读取设备的属性信息。
int ioctl(srutct inode *inode, struct file *fp, unsigned int cmd, unsigned long arg);
cmd参数的定义:
设备类型(type)序列号(number)方向(direction)数据尺寸(size)8bit8bit2bit13/14bittype、number位字段通过参数传入,而size位字段通过对datatype参数取sizeof获得。
构造命令编号的宏:
- _IO(type, number, )用于构造无参数的命令编号;
- _IOR(type, number, datatype)用于构造从驱动程序中读取数据的命令编号;
- _IOW(type, number, datatype)用于写入数据的命令;
- _IORW(type, number, datatype)用于双向传输;
//ioctl函数模版int xxx_ioctl(struct inode *inode, struct file *fp, unsigned int cmd, unsigned long arg){ ... switch(cmd) { case XXX_CMD1: ... break; case XXX_CMD2: ... break; default: //不能支持的命令 return -ENOTTY; } return 0;}5. 字符设备驱动结构
0 0
- 【嵌入式Linux驱动开发】三、字符设备驱动(二)
- 【嵌入式Linux驱动开发】三、字符设备驱动(一)
- 嵌入式Linux设备驱动开发(二)
- 嵌入式Linux驱动开发(二)——字符设备驱动之控制LED
- linux驱动模块开发(二)----字符设备驱动
- 嵌入式Linux驱动开发(三)——字符设备驱动之查询的方式获取按键值
- 嵌入式linux字符设备驱动
- 嵌入式linux字符设备驱动
- 嵌入式Linux设备驱动开发笔记(三)
- 嵌入式Linux设备驱动开发笔记(二)
- Linux设备驱动(二)字符设备
- linux设备驱动(二)---字符设备之按键驱动
- 07-S3C2440驱动学习(一)嵌入式linux字符设备驱动-LED字符设备驱动
- Linux 字符设备驱动开发基础(二)—— 编写简单 PWM 设备驱动
- Linux 字符设备驱动开发基础(二)—— 编写简单 PWM 设备驱动
- Linux 字符设备驱动开发基础(二)—— 编写简单 PWM 设备驱动
- (三)驱动开发字符设备过程
- 嵌入式Linux设备驱动开发(一)
- nyoj119
- 深入理解C++的动态绑定和静态绑定
- 关于惠普的增霸卡
- kaldi主页上的翻译的事情(更新)
- input文本框和验证码对齐问题解决
- 【嵌入式Linux驱动开发】三、字符设备驱动(二)
- NoSQL数据库的分布式算法
- 不断更新的连接。。。
- php+mysql分页类
- java.util.concurrent介绍
- 贪心算法实现找零问题求解
- LINUX C++ IDE 安装
- 哲学家就餐问题及其一种java多线程实现
- 20140408收盘小结