当前位置: 首页 > 图文教程 > 操作系统 > Unix/Linux > 为系统处理器编写Linux设备驱动程序

Unix/Linux
Linux 备份 恢复方法
Linux玩CS反恐精英的方法
在一个ISO镜像中集成多个不同的linux发行版,可刻盘,可引导
Linux 快捷键使用
Linux DHCP 服务器配置方法介绍
Linux 22端口的修改方法
Linux 记录会话过程的命令
Linux 后台执行程序如何操作?
linux Wget命令来浏览网页的方法
Linux tail命令的巧妙应用
Wine 中文存在很多的乱码怎么解决方法
linux 新手教程之创建锁文件的方法
配置Linux 保证其系统的安全
Linux DHCP协议实现过程
Linux系统下破解SAM密码
linux/unix vi 编辑器用法详解
Linux 误删文件的解决方法
Linux系统下的历史记录删除方法
Red Hat Linux 安全设置指南
Linux基本命令-注销、关机、重启

Unix/Linux 中的 为系统处理器编写Linux设备驱动程序


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-01   浏览: 28 ::
收藏到网摘: n/a

    引 言

    编写 Linux 设备驱动程序无疑是一项复杂的工作。本文将集中介绍非标准硬件的设备驱动程序编写,探讨硬件应用编程接口,并借用 Cirrus Logic EP9312 片上系统嵌入式平台添加设备驱动程序这一案例来进行分析。

    如果有些编程内容未能在本文中涉及,那么读者亦可以查阅相似的设备驱动程序编码,以做参考。还有一种方法,就是检索历史档案或者向 Linux 内核问讯中心去函问讯。

    Linux 概述

    Linux 是 UNIX 操作系统的翻版,1991 年由 Linus Torvalds 最先开发出来,并通过开放源代码开发模式不断得到开放源代码组织的改进。任何使用 Linux 的个人和团体都无需支付任何版权费用。

    只有内核还不够,通常Linux 与一些在内核上运行的视窗环境、视窗管理器和应用捆绑在一起。然而,由于具备了嵌入式平台,视窗环境并非必不可少。与微软的视窗操作系统不同的是,Linux 并不需要一套固定的、必须采用的应用软件或实用程序,因此能够十分符合嵌入式市场终端解决方案的客制化要求。

    操作系统最基本的组成部分包括 1个资源管理器、1个调度程序、1个介于硬件和应用软件之间的接口、1个网络管理器和 1 个文档系统管理器。Linux操作系统也包括这些组成部分,当然还有其他部分。本文主要阐述介于硬件和应用软件之间的接口——设备驱动程序。

    设备驱动程序类型

    设备驱动程序可分为2大类:硬件设备驱动程序和软件设备驱动程序。硬件设备驱动程序和物理硬件设备相连接,如UART设备或IDE设备,而软件设备驱动程序则作为低级数据结构间的接口,或硬件设备驱动程序和高级数据结构间的接口。图形控制台驱动程序就是一个软件设备驱动程序。其中,1个LCD控制器驱动程序装载并管理该显示器,同时图形控制台对即将显示的字符进行着色,并获取从键盘输入的信息。软件设备驱动程序的另一个例子是文档系统执行——文档系统驱动程序采用1个硬盘驱动程序存储数据,而该硬盘驱动程序直接与物理硬盘相连接。

    设备驱动程序的分类

    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个硬盘驱动器。