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

2016-01-29 17:41 5 1 收藏

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

【 tulaoshi.com - Linux 】

    引 言

    编写 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网络接口设备。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/linux/)

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/linux/)

文档系统特殊文件

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

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

来源:http://www.tulaoshi.com/n/20160129/1502537.html

延伸阅读
标签: PHP
六、中断处理程序的不可重入性 上一节中我们提到有时候需要屏蔽中断,可是为什么要将这个中断屏蔽掉呢?这并不是因为技术上实现不了同一中断例程的并行,而是出于管理上的考虑。之所以在中断处理的过程中要屏蔽同一IRQ来的新中断,是因为中断处理程序是不可重入的,所以不能并行执行同一个中断处理程序。在这里...
标签: windows系统
Win8系统更新设备的驱动程序教程 Win8更新某一设备的驱动程序的方法如下: 1、右键单击桌面空白处,桌面下方弹出所有应用选项,左键单击所有应用。 2、左键单击控制面板。 3、第二种进入控制面板方法。同时按下键盘上 Windows 和" X "键,单击控制面板。 4、左键单击硬件和声音。 5、左键...
大家知道整天都在讨论的CIH病毒利用了VxD技术,掌握了VxD 编程,就等于破除了CIH 病毒神话,彻底清除CIH 病毒。仔细学习这篇文章。 VxD介绍 本文介绍VxD的作用。如果Windows 95提供的标准VxD对你的硬件或者软件不能提供100%的兼容支持,你需要为你的硬件或者软件(包括16位和32位软件) 创建VxD。如果你想让Windows用户使用你的...
标签: PHP
            { 相信大多数人在安装Linux时遇到的第一个难题,就是Linux不认你的显卡。而显卡安装不正确或胡乱选一个驱动程序安上则难以进入X Window。即使勉强进去了,因为分辨率太低,桌面上的文字和图片都放大了好几倍,仍无法使用。我的Linux是Red Hat,显卡是Trident Blade 3D...
标签: windows系统
Windows 8如何更新设备的驱动程序 Win8系统更新某一设备的驱动程序的方法如下: 1、右键单击桌面空白处,桌面下方弹出所有应用选项,左键单击所有应用。 2、左键单击控制面板。 3、第二种进入控制面板方法。同时按下键盘上 Windows 和" X "键,单击控制面板。 4、左键单击硬件和声音。 5...