论述了以Linux作为操作系统的机车显示系统在性能、成本、可靠性等各方面的优势,分析了在构造带图像用户界面(GUI)的嵌入式Linux系统中所用到的关键技术.

0 引言
当前,机车网络控制系统发展迅速,系统硬件和软件平台不断更新,信息在网络上的传输及响应愈发快捷,但是机车显示器作为网络系统上极其重要的人机接口设备,其软件平台仍停留在传统的DOS操作系统,显示应用软件采用DOS下的C语言编程,任何任务如数据的传输、显示、设备参数配置等都包含一个循环处理的控制流程中,从而导致数据刷新相对缓慢,研发过程繁琐,难以控制。Linux为我们提供了一个极有吸引力的选择来解决上述问题,首先,他是多任务的操作系统,我们能够采用消息传递机制来实现任务的调度;其次,在linux上有许多专门为嵌入式系统定制的GUI系统,我们能够充分利用他们所提供的图像函数来实现图像化的编程环境,加快应用软件研发进度;另外,linux更有很多长处,如他有完整免费开放的源代码,可针对具体应用修改和优化系统,内核稳定,适用于多种CPU和多种硬件平台,支持网络等,因此用他来构建机车显示系统操作平台是个不错的解决方案。
1 linux系统平台构建中的关键技术
1.1 系统硬件设计
考虑一般测控系统对嵌入式系统需要比较多的功能有:键盘接口、显示接口、和PC机通信的串行接口、机车网络接网口等。实现的嵌入式系统硬件框图如下:

图2 硬件框图

针对机车显示系统的应用,现在用得比较多的是PC104卡,他采用x86系列的CPU,具备小巧、坚固、扩展性强的特点;另外一种选择是采用以ARM9为核心的高端嵌入式CPU,比如Motorola PowPC系列的MPC823处理器和Intel的Xscale系列处理器等,他们专们为嵌入式产品的研发而设计,具备广泛的外部设备接口,也就是我们常说的片上系统(System on Chip),可用于多种通信显示控制系统,具备更高的性价比。

1.2 系统软件平台设计
由于象Red HatMandrake这样的Linux分发版体积庞大(假如带X-Windows基本都在1G以上),是不可能装在存储容量很小的嵌入式系统上的,因此,需要对linux进行相应的裁减和定制,这其中涉及到的关键技术有:
1) 内核精简及编译

内核负责管理系统的进程、内存、设备驱动程式、文档和网络系统,决定着系统的性能和稳定性。为了减低不必要的复杂性,内核中不采用kernel module支持,把需要的东西直接编译到内核里;假如使用CompactFlash卡作为存储介质,IDE支持是必不可少的,因为LinuxCompactFlash卡为IDE硬盘;内核对网络的支持能够视用户需求进行添加或删除;至于SCSIFloppy之类的外设在我们的嵌入式系统中完全没有必要,编译时可去掉。这样,重新编译过的内核显著减小。

2)虚拟内存机制的屏蔽

linux的一个特性是虚拟内存交换,这一特性使应用程式的内存需求量能够无限制上升,因为操作系统在磁盘中提供了交换空间。而在存储容量相对较小的机车显示系统中,这种特性就用不上了。事实上,在一个需要比较严格的定时系统中,他会导致定时功能的失控。

实现虚拟内存的机制有:地址映射机制、内存分配和回收机制,缓存和刷新机制、请页机制、交换机制、内存共享机制,将实现这些机制的数据结构和函数屏蔽或修改,还要修改和之相关的文档。需要改变的文档主要在/include/linux/mmdrivers/char/fs/ipc/kernel/init目录下。主要的改变如下:和虚存有关的主要的数据结构是vm_area_struct,将进程的mm_struct结构中的vm_area_struct去掉,vm_area_struct利用了vm_ops来抽象出对虚拟内存的处理方法,屏蔽和虚拟内存操作有关的函数。内存映射主要由do_mmap()实现,改写此函数的代码。取消交换操作,屏蔽用于交换的结构和函数声明,连同实现交换的代码。取消内核守护进程kswapd.

另一种比较简单的办法是将系统的交换空间大小简单地置为0,就能够关掉虚拟内存的分页交换机制了。当程式需要内存大于实际的内存时,系统的表现就如同交换空间溢出时相同,程式不会被加载,或当需要过多内存时,malloc调用失败

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!