老古开发网首页
导航:老古开发网首页文章索引文章分类综合电子→[为多功能片上系统处理器编写 Linux 设备驱动程序]
| -文章搜索 - 最新文章 - |

为多功能片上系统处理器编写 Linux 设备驱动程序

发布时间:2005年9月21日 点击次数:163
来源:EDN电子设计技术   作者:Tanya Ortega,Cirrus Logic公司系统软件工程师
 
为多功能片上系统处理器编写 Linux 设备驱动程序
 引 言
  编写 Linux 设备驱动程序无疑是一项复杂的工作。本文将集中介绍非标准硬件的设备驱动程序编写,探讨硬件应用编程接口,并借用 Cirrus Logic EP9312 片上系统嵌入式平台添加设备驱动程序这一案例来进行分析。
  如果有些编程内容未能在本文中涉及,那么读者亦可以查阅相似的设备驱动程序编码,以做参考。还有一种方法,就是检索历史档案或者向 Linux 内核问讯中心去函问讯。
  Linux 概述
  Linux 是 UNIX 操作系统的翻版,1991 年由 Linus Torvalds 最先开发出来,并通过开放源代码开发模式不断得到开放源代码组织的改进。任何使用 Linux 的个人和团体都无需支付任何版权费用。


  只有内核还不够,通常Linux 与一些在内核上运行的视窗环境、视窗管理器和应用捆绑在一起。然而,由于具备了嵌入式平台,视窗环境并非必不可少。与微软的视窗操作系统不同的是,Linux 并不需要一套固定的、必须采用的应用软件或实用程序,因此能够十分符合嵌入式市场终端解决方案的客制化要求。
  操作系统最基本的组成部分包括 1个资源管理器、1个调度程序、1个介于硬件和应用软件之间的接口、1个网络管理器和 1 个文档系统管理器。Linux操作系统也包括这些组成部分,当然还有其他部分。本文主要阐述介于硬件和应用软件之间的接口--设备驱动程序。
  图1解释了用户应用软件、操作系统内核和硬件平台之间的区别。
  设备驱动程序类型
  设备驱动程序可分为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 <device name> <device type> <major number> <minor number>
  其中, <device name> 是给予硬件设备的名称,如 /dev/hda1 是给予硬盘驱动器的通用名称。<device type> 是设备驱动程序的类型--字符(char)、区块等。<major number> 代表设备类别和与之相配的驱动程序。<minor number> 表示设备类别中的一个实例,并仅对设备驱动程序适用。例如,某个系统中同时采用2个硬盘驱动器,它们都具有同样的主要编号,使用同样的设备驱动软件,但是该设备驱动程序软件却会在内部根据次要编号区分这2个硬盘驱动器。
  值得注意的是,并非所有的设备都执行特殊文件接口。如同本文前面已经提及的,网络设备驱动程序就不采用这种接口访问设备。
        这种情况下,在设备文档系统里,就会使用 devfs来获得文档设备特殊文件。devfs 目前广受欢迎,但仍然还不是内核的默认功能。如果采用devfs 文档系统,那么就无需mknod 来生成特殊文件了。相反,设备驱动程序软件会使用直接的devfs 文档系统接口在空闲时刻或者设备刚被初始化时生成特殊文件。
  编程实例概述
  为便于示范非标准嵌入式平台的Linux设备驱动程序,本文将说明EP9312的设备驱动程序实现情况。其中,EP9312 IDE设备驱动程序是区块设备, EP9312触摸屏为字符设备,代码中的高级API/硬件接口、初始化序列和应用软件编码均将予以说明。

欢迎进入老古论坛进行讨论
[综合电子] 相关文章:
EDA技术加快仿真速度
简介:
最近,EDA软件提供商Xoomsys(Cupertino,美国加州)在客户的电路板上进行了演示,结果表明其仿真技术使吞吐量比现有的解决方案高15~20倍,而精确度却没有任何损失,也不用改变输入和输出。对于像完全提取的时钟子系统、电源网格、PLL和其他难以仿真的电路,这种技术使对大规模电路的晶体管级仿真成为可能。在这些电路中,仿真的精确度是首要因素。 这种技术能够分割紧密耦合的大电路,并将用于仿真的分割结果分配给多个独立的处理器,例如最近的测试中就使用了10个处理器的Linux集群,仿真速度还随处理器数量的增加而提高。该技术将接口错误减至最少,使工程师可以在投片前进行完整的验证。......

能缩小尺寸且不影响效果的天线技术
口香糖大小的开放源码SBC
MCP推动高容量存储器在便携设备中的应用
蓝色磷光材料的突破加速OLED发展
从IC China 2005看产品最新动态
家庭网络技术迅速向前发展
可同时传递两重内容的LCD技术
采用微型管道输送液态冷却剂的芯片
便携式示波器兼具高性能和低价位
 
下一个:[综合电子]基于ARM7内核的精密微控制器解决方案
简介:
基于ARM7内核的精密微控制器解决方案 美国模拟器件公司(ADI)最近推出了型号为ADμC702x系列的嵌入式单芯片数字可编程精密微控制器解决方案。该方案集成了一个功能强大的32位RISC(精简指令集计算机)微控制器(MCU)和精密数据转换器,其中包括16通道、快速、12位分辨率模数转换器(ADC)和4个12位分辨率数模转换器(DAC),特别适合工业自动化传感器、光网络发射器和汽车车体控制电路等应用中的控制和监视。   ADI公司中国技术支持中心经理廖文帅介绍说,目前,微控制器(MCU)市场已开始由8位体系结构向16位和32位体系结构升级。因此,MCU需要具有更强的处理能力、更多的控制......
 

上一个:[综合电子]风力发电技术与功率半导体器件及控制系统

老古开发网版权所有 2006年9月 asp.Net V2.0 设计:老古
页面缓存:否 执行时间:16毫秒