
嵌入式linux系统及其应用前景.doc
9页嵌入式 Linux 系统及其应用前景摘要:主要分析嵌入式 Linux 系统应用开发的特点;概述其开发过程和所面临的挑战;阐述嵌入式 Linux 的发展和应用前景 关键词:嵌入式 Linux 操作系统 应用前景引 言近年来,随着计算技术、通信技术的飞速发展,特别是互联网的迅速普及和 3C(计算机、通信、消费电子)合一的加速,微型化和专业化成为发展的新趋势,嵌入式产品成为信息产业的主流Linux 从 1991 年问世到现在,短短的十几年时间已经发展成为功能强大、设计完善的操作系统之一;可运行在X86、Alpha、Sparc、MIPS、PPC、Motorola、NEC、ARM 等多种硬件平台,而且开放源代码,可以定制;可与各种传统的商业操作系统分庭抗争越来越多的企业和研发机构都转向嵌入式 Linux 的开发和研究上,在新兴的嵌入式操作系统领域内也获得了飞速发展1 嵌入式 Linux 的特点嵌入式系统是以应用为中心,以计算机为基础,软硬件可裁剪,适用于系统对功能、可靠性、成本、功耗严格要求的专用计算机系统,系统结构见图 1实时性是嵌入式系统的基本要求,其次,还要求代码小,速度快,可靠性高嵌入式 Linux(Embedded Linux)是指对 Linux 经过裁剪小型化后,可固化在存储器或单片机中,应用于特定嵌入式场合的专用 Linux 操作系统。
嵌入式 Linux 的开发和研究已经成为目前操作系统领域的一个热点与其它嵌入式操作系统相比(详见表 1),Linux 的特点如下表 1 专用嵌入式实时操作系统与嵌入式 Linux 的比较专用嵌入式实时操作系统 嵌入式 Linux 操作系统版权费每生产一件产品需交纳一份版权费免费购买费用 数十万元(RMB) 免费技术支持由开发商独家提供有限的技术支持全世界的自由软件开发者提供支持网络特性 另加数十万元(RMB)购买 免费且性能优异软件移值 难(因为是封闭系统)易,代码开放(有许多应用软件支持)应用产品开发周期 长,因为可参考的代码有限短,新产品上市迅速,因为有许多公开的代码可以参考和移植实时性能 好 须改进,可用 PT_Linux 等模块弥补稳定性 较好 较好,但在高性能系统中须改进第一,Linux 系统是层次结构且内核完全开放Linux 是由很多体积小且性能高的微内核系统组成在内核代码完全开放的前提下,不同领域和不同层次的用户可以根据自己的应用需要方便地对内核进行改造,低成本地设计和开发出满足自己需要的嵌入式系统第二,强大的网络支持功能Linux 诞生于因特网时代并具有 Unix 的特性,保证了它支持所有标准因特网协议,并且可以利用 Linux 的网络协议栈将其开发成为嵌入式的TCP/IP 网络协议栈。
此外,Linux 还支持 ext2、fat16、fat32、romfs 等文件系统,为开发嵌入式系统应用打下了很好的基础第三,Linux 具备一整套工具链,容易自行建立嵌入式系统的开发环境和交叉运行环境,可以跨越嵌入式系统开发中仿真工具的障碍Linux 也符合 IEEE POSIX.1 标准,使应用程序具有较好的可移植性传统的嵌入式开发的程序调试和调试工具是用仿真器(ICE)实现的它通过取代目标板的微处理器,给目标程序提供一个完整的仿真环境,完成监视和调试程序;但一般价格比较昂贵,只适合做非常底层的调试使用嵌入式 Linux,一旦软硬件能够支持正常的串口功能,即使不用仿真器,也可以很好地进行开发和调试工作,从而节省一笔不小的开发费用嵌入式 Linux 为开发者提供了一套完整的工具链(tool chain)它利用 GNU的 gcc 做编译器,用 gdb、kgdb、xgdb 做调试工具,能够很方便地实现从操作系统到应用软件各个级别的调试 第四,Linux 具有广泛的硬件支持特性无论是 RISC 还是 CISC、32 位还是 64 位等各种处理器,Linux 都能运行Linux 通常使用的微处理器是 Intel X86 芯片家族,但它同样能运行于 Motorola 公司的 68K 系列 CPU 和 IBM、Apple、Motorola 公司的 PowerPC CPU 以及 Intel 公司的 StrongARM CPU 等处理器。
Linux 支持各种主流硬件设备和最新硬件技术,甚至可以在没有存储管理单元(MMU)的处理器上运行这意味着嵌入式 Linux 将具有更广泛的应用前景2 Linux 嵌入式系统开发平台2.1 系统软件操作平台操作系统是一种在计算机上运行的软件它的主要任务是管理计算机上的系统资源,为用户提供使用计算机及其外部设备的接口它存在的目的是为了管理所有硬件资源,并且提供应用软件一个合适的操作环境嵌入式系统由于硬件的限制,通常只具有极稀少的硬件资源,如主频较低的 CPU、较小的内存、小容量的固态电子盘芯片 DoC(Disk on Chip)或 DoM(Disk on Module)替代磁盘等在使用电池的系统中,它还要实现低功耗,延长电池使用时间的功能Linux 作为嵌入式操作系统是完全可行的因为 Linux 提供了完成嵌入功能的基本内核和所需要的所有用户界面,能处理嵌入式任务和用户界面将 Linux 看作是连续的统一体,从一个具有内存管理、任务切换和时间服务及其它分拆的微内核到完整的服务器,支持所有的文件系统和网络服务Linux 作为嵌入式系统,是一个带有很多优势的新成员它对许多 CPU 和硬件平台都是易移植、稳定、功能强大、易于开发的。
嵌入式 Linux 系统需要下面三个基本元素:系统引导工具(用于机器加电后的系统定位引导)、Linux 微内核(内存管理、 程序管理)、初始化进程但如果要它成为完整的操作系统并且继续保持小型化,还必须加上硬件驱动程序、硬件接口程序和应用程序组Linux 是基于 GNU 的 C 编译器,作为 GNU 工具链的一部分,与 gdb 源调试器一起工作的它提供了开发嵌入式 Linux 系统的所有软件工具2.2 系统硬件平台 在选择硬件时,常由于缺乏完整或精确的信息而使硬件选择成为复杂且困难的工作硬件开发成本常是我们很关心的当考虑硬件成本时,须要考虑产品的整个成本而不仅是CPU 的成本因为合适的 CPU,一旦加上总线逻辑和延时电路使之与外设一起工作,硬件系统就可能变得非常昂贵如果要寻找嵌入式软件系统,那么,应首先确定硬件平台,即确定微处理器 CPU 的型号现在比较流行的硬件平台有 Intel 公司的 StrongARM 系列,Motorola 公司的DragonBall 系列,NEC 公司的 VR 系列,Hitachi 公司的 SH3、SH4 系列等等选定硬件平台前,首先要确定系统的应用功能和所需要的速度,并制定好外接设备和接口标准。
这样才能准确地定位所需要的硬件方案,得到性价比最高的系统3 嵌入式 Linux 系统开发模式嵌入式系统通常为一个资源受限的系统直接在嵌入式系统的硬件平台上编写软件比较困难,有时甚至是不可能的一般流程见图 2目前,一般采用的办法是,先在通用计算机上编写程序,然后,通过交叉编译,生成目标平台上可运行的二进制代码格式,最后下载到目标平台上的特定位置上运行,具体步骤如下 第一步,建立嵌入式 Linux 交叉开发环境目前,常用的交叉开发环境主要有开放和商业两种类型开放的交叉开发环境的典型代表是 GNU 工具链,目前已经能够支持x86、ARM、MIPS、PowerPC 等多种处理器商业的交叉开发环境主要有 Metrowerks CodeWarrior、ARM Software Development Toolkit、SDS Cross compiler、WindRiver Tornado、Microsoft Embedded Visual C++等交叉开发环境是指编译、链接和调试嵌入式应用软件的环境它与运行嵌入式应用软件的环境有所不同,通常采用宿主机/目标机模式,见图 3第二步,交叉编译和链接。
在完成嵌入式软件的编码之后,就是进行编译和链接,以生成可执行代码由于开发过程大多是在 Intel 公司 x86 系列 CPU 的通用计算机上进行的,而目标环境的处理器芯片却大多为 ARM、MIPS、PowerPC、DragonBall 等系列的微处理器,这就要求在建立好的交叉开发环境中进行交叉编译和链接 例如,在基于 ARM 体系结构的 gcc 交叉开发环境中,arm-linux-gcc 是交叉编译器,arm-linux-ld 是交叉链接器通常情况下,并不是每一种体系结构的嵌入式微处理器都只对应于一种交叉编译器和交叉链接器如对于 M68K 体系结构的 gcc 交叉开发环境而言,就对应于多种不同的编译器和链接器如果使用的是 COFF 格式的可执行文件,那么在编译Linux 内核时,需要使用 m68k-coff-gcc 和 m68k-coff-ld,而在编译应用程序时则需要使用 m68k-coff-pic-gcc 和 m68k-coff-pic-ld编写好的嵌入式软件经过交叉编译和交叉链接后,通常会生成两种类型的可执行文件:用于调试的可执行文件和用于固化的可执行文件第三步,交叉调试① 硬件调试。
如果不采用仿真器,可以让 CPU 直接在其内部实现调试功能,并通过在开发板上引出的调试端口,发送调试命令和接收调试信息,完成调试过程目前,Motorola 公司提供的开发板上使用的是 DBM 调试端口,而 ARM 公司提供的开发板上使用的则是 JTAG 调试端口使用合适的软件工具与这些调试端口进行连接,可以获得与 ICE 类似的调试效果② 软件调试在嵌入式 Linux 系统中,Linux 系统内核调试,可以先在 Linux 内核中设置一个调试桩(debug stub),用作调试过程中和宿主机之间的通信服务器然后,可以在宿主机中通过调试器的串口与调试桩进行通信,并通过调试器控制目标机上 Linux 内核的运行嵌入式上层应用软件的调试可以使用本地调试和远程调试两种方法如果采用的是本地调试,首先要将所需的调试器移植到目标系统中,然后就可以直接在目标机上运行调试器来调试应用程序了;如果采用的是远程调试,则需要移植一个调试服务器到目标系统中,并通过它与宿主机上的调试器共同完成应用程序的调试在嵌入式 Linux 系统的开发中,远程调试时目标机上使用的调试服务器通常是 gdbserver,而宿主机上使用的调试器则是gdb。
两者相互配合共同完成调试过程第四步,系统测试整个软件系统编译过程,嵌入式系统的硬件一般采用专门的测试仪器进行测试,而软件则需要有相关的测试技术和测试工具的支持,并要采用特定的测试策略测试技术指的是软件测试的专门途径,以及能够更加有效地运用这些途径的特定方法在嵌入式软件测试中,常常要在基于目标机的测试和基于宿主机的测试之间做出折衷基于目标机的测试需要消耗较多的时间和经费,而基于宿主机的测试虽然代价较小,但毕竟是在仿真环境中进行的,因此难以完全反映软件运行时的实际情况这两种环境下的测试可以发现不同的软件缺陷,关键是要对目标机环境和宿主机环境下的测试内容进行合理取舍嵌入式软件测试中经常用到的测试工具主要有:内存分析工具、性能分析工具、覆盖分析工具、缺陷跟踪工具等,在这里不加详述嵌入式 Linux 系统的典型构成见图 4以下即为一个典型开发工具的使用流程:① 写入或植入引导码;② 向串口打印字符串的编码;③ 将 gdb 目标码移植工作串口,可与另一台运行 gdb 程序的 Linux 主机系统对话;④ 利用 gdb 让硬件和软件初始化码在 Linux 内核启动时工作;⑤ Linux 内核启动,串口成为 Linux 控制口并可用于后续开发;⑥ 如果在目标硬件上已运行了完整的 Linux 内核,即可调试用户的应用进程。
