技术中心
 
 

谁将引领嵌入式Linux开发?

   日期:2008-01-09     作者:管理员    

       近年来,计算机技术、通信技术及小型电子设备制造业均取得了飞速发展。以计算机、通信产品、消费电子为典型产品代表的这三大产业正呈现越发明显的整合趋势,即3C整合。

  产品制造方面,各厂家都争相以微型化和专业化作为设计、制造产品的核心理念,这使得具备这些特点的产品(即嵌入式产品)成为产业中毫无争议的主流;产品系统软件方面,拥有开放源码、高硬件兼容性、高稳定性、高定制性等特点的嵌入式Linux系统,已让越来越多的企业和研发机构由传统商业系统转向对其的研究开发;新兴的嵌入式操作系统市场上,嵌入式Linux正呈现出惊人增长率。

  针对这一热点,本文以对目前嵌入式Linux的开发过程与工具选择分析为主题,力争向读者展示一个清晰的开发框架及实际操作方法指向。

  系统开发复杂度确定及成本控制

  根据实际构建方法定义,嵌入式Linux是指对标准Linux经过裁剪、固化至设备存储体中,完成特定嵌入式应用的专用Linux系统。

  进行系统开发需兼顾软件、硬件两方面资源,针对特定应用,软件系统功能要配合硬件资源

来设计。

  硬件方面,确定应用范围和性能等级是首先要考虑的,因为二者的选型决定了整个产品的功能及性能,也就大体确定了产品的硬件成本。硬件资源固定后,就可针对所选资源进行软件选型、功能裁剪需求、工具搭配等软件系统方面的分析和定夺了。图1是一般的系统开发流程:

谁将引领嵌入式Linux开发?如图

图1一般的嵌入式Linux系统开发流程

  作为一个功能完整的操作系统,Linux能提供嵌入式系统所需的基本内核和所有用户界面。具有内存管理、任务切换 
和时间服务及其它分拆的微内核到完整的服务器,支持所有的文件系统和网络服务。要使其成为易用且高效的嵌入式系统,前期关键的工作分为Linux版本选择、系统功能裁剪分析、文件系统及工具搭配几步。

  首先,按照选定的硬件选择合适的Linux系统版本,标准为系统要支持所选硬件且系统执行速度与硬件性能匹配较好。然后进行系统功能裁剪分析,标准为系统应在满足应用的前提下,尽可能减小尺寸,去掉不需要的模块。最后,为系统选择合适的文件系统及工具,同样以满足应用和减小尺寸为标准。

  做好以上系统开发复杂度分析,不仅可较好规划产品开发成本,而且对后续开发过程也起到了关键的需求参照作用。

  开发过程与对应开发工具选择

  嵌入式Linux系统的开发过程与其对应的开发工具联系十分紧密,完成一个系统的开发,不仅需要大量的工具,而且多以平台交叉开发模式为主:

  嵌入式Linux开发工具选择的基本依据

  工具选择的基本依据主要有以下几点:

  开源性,由于Linux系统本身的开源特性,从版权及成本两方面考虑,配套开发工具也应使用开源软件;
  跨平台性,开发过程涉及宿主机与目标机,体系架构多有不同,因此有的工具需支持多平台;
  精简性,在满足功能前提下,除应尽量使用较小体积的软件外,多功能、高整合度工具的使用也是必不可少的。
  Linux原型系统选择与工具准备

  最终的嵌入式Linux系统来源都是完整的Linux操作系统。在开发时,对原型Linux系统的选择及前期开发工具的准备对整个开发的效率及成果都有很大影响。

  选择原型系统时,首先要从体系架构及设备兼容性进行分析,先找出满足功能要求的版本及补丁,然后根据硬件实际性能及存储容量决定最终系统版本。

  前期工具准备包括2类工具的选择:开发用工具和系统工具。前者只在开发过程中起作用,多为宿主机平台工具。后者则是在最终的嵌入式Linux系统中使用,多为目标平台工具。

  Linux交叉开发环境建立

  Linux交叉开发环境基本都是由GNU开源工具链搭建,工具链同样存在版本选择的问题。针对所开发的目标平台选择相应编译器及调试器等,同时对应原型Linux的版本、工具链版本需与其配合以保证工具可正常使用,具体版本相关性请参考kernel.org及GNU给出的说明文档。

  将原型Linux及交叉开发环境都保存于宿主机上,使用串口或网口等连接设备将宿主机与目标机连接在一起,安装好宿主机和目标机的通讯工具及服务;安装TFTP服务器,为目标机从主机上下载文件提供服务;启动Telnet服务;安装串口通讯工具minicom,一个交叉编译环境就基本建立完成了。然后即可在宿主机上用交叉工具链对原型Linux及其他目标机用软件进行交叉编译、调试,并使用通讯工具将编译好的目标代码传至目标机运行。

