linux设备驱动程序介绍

linux设备驱动程序介绍

ID:20412171

大小:58.00 KB

页数:4页

时间:2018-10-10

linux设备驱动程序介绍_第1页
linux设备驱动程序介绍_第2页
linux设备驱动程序介绍_第3页
linux设备驱动程序介绍_第4页
资源描述:

《linux设备驱动程序介绍》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、Linux操作系统将所有的设备(而不仅是存储器里的文件)全部都看成文件,都纳入文件系统的范畴,都通过文件的操作界而进行操作。这意味着:(1)每一个设备都至少由文件系统的一个文件代表,因而都有一个“文件名”。每个这样的“设备文件”都唯一地确定了系统中地一项设备。应用程序通过设备地文件寻找访问只体地设备,而设备则象齊通文件一样受到文件系统访问权限控制机制地保护。(2)应用程序通常可以通过系统调用openO“打开”这个设备文件,建立起与目标设备的连接。代表着该设备的文件节点中记载着建立这种连接所需的信息。对于执行该应用程

2、序的进程而言,建立起的连接就表现为一个己经打开的文件。(3)打开了代表着A标设备的文件,即建立起与设备的连接后,就可以通过read()、write()、ioctl()等常规的文件操作对目标设备进行操作。Linux将设备分成两大类。一类是像磁盘那样以记录块或“扇区”为单位,成块进行输入/输出设备,称为“块设备”;另一类是像键盘那样以字符(字节)为单位,逐个进行输入/输出的设备,称为“字符设备”、文件系统通常都建立在块设备上。网路设备是介于块设备和字符设备之间的一种特殊设备。设备文件的属性由三部分信息组成:第一部分是文

3、件的类型(c/b),第二部分是一个“主设备号”,第三部分是一个“次设备号”。其中设备类型和主设备号结合在一起唯一地确定了设备文件地驱动程序及其界而,而次设备号则说明A标设备是同类设备中的第几个。应用程序通过Linux的系统调用与内核通信。由于Linux中将设备当作文件处理,所以对设备进行操作的调用和对文件操作的操作类似,主要包括open()、read()、writeO、ioctl()、closeO等。应用程序发出系统调用命令后,会从用户态转到内核态,通过内核将openO这样的系统调用转换成对物理设备的操作。在Lin

4、ux中通过分层实现对物理设备的调用,并使得内核的结构清晰,提高了模块化的独立性。2驱动程序的结构一般Linux设备驱动程序可以分为3个主要组成部分:(1)自动配置和初始化子程序,负责检测所要驱动的硬件设备是否存在和能否正常工作。如果设备正常则对这个设备及其相关的设备驱动程序需要的软件状态进行初始化。这部分驱动程序仅在初始化时被调用一次。(2)服务于I/O请求的子程序,乂称为驱动程序的上半部。调用这部分程序是由于系统调用的结果。这部分程序在执行时,系统仍认为是与进行调用的进程属于同一个进程,只是由用户态变成了核心态,

5、其有进行此系统调用的用户程序的运行环境,因而可以在其中调用sleepO等与进程运行环境有关的函数。(3)中断服务程序,又称为驱动程序的下半部。在Linux系统中并不是直接从中断向量表调用设备驱动程序的中断服务子程序,而是由Linux系统来接收硬件中断,再由系统调用中断服务子程序。中断可以在任何一个进程运行时产生,因而在中断服务程序被调用时,不能依赖于任何进程的状态,也就不能调用任何与进程运行环境有关的函数。因为设备驱动程序一般支持同一类型的若干设备,所以一般在系统调用中断服务子程序时,都带有一个或多个参数,以唯一标

6、志请求服务的设备。在系统内部,I/O设备的存/取通过一组固定的入口点来进行,这组入口点是由每个设备的设备驱动程序提供的。異体到Linux系统,设备驱动程序所提供的这组入口,6:由一个文件操作结构来向系统进行说明。file_operations结构定义于1inux/fs.h文件中,随着内核的不断升级,file_operations结构也越来越大,不同版本的内核会稍有不同。structfile_operations{structmodule氺owner;loff_t(*llseek)(structfile*,loff_

7、t,int);ssizet(本read)(structfile本,char*,sizet,lofft*);ssize_t(*write)(structfile氺,constchar*,size_t,loff_t*);int(本readdir)(structfile*,void*,filldirt);unsignedint(*pol1)(structfile氺,structpoll_table_struct*);int(氺ioctl)(structinode氺,structfile氺,unsignedint,unsi

8、gnedlong);int(*mmap)(structfile*,structvm_area_struct*);int(本open)(structinode*,structfile*);int(*f]ush)(structfile*);int(^release)(structinode*,structfile*);int(*fsync)(structfile

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。