字符设备驱动--- 设备操作
来源:互联网 发布:创意嘉和软件 编辑:程序博客网 时间:2024/04/29 22:36
设备操作:
(1) int ( *open ) ( struct inode * , struct file *)
在设备文件上的第一个操作,并不要求驱动程序一定要实现这个方法.
如果该项为 NULL ,设备的打开操作永远成功.
(2) void ( * release ) ( struct inode *, struct file *)
当设备文件被关闭时调用这个操作.
与 open 相仿, release 也可以没有.
(3) ssize_t ( *read ) ( struct file * ,char _user * , size_t , loff_t * )
从设备中读取数据.
(4) ssize_t ( *write ) ( struct file * , const char _user * , size_t , loff_t * )
从设备中发送数据.
(5) unsigned int ( * poll ) ( struct file *, struct poll_table_struct *) 对应 select 系统调用.
(6) int ( * ioctl ) ( struct inode * ,struct file * , unsigned int , unsigned long )
控制设备.
(7) int ( * mmap ) ( struct file *, struct vm_area_struct *)
将设备映射到进程虚拟地址空间中.
(8) off_t ( * llseek ) ( struct file *, loff_t , int )
修改文件的当前读写位置,并将新位置作为返回值.
方法:
(1) open 方法:
open 方法是驱动程序用来为以后的操作完成初始化准备工作的,在大部分驱动程序中,
open 完成如下工作:
1,初始化设备.
2,标明次设备号.
(2) release 方法:
release 方法的作用正好与 open 相反,这个设备方法有时也称 close .
作用:
关闭设备.
(3) 读和写:
读和写方法都完成类似的工作:从设备中读取数据到用户空间;将数据传递到驱动程序.
它们的原型也相当相似:
ssize_t xxx_read ( struct file *filp ,char _user * buff, size_t count, loff_t * offp)
ssize_t xxx_write ( struct file *filp , char _user * buff , size_t count, loff_t * offp )
文件指针 指向的数据缓存 请求传输的数据量 指出文件当前访问位置
(4) 注意 buff :
read 和 write 方法的 buff 参数是用户空间指针, 因此,它不能被内核代码直接引用,
理由如下:用户空间的指针在内核空间时可能根本是无效的---没有那个地址的映射.
(5) 内核的读写:
内核提供了专门的函数用于访问用户空间的指针:
int copy_from_user ( void *to , const void _user *from , int n ).
int copy_to_user ( void _user *to , const void *from , int n ).
读写是站在用户空间的角度来说的.
- 字符设备驱动--- 设备操作
- 支持阻塞操作的字符设备驱动
- linux驱动开发--字符设备:原子操作
- 05 简单的字符设备驱动操作
- 第三章字符设备驱动(2)—设备操作函数
- linux设备驱动开发-高级字符设备操作poll
- 字符设备驱动--- 设备号 设备文件
- 字符设备驱动--- 设备号 设备文件
- Linux设备驱动之mmap设备操作(memdev.c字符设备驱动分析)
- Linux设备驱动之mmap设备操作(memdev.c字符设备驱动分析)
- 字符设备驱动更新
- 字符设备驱动模板
- 字符设备驱动模板
- 字符设备驱动1
- 字符设备驱动编写
- LINUX--字符设备驱动
- 字符设备驱动01
- 字符设备驱动02
- 小甲鱼PE详解之输入表(导入表)详解2(PE详解08)
- 添加网址时判断是否输入了http://
- VC api使用画笔和画刷
- c++的STL模板库中3种容器类:vector,list,deque的比较
- python非阻塞服务器实现
- 字符设备驱动--- 设备操作
- linux中修复文件系统技巧
- 使用Swing编写win7简易计算器3——单目运算符
- 小甲鱼PE详解之输入表(导出表)详解(PE详解09)
- OBB文件和StorageManager类使用介绍
- 螺旋队列---最简分析及代码实现
- 小甲鱼PE详解之基址重定位详解(PE详解10)
- vc 使用api绘制多边形
- 解析JSON格式的数据时,有的字段为空值