 韩冷(1977-)
男,硕士研究生,研究方向为网络控制技术。 1 引言
过去的十年中,嵌入式系统的开发发生了很大的变化。以前嵌入式设备往往是一个孤立的、资源有限的系统,它们追求的是在有限的价格上满足一定的功能性要求。通常它们采用那些功能并不强大的CPU。而今天人们对嵌入式设备在智能化和互连性上提出了要求,这使得嵌入式设备不再是孤立的,它们要通过互联网、无线或是其他的方式实现相互连 接,同时它们也是软件生态系统(software ecosystem)的一部分。嵌入式设备今天变成了称之为“等同PC”的系统。它们必须运行很多相同的应用程序,它们需要采用相同的方式实现互连或是在某些情况下增强互连性。
而近年来在国内,支持802.11b的无线网络已经日渐普及,无线网卡价格大幅跌落,给广大的无线电子产品设计者提供了更多的选择,极大丰富了设计和开发者的想象空间,逐渐设计出具有无线网络数据共享、无线数据采集、无线告警等功能的最具竞争力的“后PC时代”产品。
与此同时,配备一个优秀的图形用户界面,使产品和用户能进行友善可靠的交互也已成为开发工作中非常紧迫的要求。本系统中使用的MiniGUI就是嵌入式Linux系统下一个轻量级的图形用户界面支持系统,目前已比较成熟,并已被用到很多项目的实际开发中。
2 无线终端的硬件系统设计
无线终端设备的硬件模块如图1所示。
• PowerPC与Flash,RAM组成最小运行系统,提供无线终端设备软件运行的环境。PowerPC还提供一个以太网端口和一个RS-232串行口,用于程序的调试、修改、编译及烧写。
• MPC823系列处理器是迄今为止摩托罗拉推出的PowerQUICC家族中,被广泛使用的通讯处理器。它是嵌入式处理器内核(embedded PowerPC core)和通讯处理器模块(CPM)的双处理器的结构,片内的数据和指令cache,I/O脚的数目,一个实时时钟,低功耗特性和一个增强的存储控制器,性能远胜于68360 QUICC。

图1 无线终端的硬件模块
3 软件系统框架结构
用户应用程序是最上层的开发,其交互界面直接通过MiniGUI图形系统的API接口函数实现。MiniGUI交叉编译安装后一般以库的形式存放在操作系统/powerpc-linux/local/lib文件目录下。 该嵌入式系统的框架结构如图2所示。
 图2 无线终端设备的软件模块
4 Linux设备驱动
系统调用是操作系统内核和应用之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。Linux设备驱动程序为应用程序屏蔽了硬件的细节,在应用程序看来,Linux硬件设备只是一个设备文件,应用程序可以像操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一部分,它完成以下的功能:
• 对设备初始化和释放; • 把数据从内核传送到硬件和从硬件读取数据; • 读取应用程序传送给设备文件的数据和回送应用程序请求的数据; • 检测和处理设备出现的错误。
Linux系统的设备分为三种:字符设备(Char Device)、块设备(Block Device)和网络设备(Network Device)。字符设备是指存取时没有缓存,只能顺序访问的设备。块设备的读/写都有缓存来支持,并且块设备必须能够随机存取,字符设备则没有这个要求。典型的字符设备包括鼠标、键盘、串行口等。块设备主要包括硬盘、软盘设备、CDROM等。文件系统必须安装在块设备上。块设备主要是针对磁盘等慢速设备设计的,以免耗费过多的CPU时间来等待。
网络设备在Linux里做专门的处理。Linux的网络系统主要是基于BSD Unix的Socket机制。在系统和驱动程序之间定义有专门的数据结构(sk_buff)进行数据的传递。系统里支持对发送资料和接收资料的缓存,提供流量控制机制,提供对多协议的支持。
Linux给每个设备都分配一个主设备号(Major Number)和次设备号(Minor Number)。主设备号一般用来定义这个设备的类型。次设备号是一个8位的数字,它是指定一个特定的设备(主设备号指定设备的类型)。Linux具有设备无关性,它把每个设备都抽象为文件系统的一个文件。Linux为每个设备在/dev目录下建立一个文件。
4.1 无线网络设备驱动编程
Linux中的网络设备又被称为网络接口,作为其中的三类设备之一,它有其非常特殊的地方。网络接口在Linux的文件系统中不存在一个对应的文件,而是在核心中用一个net_device数据结构表示的。Linux网络驱动程序的体系结构如图3所示。可以划分为四层,从上到下分别为协议接口层,网络设备接口层,再就是提供实际功能的设备驱动功能层,以及网络设备和网络媒介层。在设计网络驱动程序时,最主要的工作就是完成设备驱动功能层,使其满足自己所需的功能。
 图3 网络设备驱动结构
在Linux中所有网络设备都抽象为一个接口,这个接口提供了对所有网络设备的操作集合。由数据结构struct net_device来表示网络设备在内核中的运行情况,即网络设备接口。它既包括纯软件网络设备接口,如环路(Loopback),也包括硬件网络设备接口,如无线网卡。而由以dev_base为头指针的设备链表来集体管理所有网络设备,该设备链表中的每个元素代表一个网络设备接口。数据结构net_device中有很多供系统访问和协议层调用的设备方法,包括初始化,打开和关闭网络设备的open和stop函数,处理数据包发送的hard_start_xmit函数,以及中断处理函数等。
由于采用PCMCIA接口的无线网卡,首先是向内核注册该PCMCIA设备(register_pccard_driver),然后driver_info_t数据结构中的attach函数指针所指向的侦测函数来初始化该PCMCIA设备,并且同时注册和初始化该网络设备。
4.2 字符设备驱动
|