网站大量收购闲置独家精品文档,联系QQ:2885784924

linux字符设备驱动.ppt

  1. 1、本文档共43页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux 2.6字符设备驱动程序设计 黄松青 设备驱动概述 设备由两部分组成,一个是被称为控制器的电器部分,另一个是机械部分。 一组寄存器组被赋予到各个控制器。I/O端口包含4组寄存器,即状态寄存器,控制寄存器,数据输入寄存器,数据输出寄存器。 状态寄存器拥有可以被CPU读取的(状态)位,用来 指示当前命令是否执行完毕,或者字节是否可以被读出或写入,以及任何错误提示。 控制寄存器则用于启动一条命令(指令)或者改变设备的(工作)模式。 数据输入寄存器用于获取输入的数据。 数据输出寄存器则向CPU发送结果。 设备驱动概述 操作系统是通过各种驱动程序来驾驭硬件设备,它为用户屏蔽了各种各样的设备。 设备驱动程序是操作系统内核和机器硬件之间的接口,系统调用是操作系统内核和应用程序之间的接口。 在应用程序看来,硬件设备只是一个设备文件, 应用程序可以象操作普通文件一样对硬件设备进行操作. 设备驱动概述 驱动完成以下的功能: 对设备初始化和释放. 把数据从内核传送到硬件和从硬件读取数据. 读取应用程序传送给设备文件的数据和回送应用程序请求的数据. 检测和处理设备出现的错误. 设备驱动概述 无操作系统的设备驱动 有操作系统的设备驱动 Linux系统驱动概述 驱动程序在Linux系统中以内核模块的形式存在,它的编写方式遵循模块的方式 驱动程序在系统的程序中介于HAL层与硬件之间.向上,与系统各部分(主要是文件系统)衔接,向下,处理硬件的各种操作请求 系统与驱动之间有标准的接口定义,驱动就是要实现系统的接口 Linux提供3种基本的设备驱动接口,包括字符,块设备和网络设备驱动,其中字符设备是应用最广,和用户应用程序联系最直接的驱动 Linux系统驱动概述 Linux操作系统把设备纳入文件系统的范畴来管理。 每个设备在Linux系统上看起来都像一个文件,它们存放在/dev目录中,称为设备节点。 对文件操作的系统调用大都适用于设备文件。 字符设备驱动 应用程序如何使用字符设备,一个例子 static char buf[1024]; int main(void) { int fd, size = 1024; fd = open(“/dev/fb0”, O_RDWR); if(fd 0) { read(fd, buf, size); … write(fd, buf, size); } return 0; } 字符设备驱动 字符设备通过文件系统中的名子来存取. 那些名子称为文件系统的特殊 文件,或者设备文件,一般放在/dev目录下 #ls –l /dev/ crw-rw-rw- 1 root root 1, 5 Apr 11 2002 zero crw-rw-rw- 1 root root 1, 3 Apr 11 2002 null crw 1 root root 4, 1 Oct 28 03:04 tty1 crw-rw-rw- 1 root tty 4, 64 Apr 11 2002 ttys0 crw-rw 1 root uucp 4, 65 Apr 11 2002 ttyS1 crw--w 1 vcsa tty 7, 1 Apr 11 2002 vcs1 crw--w 1 vcsa tty 7,129 Apr 11 2002 vcsa1 其中,类似 4, 1这样的数字叫设备的主,次编号 字符设备驱动 主次编号 -- 传统上, 主设备号标识设备相连的驱动例如, /dev/null 和 /dev/zero 都由驱动 1 来管理,次设备号是用来区分同一驱动程序管理的不同设备 -- 在内核中,系统是根据主次编号来确定调用的驱动程序的,对于 2.6.0 内核,主次编号是 32 位的数,叫dev_t类型, 12 位用作主编号, 20 位用作次编号,为了保障代码的移植,应该用系统提供的宏 来操作 MAJOR(dev_t dev) MINOR(dev_t dev) MKDEV(int major, int minor) -- 可以根据主次编号在文件系统中建立对应的设备名 #mknod /dev/my_name c 254 0 字符设备驱动 分配和释放设备编号 #incl

文档评论(0)

wuyoujun92 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档