嵌入式Linux 系统开发技术入门详解连载-入门概述
嵌入式Linux 系统开发技术入门详解连载-入门概述
主要介绍嵌入式系统和嵌入式操作系统的概况,讲述嵌入式Linux 的发展历史和开发环境,概括说明嵌入式Linux 系统开发的特点。读完本章内容,可以对嵌入式Linux 系统有整体的认识,了解嵌入式Linux开发的要点。
主要知识点:
l 嵌入式系统定义
l 嵌入式操作系统介绍
l 嵌入式 Linux 操作系统
l 嵌入式 Linux 开发环境
l 嵌入式 Linux系统开发要点
嵌入式系统
嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于应用系统,对功能、可靠性、成本、体积、功耗等方面有特殊要求的专用计算机系统。
嵌入式系统与通用计算机系统的本质区别在于系统应用不同,嵌入式系统是将一个计算机系统嵌入到对象系统中。这个对象可能是庞大的机器,也可能是小巧的手持设备,用户并不关心这个计算机系统的存在。
嵌入式系统一般包含嵌入式微处理器、外围硬件设备、嵌入式操作系统和应用程序4 个部分。嵌入式领域已经有丰富的软硬件资源可以选择,涵盖了通信、网络、工业控制、消费电子、汽车电子等各种行业。
嵌入式计算机系统与通用计算机系统相比具有以下特点。
(1)嵌入式系统是面向特定系统应用的。嵌入式处理器大多数是专门为特定应用设计的,具有低功耗、体积小、集成度高等特点,一般是包含各种外围设备接口的片上系统。
(2)嵌入式系统涉及计算机技术、微电子技术、电子技术、通信和软件等各行各业。它是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。
(3)嵌入式系统的硬件和软件都必须具备高度可定制性。只有这样才能适用嵌入式系统应用的需要,在产品价格性能等方面具备竞争力。
(4)嵌入式系统的生命周期相当长。当嵌入式系统应用到产品以后,还可以进行软件升级,它的生命周期与产品的生命周期几乎一样长。
(5)嵌入式系统不具备本地系统开发能力,通常需要有一套专门的开发工具和环境。
在计算机后PC 技术时代,嵌入式系统将拥有最大的市场。计算机和网络已经全面渗透到日常生活的每一个角落。各种各样的新型嵌入式系统设备在应用数量上已经远远超过通用计算机,任何一个普通人可能拥有从大到小的各种使用嵌入式技术的电子产品,小到MP3、PDA等微型数字化产品,大到网络家电、智能家电、车载电子设备。而在工业和服务领域中,使用嵌入式技术的数字机床、智能工具、工业机器人、服务机器人也将逐渐改变传统的工业和服务方式。
美国著名的未来学家尼葛洛庞帝在1999 年访华时曾预言,4~5 年后嵌入式系统将是继PC和Internet之后最伟大的发明。这个预言已经成为现实,现在的嵌入式系统正处于高速发展阶段。
1.2 嵌入式操作系统
嵌入式操作系统的一个重要特性是实时性。所谓实时性,就是在确定的时间范围内响应某个事件的特性。操作系统的实时性在某些领域是至关重要的,比如工业控制、航空航天等领域。想像飞机正在空中飞行,如果嵌入式系统不能及时响应飞行员的控制指令,那么极有可能导致空难事故。有些嵌入式系统应用并不需要绝对的实时性,比如PDA播放音乐,个别音频数据丢失并不影响效果。这可以使用软实时的概念来衡量。据调查,目前全世界的嵌入式操作系统已经有两百多种。从20 世纪80 年代开始,出现了一些商用嵌入式操作系统,它们大部分都是为专有系统而开发的。随着嵌入式领域的发展,各种各样嵌入式操作系统相继问世。有许多商业的嵌入式操作系统,也有大量开放源码的嵌入式操作系统。其中著名的嵌入式操作系统有:mC/OS、VxWorks、Neculeus、Linux 和Windows
CE 等。下面介绍一些主流的嵌入式操作系统。
(1)Linux在所有的操作系统中,Linux 是一个发展最快、应用最为广泛的操作系统。Linux 本身的种种特性使其成为嵌入式开发中的首选。在进入市场的头两年中,嵌入式Linux 设计通过广泛应用获得了巨大的成功。随着嵌入式Linux 的的成熟,提供更小的尺寸和更多类型的处理器支持,并从早期的试用阶段迈进到嵌入式的主流,它抓住了电子消费类设备的开发者们的想像力。图1.1 所示是业内人士对国内Linux软件市场的预测。
根据 IDC 的报告,Linux 已经成为全球第二大操作系统。预计在服务器市场上,Linux在未来几年内将以每年25%的速度增长,中国的Linux 市场更是保持40%左右的增长速度。而在Linux 操作系统方面,IDC 对中国在2001~2006 年的市场预测发现,其市场占有率从2001 年的4.47%平稳地上升到2006年的26.77%。
嵌入式 Linux 版本还有多种变体。例如:RTLinux 通过改造内核实现了实时的Linux;

