电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区
论坛
开发板专区
Linux字符设备驱动模型之操作函数集
Linux字符设备驱动模型之操作函数集
WRITE
东方
应用程序
室内设计
东方青
LV4工程师
| 2016-11-22 09:16:41
浏览量 1555
回复:9
发表新帖
Linux字符设备驱动模型之操作函数集
-----东方青
在上一篇文章中提到,在Linux用户空间中,操作硬件设备是通过操作文件的方式进行。那么其所包含的操作方式无法就是打开文件(open)、写数据到文件(write)、从文件读数据(read)等等。如下图:
一、struct file_operations操作函数集
struct file_operations结构对于Linux设备驱动的开发尤其重要,它为Linux内核驱动和用户空间应用程序的操作接口提供映射机制,使得用户空间的操作函数可以在内核空间找到相对应的映射函数,从而实现内核空间与用户空间的数据交互。
上图中的字符设备驱动相关的结构struct cdev的成员包含了struct file_operations操作函数集,其所代表的是为字符设备驱动提供操作方法框架,以能够实现与用户空间的映射。其原型如下:
如上图可知,struct file_operations结构成员的命名存在与在用户空间的操作文件的应用程序所调用的API相似,例如llseek、read、write、open等。实际上这些操作方法与用户空间的API实现映射关系。是作为Linux内核设备驱动程序的操作方法,设备驱动为上层应用提供规定的操作方法。比如对于某些设备而言,其只受到CPU的控制,而不需要给CPU返回数据,那么在Linux内核驱动中将不需要实现read方法,即用户空间也不能使用read进行操作相应的设备节点文件。
二、struct file_operations函数集的应用
struct file_operations是一个函数指针集合,其定义了能够在设备上进行操作的函数。结构中的每一个函数指针成员均指向驱动中的函数,这些函数实现一个针对设备的操作,对于设备不支持的操作,则可以设置其对应的函数指针为NULL。例如:
如上图中,此设备不支持llseek操作方式,所以其值为空;它在用户空间支持了read、write、ioctl、open、和close(对应release函数指针成员),其他用不到的成员可以不进行配置。
Linux字符设备驱动模型之操作函数集
-----东方青
在上一篇文章中提到,在Linux用户空间中,操作硬件设备是通过操作文件的方式进行。那么其所包含的操作方式无法就是打开文件(open)、写数据到文件(write)、从文件读数据(read)等等。如下图:
一、struct file_operations操作函数集
struct file_operations结构对于Linux设备驱动的开发尤其重要,它为Linux内核驱动和用户空间应用程序的操作接口提供映射机制,使得用户空间的操作函数可以在内核空间找到相对应的映射函数,从而实现内核空间与用户空间的数据交互。
上图中的字符设备驱动相关的结构struct cdev的成员包含了struct file_operations操作函数集,其所代表的是为字符设备驱动提供操作方法框架,以能够实现与用户空间的映射。其原型如下:
如上图可知,struct file_operations结构成员的命名存在与在用户空间的操作文件的应用程序所调用的API相似,例如llseek、read、write、open等。实际上这些操作方法与用户空间的API实现映射关系。是作为Linux内核设备驱动程序的操作方法,设备驱动为上层应用提供规定的操作方法。比如对于某些设备而言,其只受到CPU的控制,而不需要给CPU返回数据,那么在Linux内核驱动中将不需要实现read方法,即用户空间也不能使用read进行操作相应的设备节点文件。
二、struct file_operations函数集的应用
struct file_operations是一个函数指针集合,其定义了能够在设备上进行操作的函数。结构中的每一个函数指针成员均指向驱动中的函数,这些函数实现一个针对设备的操作,对于设备不支持的操作,则可以设置其对应的函数指针为NULL。例如:
如上图中,此设备不支持llseek操作方式,所以其值为空;它在用户空间支持了read、write、ioctl、open、和close(对应release函数指针成员),其他用不到的成员可以不进行配置。
0
收藏
举报
分享
×
微信分享
扫描二维码分享
qq分享
QQ空间分享
微博分享
我来回复
登录后可评论,请
登录
或
注册
所有回答
数量:
6
wuge
2016-11-22
好教材啊
0
回复
举报
发布
东方青
2016-11-22
欢迎!欢迎!!
0
回复
举报
发布
东方青
2016-11-22
:$
0
回复
举报
发布
hebian
2016-11-22
听课开始了么?
0
回复
举报
发布
东方青
回复
2016-11-22
连载!!:lol
0
回复
举报
发布
秦时茗月
2016-11-22
拿板凳坐着听东方老师讲课。。
0
回复
举报
发布
东方青
回复
2016-11-22
:lol:victory::lol
0
回复
举报
发布
LiuYang
2016-11-22
好教程:victory:
0
回复
举报
发布
东方青
回复
2016-11-22
:lol:lol
0
回复
举报
发布
×
举报
举报人:
被举报人:东方青
*
类型:
请选择类型
问题质量差
垃圾广告信息
偏离社区主题
违规内容
不友善内容
与社区已有问题重复
以上选项都不是
*
详细原因:
取消
提交
x
收藏成功!点击
我的收藏
查看收藏的全部帖子