嵌入式Linux操作系统以价格低廉、功能强大、易于移植等特点而正在被广泛采用,并已成为一种新兴力量……
1. 前言
随着Internet的飞速发展,网络应用越来越广泛,对各种工业控制设备的网络功能要求越来越高。我们希望工业控制设备能够支持TCP/IP及其他Internet协议,使我们能够通过用户熟悉的浏览器查看设备状态、设置设备参数,或者将设备采集到的数据通过网络传送到Windows或Unix/Linux服务器上的数据库中。因此,要求工控系统必须具备两方面的功能:一方面要在现场完成复杂的测控任务,通常一些任务具有一定的实时性的要求;另一方面要求测控系统能够与某一类型的控制网相连,实现远程监控。在目前应用的大多数测控系统中,嵌入式系统的硬件采用8/16位的单片机;软件多采用汇编语言编程,仅包含一些简单的循环处理的控制流程;单片机与单片机或上位机之间的通信通过RS232、RS485来组网。这些网络存在通信速度慢、联网功能差、开发困难等问题。工业以太网已逐步完善,在工业控制领域获得越来越多的应用。工业以太网使用了TCP/IP协议,便于联网,并具有高速控制网络的优点。
现在,32位嵌入式CPU的价格下降,性能提高,为嵌入式系统的广泛应用提供了可能性。限制嵌入式系统发展的瓶颈突出表现在软件方面。尽管从20世纪80年代末开始,陆续出现了一些嵌入式操作系统,比较著名的有Vxwork、pSOS、Neculeus和WindowsCE等,但是,这些专用操作系统都是商业化产品,高昂的价格使许多低端产品的小公司望而却步,而且,源代码封闭性也大大限制了开发者的积极性。嵌入式系统需要一套高度简练、界面友善、质量可靠、应用广泛、易开发、多任务、价格低廉的操作系统。如今,业界已经达成共识,即采用嵌入式linux是大势所趋。嵌入式Linux操作系统以价格低廉、功能强大又易于移植而正在被广泛采用。
2. 嵌入式linux技术
嵌入式Linux是按照嵌入式操作系统的要求而设计的一种小型操作系统。由一个Kernel(内核)及一些根据需要进行定制的系统模块组成。Kernel很小,一般只有几百KB左右,即使加上其他必需的模块和应用程序,所需的存储空间也很小。它有多任务、多进程的系统特征,有些还具有实时性。一个小型的嵌入式Linux系统只需要引导程序、Linux微内核、初始化进程3个基本元素。运行嵌入式Linux的CPU可以是x86、Alpha、Sparc、MIPS、PPC等。与这些芯片搭配的主板都很小,与一张PCI卡大小相当,有的甚至更小。嵌入式Linux所需的存储器不是软磁盘、硬盘、Zip盘、CD-ROM、DVD这些众所周知的常规存储器,它使用Rom、CompactFlash、MSystems的DiskOnChip、Sony的MemoryStick、IBM的MicroDrive等体积极小(与主板上的BIOS大小相近),存储容量不太大的存储器。它的内存可以使用普通的内存,也可以使用专用的RAM。
与其他嵌入式操作系统相比,Linux的源代码是开放的,不存在黑箱技术。Linux作为一种可裁剪的软件平台系统,是发展未来嵌入式设备的绝佳资源。在保持Linux内核系统更小、更稳定、更具价格竞争力等优势的同时,对系统内核进行实时性优化,使之适应于对工业控制领域高实时性的要求。这是嵌入式linux操作系统更适合在嵌入式工控系统中应用。
标准的Linux内核通常驻留在内存中,每一个应用程序都是从磁盘运到内存上执行。当程序结束后,它所占用的内存就被释放,程序就被下载。而在一个嵌入式系统里,可能没有磁盘。有两种途径可以消除对磁盘的依赖:第一种是在一个简单的系统里,当系统启动后,内核和所有的应用程序都在内存里。这就是大多数传统的嵌入式系统工作模式,它同样可以被Linux支持;第二种就是linux所特有的功能,常用于嵌入式系统中。
因为Linux有能力“加载"和“卸载"程序,一个嵌入式系统就可以利用它来节省内存。考虑一个比较典型的系统有大约8MB~16MB的闪存和8MBRAM,那么,闪存可以被用作文件系统。用闪存驱动程序作为从闪存到文件系统的界面。作为一种选择,也可以用一个闪存磁盘。这是用闪存来摆脱系统对一个磁盘的需求(依赖)。使用这种方式的有DiskOnChip及CompactFlash卡。
FlashMemory可以作为一个文件系统。FlashMemory驱动程序用来连接FlashMemory和文件系统。这种Flash部件用软件仿真磁盘。程序都以文件形式存储在Flash文件中,需要时可以装入内存。这种动态的、根据需要加载的能力是支持其他一系列功能的重要特征,它使初始化代码在系统引导后被释放。Linux同样有很多内核外运行的公用程序。这些程序通常在初始化时运行一次,以后就不再运行。而且,这些公用程序可以用它们相互共有的方式,一个接一个地按顺序运行。这样,相同内存空间可以被反复使用以“召入”每一个程序,就象系统引导一样。这的确可以节省内存,特别是那些配置一次就不再更改的网络堆栈,如果Linux可加载模块的功能包括在内核里,驱动程序和应用程序就可以被加载。它可以检查硬件环境并且给硬件装上相应的软件。这就消除了用一个程序占用许多FlashMemory来处理多种硬件的复杂性。软件的升级更模块化,可以在系统运行的时候在Flash上升级应用程序和可加载驱动程序。配置信息和运行时间参数可以作为数据文件储存在Flash中。
3. 嵌入式工业控制网络的实现方案
基于嵌入式linux的工控系统以嵌入式微处理器为核心,运行嵌入式Linux操作系统。应用程序可通过网络进行更新,通过键盘进行人机对话,数据可通过LCD现场显示,重要数据可以文件形式保存在Flash等闪存存储器中,数据和报警信息可通过串口向上位机传输,也可通过以太网口向工业以太网或Internet发布信息,用户还可通过网络实现远程监控、远程维护。更为关键的是可充分利用Internet上已有的软件和协议,如ftp、http、Apache、PHP、MySQL等应用程序,迅速搭建前台数据采集系统、测控系统和后台管理系统的通信。其优点是不需要专用的通信线路,可用现成的Internet网络传送数据;可以传送音响和图像;Internet的协议是现成和公开的,大到几十MB的MicrosoftIE浏览器,小到只有600KB的Mosaic浏览器都可以对网络数据进行读取。系统框图如图1所示。
4. 系统设计
4.1硬件设计
嵌入式运行的硬件平台是开发应用程序的基础,整个开发板基于Intel处理器架构。嵌入式系统硬件结构框图如图2所示。
针对网络服务应用,选择Intel系列的strongARMMCU。StrongARMSA1110是一款高性能、低价位、高集成度的微处理器,为嵌入式应用而设计。SA-1110结合了最高以206MHz运行的32位intel StrongARM*RISC处理器,速度达到100MHz的存储器总线和灵活的存储器控制器,支持SDRAM、SMROM及variablelatencyI/O设备,为系统设计提供灵活性和较高的存储带宽,适合较大流量的网络应用,为运行Linux提供硬件上的支持。在开发板上还集成了32MB的SDRAM、8MB的FLASH、10baseT以太网接口、RS232/RS485串口、I/O接口以及扩展FLASH卡存储等。
10/100M以太网接口:以太网口一通过HUB直接连接内部局域网;以太网口二通过modem接入Internet。CF扩展口:通过CF扩展接口外界CF卡,提供应用存储,并可进行容量扩展。IDE接口:视不同场合需要,连接电子盘(DOM)或者硬盘,存储应用数据及信息等。串行接口:提供调试和远程监控。DiskOnChip:固化存储系统启动程序(BIOS)及存储嵌入式LINUX操作系统、应用软件系统和系统配置参数。存储空间可以扩展。
4.2软件设计
嵌入式操作系统是整个嵌入式系统的核心。如前所述,嵌入式系统在内存容量和存储容量不足的情况下,必须对linux进行裁减设计。在裁剪过程中涉及两种主要技术,其一是内核的精简。标准Linux是面向PC的,集成了许多PC需要而嵌入式系统并不需要的功能。对一些可独立加上或卸下的功能块,可在编译内核时仅保留嵌入式系统所需的功能支持模块,删除不需要的功能。这样,重新编译过的内核显著减小。
其二是虚拟内存机制的屏蔽。分析发现,虚拟内存是导致Linux实时性不强的原因之一。在工业控制中一些任务要满足一定的实时性的要求,屏蔽内核的虚拟内存管理机制可以增强Linux的实时性。当要更改内核的某项机制时,一般不必大规模的改写代码,可采用有条件编译的方法。
同时,由于linux系统对应用进程进行公平的时间分配调度算法,这一算法不能保证系统的实时性要求。因此,要求对其进行更改,一般有两种途径:第一种是通过POSIX方法,另一种便是通过底层编程。我们通过linux的实时有名管道(FIFO)的特殊队列来处理实时任务的先后顺序。实时有名管道与实时任务一样从不换页,大大减少由于内存翻页而造成的不确定延时。图3示出实时Linux工作原理框图。
4.3设备驱动程序
确定了内核的基本功能后,就要为特定的设备编写驱动程序,可按照在Linux下编写驱动程序的规则编写。编写的设备驱动程序应具有以下功能:对设备初始化和释放;把数据从内核传到硬件和从硬件读取数据;读取应用程序传递给设备文件的数据和回送应用程序请求的数据;检测和处理设备出现的错误。
4.4开发基于闪存的文件系统
应用程序和重要数据以文件的形式被存放在闪存文件系统中。JFFS2文件系统是日志结构化的,这意味着它基本上是一长列节点。每个节点包含有关文件的部分信息。JFFS2是专门为象闪存芯片那样的嵌入式设备创建的,所以,它的整个设计提供了更好的闪存管理,具有其他文件系统不可比拟的优点。
JFFS2在扇区级别上执行闪存擦除/写/读操作要比Ext2文件系统好。
JFFS2提供了比Ext2fs更好的崩溃/掉电安全保护。当需要更改少量数据时,Ext2文件系统将整个扇区复制到内存(DRAM)中,在内存中合并新数据,并写回整个扇区。而JFFS2可以随时更改需要的,不是重写整个扇区,并且具有崩溃/掉电安全保护功能。
实现上述步骤后,一个小型Linux操作系统就构成了。构造后的Linux包括进程管理、内存管理和文件管理,支持多任务并行,有完整的TCP/IP协议栈,Linux内建有对以太网控制器的支持,可以通过以太网口连到以太网上,实现远程配置与监控。
将裁剪好的内核移植到所用的目标板上,通常移植内核时,首先要将内核编译成针对该处理器的目标代码。根据不同的硬件体系,移植的启动代码不同。一些内核程序要改写,涉及到编写Linux的引导代码和修改与体系结构相关部分的代码,主要是启动引导、内存管理和中断处理部分。将MSystem公司的DOC2000作为系统的启动设备,引导代码放在DOC上。系统加电后,由引导代码进行基本的硬件初始化,然后把内核映象装入内存运行。
最后,将调试好的内核和应用程序烧录到闪存中。裁剪后的Linux已成功移植到目标平台上。这样,在可启动可运行的开发系统中可以根据具体的应用开发应用程序,如数据采集模块,数据处理模块,通信和数据发布模块等。
5小结
如今,互联网的应用正在转向以嵌入式设备为中心。工控系统与Internet的结合实现网络化是一种必然的趋势。我们把嵌入式linux微内核嵌入到基于StrongARMSA111032位MCU系统中,通过构造TCP/IP多种网络协议和基本网络通信协议,充分利用嵌入式操作系统对底层硬件和网络协议的支持,并对工控系统实时性的要求改造linux内核和虚拟内存机制来保证测控任务完成的实时性和可靠性,在工业控制领域有很好的应用前景,具有开发周期短、系统稳定可靠、适应性强等特点。