概述
嵌入式Linux具有稳定、可扩充性及开放原始程序代码等特点,可兼容多种处理器和主机,广泛适用于各种产品和应用。但是,交叉编译、设备驱动程序开发/除错,以及更小尺寸等要求对嵌入式Linux开发者来说都是严峻的挑战。为应对这些挑战,针对嵌入式Linux开发的专用工具应运而生,而且发展十分迅速。
但是,许多这类开发工具都不兼容非X86平台,而且也没有很好地实现归档备案或整合。在其它开发环境下,组件间的高度整合并没有完全兑现。因此,要想完全从这些免费的软件组件开始制作一个完整的跨平台开发环境,开发者应意识到这将需要大量的调查、实施、训练和维护方面的工作。
Linux是少数既可以在嵌入式设备上执行也可作为开发环境的操作系统之一。这一特性可让开发者在转向此开发系统之前于常用硬件(比如X86桌面系统)之上开发、除错和测试应用程序和库,因此可减少对标准参考平台和指令集仿真器的依赖。这一技术仅适用于应用程序和库,但不适用于设备驱动程序,因为后者的开发依赖于Linux架构。
开放原始程序代码团体及一些软件供货商可提供设备驱动程序开发工具。由于设备驱动程序比标准应用程序距离硬件更近,因此它们的开发比较困难。所幸的是,Linux桌面系统可以利用一些Windows及其它操作系统所没有的工具。有足够经验开发设备驱动程序的开发人员可能已经习惯用Linux开发系统了。
Linux的快速发展及其桌面方案的不断涌现突显了一个重要问题:所选择的工具方案应如何在不同的Linux分布式系统上执行?它们依赖于主机平台的软件配置吗?
有些Linux工具提供独立于主机平台的开发环境,包括一系列可支持开发工具的应用软件、库和实用程序。这一方法几乎将开发环境与主机配置完全隔离开来,因此主机可以是任何Linux分布式系统,而且任何更新和修改都不会影响开发环境的功能。
这种方法的主要缺点是对储存空间的要求有所增加─约200MB,因为它自己实际上相当于一个微型Linux分布式系统。
可用的工具
一个嵌入式Linux产品的开发需要几个阶段,包括为目标板配置和建构基本Linux OS;除错应用程序、库、核心及设备驱动程序/核心模块;出货前最终方案的最佳化、测试和验证。
有数百种开放原始程序代码开发工具可供选择。只要开发者原意花时间和精力去调查、实施和维护一系列各不相同的工具,总能找出一个完整的解决方案,完成几乎任何开发任务。
图1
开发者必须精确地考虑到这些工具的松散集合能提供什么样的功能,以及需要付出多大的努力才能形成完整的解决方案。"
在Linux应用程序和库的除错方面,GNU Debugger (GDB)作为一种标准已有几年的历史。它是一种命令行程序,由多个不同的图形用户接口前端予以支持,每个前端都能以多种方式提供除错控制功能。尽管GDB不是一个完美的方案,但它足够应对各种除错任务,而且已经得到开放原始程序代码团体的广泛支持。
Linux核心或设备驱动程序的除错要比应用程序的除错繁琐得多。
在做调查时,以下方面应特别注意:
什么除错方法支持要开发产品的硬件?
需要什么核心支持程序?
还需要其它什么支持程序?
除错接口怎么样,如何使用?
该工具需要除错核心模块及处理虚拟地址转换吗?
还需要其它什么工具才能提供完整的方案?
经过进一步的调查,开发者往往发现工具A和工具B并没有提供完全一致的功能,因为它们是在彼此独立的情况下开发的。结果,开发者必须精确地考虑到这些工具的松散集合能提供什么样的功能,还需要付出多大的努力才能形成完整的解决方案。
如果不同处理器类型间的整合、可用性、互通作业性和移植性很关键的话,开发者应考虑购买商用开发工具。这主要是因为将开发一个'免费'方案所付出的努力考虑进去,商用开发工具并不算贵。
Linux BSP
Linux系统有两大主要部份:带设备驱动程序的Linux核心;以及根文件系统,包括系统所需的全部支持应用程序、服务和库。
除了驻留在目标板上的OS组件外,还需要制作一个由GNU Compiler Collection构成的交叉编译环境,为库和二进制程式(binutils)提供支持。
虽然几乎每一个组件都可在网上找到,但在硬件或设备驱动程序支持、整合测试信息、交叉编译指南或软件兼容性方面却很难收集到太多信息。尽管开发者可从网上免费下载各种组件以配置嵌入式Linux操作系统,但每个组件在版本、支持、稳定性和测试等方面的状态则需要开发者自己决定。然后,开发者还要完成最后的OS整合和测试,以及为所开发产品提供终身Linux OS维护。
另一方面,嵌入式Linux供货商所提供的商用Linux板支持工具套件一般都是经过预先安装和测试的,而且提供支持和维护。其它须考虑的因素包括Linux桌面主机将会添加不同的库和核心功能,以及由于组织内的开发者变动而引起的长期维护问题。
品质保证部门一般会执行一系列严格的验证和性能测试,其中包括内存泄漏检测/纠正、程序代码最佳化和任务追踪等。那些想利用开放原始程序代码工具开发针对非X86平台的嵌入式Linux产品开发者将会发现这一任务甚至要比选择开放原始程序代码除错方案难得多。Linux Trace Toolkit、Valgrind工具及其它内存分析程序可完成部份测试和验证任务。但总的来说,它们缺乏关键特性、整合功能及广泛的硬件支持。这些开放原始程序代码分析工具的评估过程与评估除错方案的过程基本相同。
最后的分析就是,一个设计得恰到好处的开发环境应能够供货商用和开放原始程序代码两个世界所具有的最好特性:
* 完整的开发能力;
* 易于使用和整合;
* 大型工程组织的协调控制;
* 品质和支持保证;
* 持续性;
* 按照自己的判断力使用开放原始程序代码的能力。
作者:David Beal 嵌入式Linux总监 Email:dbeal@metrowerks.com Metrowerks公司