内核及根文件系统开发

  一个完整的嵌入式Linux系统包括两大部分:内核及根文件系统。

  内核

  内核开发移植完整过程包括:编写针对特定处理

器的任务调度、中断处理等代码;编写针对特定硬件平台的引导和初始化代码;编写针对特定外设的设备驱动程序代码;交叉编译内核。


  前两个步骤在开源社区中基本能找到现成可用资源,第三个步骤目前也有很多典型设备驱动代码可供使用,因此现今的开发过程已大大简化,所做工作基本是对现有资源的整理及补充,如需编写代码,则可能涉及到汇编工具及C代码编写工具的使用。

  最后一步交叉编译生成按照需求配置好的内核镜像。完成这一任务的工具是安装于宿主机上的GNU交叉工具链,其具体工具主要是gcc编译器、ld链接器的目标平台架构版本。

  首先安装对应目标平台的工具链,将工具链的二进制程序路径输出为PATH环境变量,将其依赖的库文件路径输出为LD_LIBRARY_PATH变量,然后执行内核配置命令make menuconfig,根据实际系统需求对内核模块进行裁剪配置并保存配置文件;然后执行编译命令make bzImage进行交叉编译生成所需内核镜像,执行编译模块命令生成内核所需模块。

  根文件系统

  对于根文件系统的开发,重点在于针对不同应用交叉编译相应库文件,并搭配适当系统命令和应用程

序,完成整个系统的运作支持。一个最基本的根文件系统一般包括以 
下几个部分:

  系统命令:完成如文件查看、挂载、系统进程查看等基本工作的Linux命令集合。在对系统体积要求较高的嵌入式Linux系统开发中,最常用的是busybox工具。

  配置文件:保存系统服务,应用程序等的配置信息。一般可参考完整Linux系统上的配置文件。

  设备文件:系统中使用的设备,以文件形式存放于/dev下,一般装有udev工具即可动态生成设备文件。

  库:内核模块、应用程序等各程序运行所需库文件。具体库文件包含的内容应根据实际运行的程序来决定,可用ldd命令辅助查找程序所需库。

  应用程序:完成系统应用所需的应用程序。如手持终端中常用的QT图形程序。

  程序开发及GDB调试模式

  嵌入式上层应用软件的开发及调试可使用本地调试和远程调试两种方法。

  本地调试:将所需的调试器移植到目标系统中,然后直接在目标机上运行调试器来调试应用程序。

  远程调试:移植一个调试服务器到目标系统中,并通过它与宿主机上的调试器共同完成应用程序的调试。在嵌入式Linux系统开发中,远程调试时目标机上使用的调试服务器通常是gdbserver,而宿主机上使用的调试器则是gdb,在建立远程调试硬件层服务的基础上进行调试。

  整体系统测试

  对整个系统的测试主要分为功能测试和性能测试两部分。

  功能测试:测试系统在完成指定应用时的正确性、操控性等指标。具体测试标准视应用而定,由测试人员执行应用程序完成测试。

  性能测试:测试系统运行时的稳定性、效率等指标。具体测试工具可使用LTP、LMBench等行业通用开源测试套件,测试结果标准也可参照上述工具给出,由测试人员执行测试用例脚本等方式完成测试。

  嵌入式Linux开发及其工具的发展趋势

  上述分析看出,嵌入式Linux系统对开发环境有较高要求,不仅要大量工具组合使用,且其版本兼容性问题也一直困扰开发者。鉴于此,很多Linux开发者、开源企业都将思路转向研究开发一整套嵌入式集成开发环境以提高开发效率上来。

  一个完整的嵌入式Linux集成开发平台通常包括上述各开发步骤涉及的工具和集成用户界面。集成开发工具的开发,对嵌入式linux行业而言,是一项既有高技术生命周期,又有可观经济价值的综合开发解决方案。和过去相比,越来越多的开发者开始使用集成开发工具。

  LinuxDevices第六个年度报告指出,2006年,只有56%的被调查者在使用免费工具,比去年下降了2%;而商业工具的使用,则从去年的9%提高到15%(如图2)。

谁将引领嵌入式Linux开发?如图

图2 2006年嵌入式Linux开发工具采用情况

  优秀的嵌入式Linux集成开发平台应具备完整的开发能力、易于使用和整合、方便进行大型工程组织的协调控制、有较好产品品质和支持,在现有嵌入式Linux集成开发工具中,这些功能都还需进一步提高以满足行业开发专业性需求。当然其中也不乏一些较为成功的产品,例如本土Linux厂商中科红旗公司新近推出的嵌入式开发工具DevsPartner1.0。   
 

 
  
  
  
  
 
更多>同类技术
 
全年征稿 / 资讯合作
 
推荐图文
推荐技术
可能喜欢