加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

为系统处理器编写Linux设备驱动程序

发布时间:2016-01-24 19:31:23 所属栏目:Linux 来源:网络整理
导读:引 言 编写 Linux 设备驱动程序无疑是一项复杂的工作。本文将集中介绍非标准硬件的设备驱动程序编写,探讨硬件应用编程接口,并借用 Cirrus Logic EP9312 片上

设备驱动程序的分类

Linux 设备驱动程序有几类:字符、区块、网络和其他。通常,驱动程序根据设备的访问方式分类。然而,也有些设备无法按照此类方式得到区分,因此被归到"其他类型"。字符设备包括那些使数据成为数据流的设备,可通过1个文档系统的特殊文件获得(文档系统的特殊文件将在后文中加以讨论)。鉴于字符设备的特性,该设备只能根据顺序访问数据,即无法往前或往后搜索数据。串行端口和音频设备都是这种类型。图2是Cirrus Logic的EP9312 片上系统结构图,其中Linux字符设备以绿色标出。

区块设备能够照管1个文档系统。该类设备和字符设备一样,也是通过文档系统特殊文件访问。但是,区块设备与文档设备的差异在于其可被随机访问。这意味着,应用软件可查找在该设备中的随机位置。硬盘驱动器和CD驱动器都是区块设备,它们内部的文件指针可以指向设备内部的任何位置,惟一的限制来自设备本身。当区块设备通过文档系统特殊文件访问时,该应用接口即同字符设备一样,只是与内核的接口有所差别而已。图2中的红色部分即为Cirrus Logic EP9312 片上系统结构中Linux区块设备。

网络接口设备既可以是硬件设备,也可以是软件设备。硬件设备如以太网卡,软件设备如低端网络协议堆栈(本文将此类接口视为软件设备)。中间件和协议堆栈有时会被看作是软件设备。网络接口设备是信息包数据的通信设备,一般拥有惟一名称,并且无法通过文档系统特殊文件访问。相反,它们只对内核网络堆栈开放。通常,用户级应用软件可访问内核网络堆栈,而不能访问网络接口设备。图2中的蓝色部分即为Cirrus Logic EP9312 片上系统结构中的Linux网络接口设备。

其他的设备驱动程序还包括数据总线驱动程序(USB, I2C, AMBA等)、 /proc 接口和视频驱动程序。这些类型的设备无法被归入以上的3个类型中,但仍然是与Linux内核接口的设备驱动程序。

文档系统特殊文件

文档系统特殊文件提供了从文档系统访问硬件设备的可行性。这些访问点使用mknod 命令在文档系统/dev 目录中生成。命令如下:mknod 。

其中, 是给予硬件设备的名称,如 /dev/hda1 是给予硬盘驱动器的通用名称。 是设备驱动程序的类型--字符(char)、区块等。 代表设备类别和与之相配的驱动程序。 表示设备类别中的一个实例,并仅对设备驱动程序适用。例如,某个系统中同时采用2个硬盘驱动器,它们都具有同样的主要编号,使用同样的设备驱动软件,但是该设备驱动程序软件却会在内部根据次要编号区分这2个硬盘驱动器。

值得注意的是,并非所有的设备都执行特殊文件接口。如同本文前面已经提及的,网络设备驱动程序就不采用这种接口访问设备。

这种情况下,在设备文档系统里,就会使用 devfs来获得文档设备特殊文件。devfs 目前广受欢迎,但仍然还不是内核的默认功能。如果采用devfs 文档系统,那么就无需mknod 来生成特殊文件了。相反,设备驱动程序软件会使用直接的devfs 文档系统接口在空闲时刻或者设备刚被初始化时生成特殊文件。

编程实例概述

为便于示范非标准嵌入式平台的Linux设备驱动程序,本文将说明EP9312的设备驱动程序实现情况。其中,EP9312 IDE设备驱动程序是区块设备, EP9312触摸屏为字符设备,代码中的高级API/硬件接口、初始化序列和应用软件编码均将予以说明。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读