图1.1 2004~2008年国内Linux软件市场总量预测
RTAI、Kurt和Linux/RK 也提供了实时能力;还有mCLinux去掉了Linux 的MMU(内存管理单元),能够支持没有MMU的处理器等。
(2)mC/OS
mC/OS 是一个典型的实时操作系统。该系统从1992 年开始发展,目前流行的是第2 个版本,即mC/OS II。它的特点是:公开源代码,代码结构清晰,注释详尽,组织有条理,可移植性好;可裁剪,可固化;抢占式内核,最多可以管理60 个任务。自从清华大学邵贝贝教授将Jean J. Labrosse的《μC/OS-Ⅱ:the Real Time Kernel》翻译后,在国内掀起mC/OS II的热潮,特别是在教育研究领域。该系统短小精悍,是研究和学习实时操作系统的首选。
(3)Windows CE
Windows CE 是微软的产品,它是从整体上为有限资源的平台设计的多线程、完整优先
权、多任务的操作系统。Windows CE 采用模块化设计,并允许它对于从掌上电脑到专用的工控电子设备进行定制。操作系统的基本内核需要至少200KB 的ROM。从SEGA 的
DreamCast游戏机到现在大部分的高价掌上电脑都采用了Windows CE。
随着嵌入式操作系统领域日益激烈的竞争,微软不得不应付来自Linux 等免费系统的冲
击。微软在Windows CE.Net 4.2版中,将增加一项授权价仅3 美元的精简版本WinCE.Net
Core。WinCE.Net Core具有基本的功能,包括实时OS核心(Real Time OS Kernel)、档案系统;IPv4、IPv6、WLAN、蓝牙等联网功能;Windows Media Codec;.Net开发框架以及SQLServer.ce。微软推出低价版本WinCE.Net,主要是看好语音电话、WLAN 的无线桥接器和个性化视听设备的成长潜力。
(4)VxWorks
VxWorks 是WindRiver 公司专门为实时嵌入式系统设计开发的操作系统软件,为程序员
提供了高效的实时任务调度、中断管理,实时的系统资源以及实时的任务间通信。应用程序员可以将尽可能多的精力放在应用程序本身,而不必再去关心系统资源的管理。该系统主要应用在单板机、数据网络(以太网交换机、路由器)和通信方面等多方面。其核心功能主要有以下几个。
· 微内核wind
· 任务间通信机制
· 网络支持
· 文件系统和I/O 管理
· POSIX 标准实时扩展
· C++以及其他标准支持
这些核心功能可以与WindRiver 系统的其他附件和Tornado 合作伙伴的产品结合在一起
使用。谁都不能否认这是一个非常优秀的实时系统,但其昂贵的价格使不少厂商望而却步。
(5)QNX
这也是一款实时操作系统,由加拿大QNX 软件系统有限公司开发。广泛应用于自动化、控制、机器人科学、电信、数据通信、航空航天、计算机网络系统、医疗仪器设备、交通运输、安全防卫系统、POS机、零售机等任务关键型应用领域。20世纪90年代后期,QNX 系统在高速增长的因特网终端设备、信息家电及掌上电脑等领域也得到了广泛应用。QNX的体系结构决定了它具有非常好的伸缩性,用户可以把应用程序代码和QNX 内核直接编译在一起,使之为简单的嵌入式应用生成一个单一的多线程映像。它也是世界上第一个遵循POSIX1003.1 标准从零设计的微内核,因此具有非常好的可移植性。
嵌入式操作系统的选择是前期设计过程的一项重要工作,这将影响到工程后期的发布以及软件的维护。不管选用什么样的系统,都应该考虑操作系统对硬件的支持,如果选择的系统不支持将来要使用的硬件平台,那这个系统是不合适的;其次要考虑的是开发调试用的工具,特别是对于开销敏感和技术水平不强的企业来说,开发工具往往在开发过程中起决定性作用;第三要考虑的问题是该系统能否满足应用需求。如果一个操作系统提供出来的API很少,那么无论这个系统有多么稳定,应用层很难进行二次开发,这显然也不是开发人员希望看到的。由此可见,选择一款既能满足应用需求,性价比又可达到最佳的实时操作系统,对开发工作的顺利开展意义非常重大。
1.3 嵌入式 Linux历史
所谓嵌入式Linux,是指Linux 在嵌入式系统中应用,而不是什么嵌入式功能。实际上,嵌入式Linux 和Linux 是同一件事。我们了解一下Linux 的发展历史。
Linux 起源于1991 年,由芬兰的Linus Torvalds开发,随后按照GPL原则发布。
Linux 1.0 正式发行于1994 年3月,仅支持386 的单处理器系统。
Linux 1.2 发行于1995 年3 月,它是第一个包含多平台(Alpha,Sparc,Mips 等)支持的官方版本。
Linux 2.0 发行于1996 年6 月,包含很多新的平台支持。最重要的是,它是第一个支持SMP(对称多处理器)体系的内核版本。
Linux 2.2 于1999 年1月发布,它带来了SMP系统上性能的极大提升,同时支持更多的硬件。
Linux 2.4 于2001 年1月发布,它进一步提升了SMP系统的扩展性,同时它也集成了很多用于支持桌面系统的特性:USB,PC卡(PCMCIA)的支持,内置的即插即用,等等。
Linux 2.6 于2003 年12 月发布,它的多种内核机制都有了重大改进,无论对大系统还是小系统(PDA等)的支持都有很大提高。
最新的Linux 内核版本可以从官方站点获取。
Linux 是一种类UNIX 操作系统。从绝对意义上讲,Linux 是Linus Torvalds维护的内核。现在的Linux 操作系统已经包括内核和大量应用程序,这些软件大部分来源于GNU 软件工程。因此,Linux 又叫作GNU/Linux。
目前 Linux 操作系统的发行版已经有很多,例如:Redhat Linux、Suse Linux、Turbo Linux等台式机或者服务器版本,还有各种嵌入式Linux 版本。不同的Linux 版本之间总会有些差异。鉴于UNIX 技术历史的教训,LSB(Linux Standard Base)为Linux 系统制定了规范。LSB规范定义了几种模块,并且为应用程序定义系统接口和基本配置,为大量的应用程序提供了统一的行业标准。从以下站点可以获取LSB的文档。
http://www.linuxbase.org
ELC(Embedded Linux Consortium,嵌入式Linux 联盟)是一个非营利性的、中立的行业协会,它的目标是在嵌入式应用和设备计算市场做Linux 的改进、推广和标准化工作。联盟成员贡献会费并且参与管理、推广、实现和平台规范工作组的维护,谋求不断增长的市场机遇。ELC成员为了API的互用性积极推广一套平台标准,消除分割并且发布更加具有竞争力的商业方案。
http://www.embedded-linux.org
OSDL(Open Source Development Labs)支持围绕Linux开发和指导的各种活动。它为
OSDL协会免费提供硬件资源。OSDL发起了电信Linux(Carrier Grade Linux)和数据中心
Linux(Data Center Linux)工作组。这些工作组包含OSDL成员和有兴趣的个人,他们致力于创建特点列表和规范,并且参与开源工程为电信和数据中心进一步开发Linux。OSDL还积极参与内核测试,提供了开放的测试环境(Scalable Test Platform),并且贡献给开发状态的内核测试。
http://www.osdl.org
CELF(Consumer Electronics Linux Forum,消费电子Linux 论坛)是加州的一个非盈利
性公司,它致力于把Linux改进成消费电子设备的开放平台。
http://www.celinuxforum.org
越来越多的个人、社团和公司已经和正在参与Linux 社区的工作,他们为Linux 系统开
发、测试以及应用做了大量贡献。这使得嵌入式Linux 系统成为标准化的操作系统,功能日趋完善,应用更加广泛。
1.4 嵌入式 Linux开发环境
通用计算机可以直接安装发行版的Linux 操作系统,使用编辑器、编译器等工具为本机
开发软件,甚至可以完成整个Linux系统的升级。
嵌入式系统的硬件一般有很大的局限性,或者处理器频率很低,或者存储空间很小,或
者没有键盘、鼠标设备。这样的硬件平台无法胜任(或者不便于)庞大的Linux 系统开发任务。因此,开发者提出了交叉开发环境模型。交叉开发环境是由开发主机和目标板两套计算机系统构成的。目标板Linux 软件是在开发主机上编辑、编译,然后加载到目标板上运行的。为了方便Linux 内核和应用程序软件的开发,还要借助各种连接手段。第4 章将详细介绍如何建立交叉开发环境。第5 章将详细介绍交叉编译工具链的建立。Linux 是开放源码的软件工程,它的大量应用程序也来源于GNU软件工程。因此,完全可以自己动手制作一套完整的嵌入式Linux 系统和开发工具。但是,庞大的系统软件开发和测试将花费大量人工时,无法预料的BUG 可能严重阻滞项目进度。
大量的开源软件和商业的Linux 软件共同出现在Linux 操作系统上,半导体公司、Linux操作系统公司、第三方软件公司等已经形成庞大的Linux 生态系统。任何一家公司都不可能对Linux 系统做全面的维护和技术支持。嵌入式Linux 系统的开发工具绝大多数是命令行方式的,这使得学习Linux 开发比Windows 开发难度更大。商业公司在嵌入式Linux 产品开发的时候,希望有更方便、更快捷的开发工具可以使用。因此,嵌入式Linux 集成开发环境具有市场需求。
目前,Eclipse已经成为集成开发环境的标准平台。Eclipse是开放的、跨平台的、高度可配置的集成开发环境,它已经被众多嵌入式操作系统厂商定制成自己的集成开发环境。例如:MontaVista 公司的DevRocket、TimeSys 公司的TimeStorm、Wind River 公司的Workbench。MontaVista DevRocket集成开发环境如图1.2 所示。

