嵌入式设备上的 Linux 系统开发(三)
——
从用户的观点来看,图形用户界面(GUI)是系统的一个最至关重要的方面:用户通过 GUI 与系统进行交互。所以 GUI 应该易于使用并且非常可靠。但它还需要是有内存意识的,以便在内存受限的、微型嵌入式设备上可以无缝执行。所以,它应该是轻量级的,并且能够快速装入。
另一个要考虑的重要方面涉及许可证问题。一些 GUI 分发版具有允许免费使用的许可证,甚至在一些商业产品中也是如此。另一些许可证要求如果想将 GUI 合并入项目中则要支付版税。
最后,大多数开发人员可能会选择 XFree86,因为 XFree86 为他们提供了一个能使用他们喜欢的工具的熟悉环境。但是市场上较新的 GUI,象 Century Software 的 Microwindows(Nano-X)和 Trolltech 的 QT/Embedded,与 X 在嵌入式 Linux 的竞技舞台中展开了激烈竞争,这主要是因为它们占用很少的资源、执行的速度很快并且具有定制窗口构件的支持。
让我们看一看这些选项中的每一个。
Xfree86 4.X(带帧缓冲区支持的 X11R6.4)
XFree86 Project, Inc. 是一家生产 XFree86 的公司,该产品是一个可以免费重复分发、开放源码的 X Window 系统。X Window 系统(X11)为应用程序以图形方式进行显示提供了资源,并且它是 UNIX 和类 UNIX 的机器上最常用的窗口系统。它很小但很有效,它运行在为数众多的硬件上,它对网络透明并且有良好的文档说明。X11 为窗口管理、事件处理、同步和客户机间通信提供强大的功能 — 并且大多数开发人员已经熟悉了它的 API。它具有对内核帧缓冲区的内置支持,并占用非常少的资源 — 这非常有助于内存相对较少的设备。X 服务器支持 VGA 和非 VGA 图形卡,它对颜色深度 1、2、4、8、16 和 32 提供支持,并对渲染提供内置支持。最新的发行版是 XFree86 4.1.0。
它的优点包括:
帧缓冲区体系结构的使用提高了性能。
占用的资源相对很小 — 大小在 600 K 到 700 K 字节的范围内,这使它很容易在小型设备上运行。
非常好的支持:在线有许多文档可用,还有许多专用于 XFree86 开发的邮递列表。
X API 非常适合扩展。
它的缺点包括:
比最近出现的嵌入式 GUI 工具性能差。
此外,当与 GUI 中最新的开发 — 象专门为嵌入式环境设计的 Nano-X 或 QT/Embedded — 相比时,XFree86 似乎需要更多的内存。
Microwindows
Microwindows 是 Century Software 的开放源代码项目,设计用于带小型显示单元的微型设备。它有许多针对现代图形视窗环境的功能部件。象 X 一样,有多种平台支持 Microwindows。
Microwindows 体系结构是基于客户机/服务器的并且具有分层设计。最底层是屏幕和输入设备驱动程序(关于键盘或鼠标)来与实际硬件交互。在中间层,可移植的图形引擎提供对线的绘制、区域的填充、多边形、裁剪以及颜色模型的支持。
在最上层,Microwindows 支持两种 API:Win32/WinCE API 实现,称为 Microwindows;另一种 API 与 GDK 非常相似,它称为 Nano-X。Nano-X 用在 Linux 上。它是象 X 的 API,用于占用资源少的应用程序。
Microwindows 支持 1、2、4 和 8 bpp(每像素的位数)的 palletized 显示,以及 8、16、24 和 32 bpp 的真彩色显示。Microwindows 还支持使它速度更快的帧缓冲区。Nano-X 服务器占用的资源大约在 100 K 到 150 K 字节。
原始 Nano-X 应用程序的平均大小在 30 K 到 60 K。由于 Nano-X 是为有内存限制的低端设备设计的,所以它不象 X 那样支持很多函数,因此它实际上不能作为微型 X(Xfree86 4.1)的替代品。
可以在 Microwindows 上运行 FLNX,它是针对 Nano-X 而不是 X 进行修改的 FLTK(快速轻巧工具箱(Fast Light Toolkit))应用程序开发环境的一个版本。本文中描述 FLTK。
Nano-X 的优点包括:
与 Xlib 实现不同,Nano-X 仍在每个客户机上同步运行,这意味着一旦发送了客户机请求包,服务器在为另一个客户机提供服务之前一直等待,直到整个包都到达为止。这使服务器代码非常简单,而运行的速度仍非常快。
占用很小的资源
Nano-X 的缺点包括:
联网功能部件至今没有经过适当地调整(特别是网络透明性)。
还没有太多现成的应用程序可用。
与 X 相比,Nano-X 虽然近来正在加速开发,但仍没有那么多文档说明而且没有很好的支持,但这种情形会有所改变。
Microwindows 上的 FLTK API
FLTK 是一个简单但灵活的 GUI 工具箱,它在 Linux 世界中赢得越来越多的关注,它特别适用于占用资源很少的环境。它提供了您期望从 GUI 工具箱中获得的大多数窗口构件,如按钮、对话框、文本框以及出色的“赋值器”选择(用于输入数值的窗口构件)。还包括滑动器、滚动条、刻度盘和其它一些构件。
针对 Microwindows GUI 引擎的 FLTK 的 Linux 版本被称为 FLNX。FLNX 由两个组件构成:Fl_Widget 和 FLUID。Fl_Widget 由所有基本窗口构件 API 组成。FLUID(快速轻巧的用户界面设计器(Fast Light User Interface Designer, FLUID))是用来产生 FLTK 源代码的图形编辑器。总的来说,FLNX 是能用来为嵌入式环境创建应用程序的一个出色的 UI 构建器。
Fl_Widget 占用的资源大约是 40 K 到 48 K,而 FLUID(包括了每个窗口构件)大约占用 380 K。这些非常小的资源占用率使 Fl_Widget 和 FLUID 在嵌入式开发世界中非常受欢迎。
优点包括:
习惯于在象 Windows 这样已建立得较好的环境中开发基于 GUI 的应用程序的任何人都会非常容易地适应 FLTK 环境。
它的文档包括一本十分完整且编写良好的手册。
它使用 LGPL 进行分发,所以开发人员可以灵活地发放他们应用程序的许可证。
FLTK 是一个 C++ 库(Perl 和 Python 绑定也可用)。面向对象模型的选择是一个好的选择,因为大多数现代 GUI 环境都是面向对象的;这也使将编写的应用程序移植到类似的 API 中变得更容易。
Century Software 的环境提供了几个有用的工具,诸如 ScreenToP 和 ViewML 浏览器。
它的缺点是:
普通的 FLTK 可以与 X 和 Windows API 一同工作,而 FLNX 不能。它与 X 的不兼容性阻碍了它在许多项目中的使用。
Qt/Embedded
Qt/Embedded 是 Trolltech 新开发的用于嵌入式 Linux 的图形用户界面系统。Trolltech 最初创建 Qt 作为跨平台的开发工具用于 Linux 台式机。它支持各种有 UNIX 特点的系统以及 Microsoft Windows。KDE — 最流行的 Linux 桌面环境之一,就是用 Qt 编写的。
Qt/Embedded 以原始 Qt 为基础,并做了许多出色的调整以适用于嵌入式环境。Qt Embedded 通过 Qt API 与 Linux I/O 设施直接交互。那些熟悉并已适应了面向对象编程的人员将发现它是一个理想环境。而且,面向对象的体系结构使代码结构化、可重用并且运行快速。与其它 GUI 相比,Qt GUI 非常快,并且它没有分层,这使得 Qt/Embedded 成为用于运行基于 Qt 的程序的最紧凑环境。
Trolltech 还推出了 Qt 掌上机环境(Qt Palmtop Environment,俗称 Qpe)。Qpe 提供了一个基本桌面窗口,并且该环境为开发提供了一个易于使用的界面。Qpe 包含全套的个人信息管理(Personal Information Management (PIM))应用程序、因特网客户机、实用程序等等。然而,为了将 Qt/Embedded 或 Qpe 集成到一个产品中,需要从 Trolltech 获得商业许可证。(原始 Qt 自版本 2.2 以后就可以根据 GPL 获得 。)
它的优点包括:
面向对象的体系结构有助于更快地执行
占用很少的资源,大约 800 K
抗锯齿文本和混合视频的象素映射
它的缺点是:
Qt/Embedded 和 Qpe 只能在获得商业许可证的情况下才能使用。
结束语
嵌入式 Linux 开发正迅速地发展着。您必须学习并从引导装载程序和分发版到文件系统和 GUI 中的每一个事物的各种选项中作出选择。但是要感谢有这种选择自由度以及非常活跃的 Linux 社区,Linux 上的嵌入式开发已经达到了新的境界,并且调整模块以适合您的规范从未比现在更简单。这已经导致出现了许多时新的手持和微型设备作为开放盒,这是件好事 — 因为事实是您不必成为一个专家从这些模块中进行选择来调整您的设备以满足您自己的要求和需要。
我们希望这篇对嵌入式 Linux 领域的介绍性概述能激起您进行试验的欲望,并且希望您将体会摆弄微型设备的乐趣以满足您的爱好。为进一步有助于您的项目,请参阅下面的“参考资料”,链接到有关我们这里已经概述的技术的更深入的信息。
参考资料
引导:
如需获得对 vmlinux 和 zimage 之间区别的极好解释,请在 Alessandro Rubini 编写的“Kernel Configuration: dealing with the unexpected(Linux Magazine)的一文中找到“Booting your kernel”一节。
有关内核、映像和引导过程的更多信息,请阅读中央昆士兰大学(Central Queensland University)的系统管理文本的第 13 章。
要进一步了解引导过程的工作原理,请参阅 ROLO: A Developer’s Guide,它讨论了在不利用 BIOS 的情况下引导 Linux(Embedded Linux Works,2001 年 6 月)。
小型分发版:
The Embedded Linux Distributions Quick Reference Guide 涵盖了许多商业的和开放源码的分发版(Linux Devices,2001 年 8 月)。
请查看另一个详尽的分发版和有用的工具的清单(Linux-embedded.com)。
工具链:
Wiki 工具链页面包含到本文提到的所有三个工具链的链接,还有对它们的评论。
设备驱动程序:
Memory Technology Device (MTD) Subsystem for Linux 的目的是简化内存设备(特别是闪存设备)的驱动程序的创建。
Vipin Malik 编写的 The Linux MTD, JFFS HOWTO 将帮助您使 MTD 和 JFFS2 一起工作。
Linux for PowerPC Embedded Systems HOWTO 有一个很好的设备驱动程序清单。
理解 Linux device drivers 有助于理解本篇介绍性文章(Penguin Magazine)。
要精通 Linux 设备驱动程序,请阅读 O’Reilly 的 Linux Device Drivers,第 2 版一书。
有用的工具:
请查看 LART 上的 Jflash-linux。
Binutils、GCC 和 Glibc 都可从 Free Software Foundation 下载获得。
许多有用的下载都可从 Netwinder.org 获得,这是一个致力于 NetWinder 平台上开发工作的志愿者站点。
请在 Mark Nielsen 写得非常棒的 How to use a Ramdisk for Linux 一文中阅读有关 Ramdisk 的所有信息。
FLNX 是以 FLTK(快速轻巧的工具箱)为基础的。
文件系统:
第二版扩展文件系统 Ext2fs 的主页在 SourceForge。
Red Hat 英国公司的 David Woodhouse 概述了大量有关 JFFS2:日志闪存文件系统,第 2 版的背景知识。
Vipin Malik 的 JFFS - A practical guide 一文也详细讨论了 JFFS,包括垃圾收集的问题(Embedded Linux Works,2001 年 5 月)。
您可以在 Linux HeadQuarters 阅读更多有关 tmpfs 的信息。
Cliff Brake 和 Jeff Sutherland 编写的 Flash Filesystems for Embedded Linux Systems 一文论述了用于闪存设备的更多文件系统(Embedded Linux Journal)。
GUI:
Xfree86 是 X 开发的主页。
在 Microwindows 站点上可以找到有关 Microwindows 和 Nano-X 的信息。
请查看一篇对 Microwindows 的一些缺点(GNOME gtk 开发人员的邮递列表)的讨论(时间比较长了)。
您将在 Microwindows Project Links 上找到丰富的 Microwindows/Nano-X 链接。
在 Trolltech 上查找有关 Qt/Embedded 的更多信息。
The Embedded Linux GUI/Windowing Quick Reference Guide 中有丰富的链接(Linux Devices,2002 年 2 月)。
一般参考资料:
General Public License 或 GPL 确保用户复制、分发和修改软件的权利。
ARM Linux 是您了解有关 Linux 用于 ARM 处理器的信息的一个非常好的站点。它由 ARM 的创建者 Russell King 来维护。
Penguinppc.org 是关于 Linux 用于 PowerPC 系列处理器的的主页。该站点上有一个关于为基于 PPC 的体系结构建立工具链的资料丰富的教程。
Linux Devices 是一个非常全面的站点,它包含有关 Linux 和嵌入式开发的出版发行、快速参考、新闻和特色报告等各种信息。
Silicon Penguin 列表站点上拥有嵌入式 Linux 参考资料的详尽集合。
ARMLinux - the book 可从 Aleph One 上获得。您可以定购一本,也可以在线阅读。
嵌入式 Linux 协会(Embedded Linux Consortium)是一个非赢利的互助协会,它欢迎致力于嵌入式 Linux 领域的开发人员成为会员。
访问 IBM 关于嵌入式 Linux 的主页,获得新闻、产品和开发人员参考资料。
IBM 的 Linux wristwatch 是运行 Linux 的微型嵌入式设备的示例;本文的作者之一,Vishal Kulkarni 也参与了它的研发。请在 IBM’s Linux Watch: The Challenge of Miniaturization(PDF 格式),或本文(FreeOS.com,2001 年 3 月)中阅读有关它的信息。
在 developerWorks 上浏览更多 Linux 参考资料。
在 developerWorks 上浏览更多无线领域的参考资料。
评论