linux设备文件细分为两类,第6章 Linux 设备驱动程序.ppt

第6章 Linux 设备驱动程序.ppt

第6章 Linux 设备驱动程序 在嵌入式系统设计中,设备驱动程序起着举足轻重的作用。在Linux操作系统中,应用程序不能直接访问硬件,而是需要通过Linux内核提供的系统调用访问设备文件,最后由设备驱动程序直接和硬件打交道。设备驱动程序提供给应用程序的是一些标准的接口,包括读/写操作,而隐藏了各种硬件寄存器的操作。嵌入式系统根据不同的需求,外部设备多种多样,设备驱动程序在项目开发中占有重要地位。 本章主要内容: 6.1 概述 6.2 Linux设备驱动模型 6.3 一个简单的设备驱动程序 6.4 设备驱动程序与硬件 6.5 用户程序和内核之间传递数据 6.6 中断技术 6.7 软中断和tasklets 6.8 /proc文件系统 6.1 概述 Linux设备驱动程序在目录/dev下对应有一个或几个设备文件。应用程序通过系统调用open( )打开设备文件,然后通过read( )、write( )和ioctl( ) 等文件,对设备进行操作。因此编写设备驱动程序时,就要实现对应的功能。 早期版本的Linux设备目录/dev下的文件并不一定有实际的设备对应,有大量的节点实际上是没有用的,或者说目前是没有用的。至于未来什么时候安装了新设备的时候可能会用得上,那是难以预料的事情。这些节点都是由系统管理员建立的,脚本/dev/MAKEDEV可以帮助系统管理员来做这件事情。当增加一个新设备,或者修改一个设备的主、从设备号时,除了要告诉内核这些变动外,还要修改脚本MAKEDEV。一个典型系统的/dev目录下会有成百上千个节点。 6.2 Linux设备驱动模型 Linux的设备驱动模型提供了一个统一的数据模型,使得系统中所有的设备在底层都有一个统一的接口。设备驱动模型包括了用户程序udev、内核数据结构kobject以及文件系统sysfs等。设备驱动模型是一种层次结构,各种数据结构及程序之间的关系还是有些复杂。对于用户来说,最直接看到的就是目录/dev下的设备文件。在本节中,希望能够清楚描述从设备驱动程序的组织结构到用户程序udev如何管理目录/dev下的节点。 6.2.1 sysfs文件系统 sysfs文件系统是类似于proc文件系统的特殊文件系统,一般挂载在目录/sys下。目录/sys中的内容是在系统启动后才在内存中建立起来,作用是将系统中的设备组织成层次结构,向用户程序提供详细的内核数据结构信息。 6.2.2 内核相关数据结构 设备驱动模型相关的数据结构包括了kobject、kset、ktype和subsystem等。目录/sys下的每一个目录对应一个内核对象kobject。Kobject是Linux2.6引入的新的设备管理机制,在内核中由struct kobject表示,该结构提供了基本的对象管理,并在嵌入到内核更复杂、更庞大的数据结构(如 bus、devices和drivers等)中使用,避免一些通用机制的重复实现。这些机制包括: 对象引用计数;维护对象链表(集合);对象上锁; 在用户空间的表示。 通过kobject使所有设备在底层都具有统一的接口,kobject提供基本的对象管理,是构成Linux2.6设备模型的核心结构,它与sysfs文件系统紧密关联,每个在内核中注册的kobject对象都对应于sysfs文件系统中的一个目录。kobject是组成设备模型的基本结构,都是嵌入在称为“容器”的对象中。 6.3 一个简单的设备驱动程序 这一节来看一个简单的设备驱动程序。为了简单起见,暂时不设计硬件,仅对Linux设备驱动程序作一个初步的了解。传统上,unix/Linux设备分为字符设备和块设备两类。在Linux系统中,用命令“ls-l /dev”查看目录/dev下的设备文件,输出类似以下的信息: 第一列属性的头一个字符表示该设备的类型,c表示字符设备,b表示块设备。所谓字符设备就是指该设备是以字符为单位进行输入或输出操作;而块设备则是以块为单位进行输入或输出操作。第五列和第六列分别是设备的主设备号和次设备号,如设备rtc的主设备号是10,次设备号是135。 现在来实现一个简单的设备驱动程序,暂时不涉及硬件。在这个例子中,完成以下几项任务:1在目录/dev下建立设备文件/dev/ex1;2打开设备文件/dev/ex1时,打印“exl open!”的信息;3往设备文件写入任意数据时,打印“exl write,”的信息;4从设备文件进行读取操作时,打印“exl read.”的信息。 这个简单的设备驱动程序ex1.c完整的代码如下: #include #include #include #include #

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值