图1.2 MontaVista DevRocket集成开发环境
这些集成开发环境不但能够支持应用程序开发和调试,而且专门提供了内核、文件系统的工程。另外可以集成各种测试工具和版本控制等功能,大大方便了嵌入式Linux开发。
1.5 嵌入式 Linux系统开发要点
嵌入式Linux开发就是构建一个Linux系统,这需要熟悉Linux系统组成部分,熟悉Linux
开发工具,还要熟悉Linux 编程。嵌入式Linux系统包含Bootloader(引导程序)、内核和文件系统3部分。对于嵌入式Linux系统来说,这3 个部分是必不可少的。本书将详细分析这3 个部分的相关软件开发。总之,在启动一个嵌入式Linux 项目之前,必须仔细考虑下面要点。
(1)选择嵌入式Linux 发行版
商业的Linux 发行版是作为产品开发维护的,经过严格的测试验证,并且可以得到厂家的技术支持。它为开发者提供了可靠的软件和完整的开发工具包。
(2)熟悉开发环境和工具
交叉开发环境是嵌入式Linux 开发的基本模型。Linux 环境配置、GNU工具链、测试工具甚至集成开发环境都是开发嵌入式Linux开发的利器。
(3)熟悉Linux 内核
因为嵌入式Linux 开发一般需要重新定制Linux 内核,所以熟悉内核配置、编译和移植也很重要。
(4)熟悉目标板引导方式
开发板的Bootloader 负责硬件平台的最基本的初始化,并且具备引导Linux 内核启动的功能。由于硬件平台是专门定制的,一般需要修改编译Bootloader。
(5)熟悉Linux 根文件系统
Linux 离不开文件系统,程序和文件都存放在文件系统中。系统启动必需的程序和文件都必须放在根文件系统中。Linux 内核命令行参数可以指定要挂接的根文件系统。
(6)理解Linux 内存模型
Linux 是保护模式的操作系统。内核和应用程序分别运行在完全分离的虚拟地址空间,物理地址必须映射到虚拟地址才能访问。只有理解Linux 内存模型,才能最大程度地优化系统性能。
(7)理解Linux 调度机制和进程线程编程
Linux 调度机制影响到任务的实时性,理解调度机制可以更好地运用任务优先级。进程和线程编程则是应用程序开发所必需的。
发布人信息
- 联系人:wumingwei 查看该用户发布的所有信息
- 电话:
- 邮箱:
- 地址:



