嵌入式Linux系统实用开发
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 Linux操作系统

Linux操作系统对很多读者来说已经不再陌生了,这是一种已经得到广泛应用的计算机操作系统。它是由计算机业界大名鼎鼎的芬兰人林纳斯·托瓦兹(Linus Torvalds)最早开发的。从1991 年的Linux 0.01 版本到1994 年的Linux 1.0 版本发展至今,本书交稿时内核版本是Linux 2.6.30。

在实际中,人们提到“Linux”一词时其实并不是单纯地指操作系统,而是泛指以下三个部分的总体概念。

◆ 一种类UNIX、名为“Linux”的计算机操作系统。

◆ Linux操作系统环境下的开发工具和开发环境。

◆ Linux操作系统环境下的各种应用软件和工具软件。

在详细介绍Linux操作系统之前,有必要简单介绍一下目前已经与Linux密不可分的GNU计划(GNU Project),首先强调两点。

◆ Linux内核开发不是GNU计划的一部分。

◆ Linux诞生之时(1991年),GNU计划已运作多年,大部分基本工具软件已开发出来。

GNU是理查德·斯托曼(Richard Stallman)在1984 年创立的,其目标是发展一个完全免费的自由软件——一个UNIX类计算机操作系统以及运行在其上的软件开发工具和各种应用程序。具体实施是由自由软件基金会(Free Software Foundation,FSF)来负责的。但在实际发展中,GNU自己的操作系统内核并没有真正开发出来并得到应用,反倒是大量GNU软件(包括开发工具、调试工具和各种各样的应用软件等)与Linux操作系统及其开发和应用完美地融合在一起了—GNU软件运行在Linux内核之上,整个Linux内核基于GNU通用公共许可,甚至与各种各样的Linux版本一同发行和使用。

Linux发展至今,其应用已十分广泛。在传统计算机领域,大型计算机(以及超级计算机)、工作站和服务器市场的主流操作系统是Linux,有消息称,2008 年11 月全球最快的超级计算机前500 名中,使用Linux操作系统的有439 个,即Linux操作系统在当今超级计算机市场的占有率接近90%,这是计算机发展史上前所未有的。而在台式机用户中,使用Linux操作系统的也越来越多,特别是国内外很多计算机高手和黑客都以使用Linux为骄傲。在笔记本电脑这一Windows传统市场中,也有越来越多公司开始在自己的产品上预装Linux系统。但是,当今的传统计算机行业却不是Linux最大的市场——若以装备产品的种类和数量以及市场销售额而言,嵌入式系统无疑是Linux现在和今后最大的市场。目前几乎所有种类的嵌入式产品都有使用Linux的,例如Linux在智能手机领域中已经与Symbian,Windows Mobile(Windows CE)形成三足鼎立之势,在数字机顶盒、家庭路由器、行业应用终端等诸多领域也已稳固占据主流地位。

目前有很多公司提供各种各样的Linux发行版,主要是台式机桌面系统版本,部分也提供服务器系统版本,Debian 5.0 还提供ARM平台版本。其中绝大多数公司同时提供32 位版本和64位版本。国内常见的Linux发行版主要有:

◆ Debian

◆ Ubuntu

◆ Fedora

◆ Red Hat

◆ Slackware

◆ Mandriva

◆ SUSE

◆ Knoppix

◆ CentOS

◆ TeamLastOS

大多数发行版一般都会包含以下内容:

◆ Linux内核

◆ GNU函数库和开发工具软件

◆ 图形化应用开发环境(Qt)

图 1.1 HY2410A开发板外观

◆ 图形界面环境(如KDE或GNOME用户应用环境)

◆ 基本应用软件(如OpenOffice,Firefox等)

◆ 多国语言包及其输入法

◆ 程序源代码

除了这些Linux发行版外,很多公司原本用于Windows系统的很多商业软件也开始提供Linux版本,例如数据库软件中的Oracle和DB2、EDA软件中的Mentor Graphics PADS和Cadence Allegro、科学计算软件中的MathWorks Matlab和Intel Fortran Compiler等。另外,根据GNU授权规则,任何人都可以采取收费或免费的方式来发行Linux操作系统下的软件,并在符合该授权的规范下修改其他GNU软件,因此就吸引了大量程序开发人员把原本运行在其他操作系统下的软件免费程序移植到了Linux上。特别是互联网的深入普及极大地方便了Linux软件程序的获取和发布,使得Linux下各种各样的大小软件数量种类极为庞大、功能五花八门。另外,随着KDE和GNOME图形环境的日臻完善,Linux操作系统在用户图形环境方面已经与Windows难分伯仲。即使在嵌入式领域中,Qt图形开发套件的不断成熟也使得越来越多的需要图形化操作界面的嵌入式产品有了新的选择。

从技术开发的角度看,Linux软件开发与Windows软件开发有很大的区别。本书的大部分读者,可能更多地关心嵌入式Linux软件开发。嵌入式Linux软件开发所面临的主要技术挑战性是由Linux操作系统自身的一些特点和嵌入式系统的各种具体产品应用所决定的。从软件开发者的角度看,Linux操作系统的基本特点可以简单地总结为以下三条。

◆ 硬件体系支持广泛。

◆ 软件源代码开放。

◆ 内核版本不完全考虑前向兼容。

就支持的硬件体系而言,迄今为止还没有一种操作系统能够与Linux相比,以Linux 2.6.30版本的内核为例,其所支持的CPU体系包括:

◆ Alpha AXC(DEC公司,全球首款64位CPU)

◆ AMD x86-64

◆ ARM

◆ AVR32(Atmel公司)

◆ BLACKFIN(ADI公司)

◆ H8/300(瑞萨科技)

◆ Intel IA64

◆ M32R(瑞萨科技)

◆ M68K(即ColdFire,飞思卡尔公司)

◆ MIPS

◆ PA-RISC(惠普公司)

◆ PowerPC

◆ IBM S/390

◆ SUN SPARC

◆ x86

◆ Xtensa(Tensilica公司)

◆ SuperH(日立公司)

上面提到这些CPU体系中大多数实际上并不为绝大多数开发人员所熟知,如果再看一看Linux内核文件系统中driver子目录的内容,可以说Linux对各种接口、外设和总线等林林总总硬件的支持程度早已远远超出大多数技术人员的想象。显然,如此完整的硬件支撑体系,一方面给设计开发人员提供了巨大的选择余地和操作空间,使得“广阔天地,大有作为”成为可能,另一方面也构成了一种技术挑战——如何才能够根据客户的需要和自己的实际情况正确地选择一个合理的、能够持续开发应用的基本硬件平台架构?这一点也是市场上同一类嵌入式产品各家公司实现方案迥异的根本原因之一。若单纯考虑软件方面的因素,开放源代码的确给开发人员提供了极其丰富的代码资源,为其代码编写和程序开发提供了相当多的帮助和便利,而如何结合客户要求及自身开发能力与习惯、根据所选硬件体系结构,在浩瀚的代码中选择出适合自己产品开发和应用的软件功能模块并加以剪裁、组合、移植及优化却是一项既复杂而又需要仔细做的工作。当然Linux内核版本的更新导致不兼容旧版本这一令多数开发人员颇为不爽的惯例,还使得旧版本的开发经验有时候不能在新版本的开发中提供直接有效的帮助,例如Linux 2.6.26内核中移去了应用极其广泛的触摸屏的驱动支持,就使得原来的相关开发工作和经验很难得到借鉴。

根据本书几位作者的个人经历与感受,不得不说嵌入式Linux软件开发非常富有技术挑战性,乐趣无穷而又充满痛苦。其实这种感受在嵌入式开发人员中颇为普遍,看一看网络上很多开发人员写的博客就会体会到,但是有时候开发中的郁闷、成功后的喜悦溢于言表。

当然,相对于其他嵌入式操作系统下的各种开发,特别是Windows平台上的嵌入式开发(主要是Windows CE/Windows Mobile开发),嵌入式Linux在技术和应用开发方面的优势还是非常明显的。以Windows平台上嵌入式开发为例,其存在的以下问题严重地制约了开发人员的工作开展。

◆ Windows Mobile支持的CPU平台很少,目前支持x86、部分ARM内核版本、部分MIPS内核版本、部分SuperH SH4版本。Windows XP Embedded则只支持x86。

◆ 嵌入式系统中应用最多的是ARM体系,目前Windows Mobile只支持ARM的v4,v4T,Thumb,v5TE和Xscale,对ARM高版本的支持还有很多欠缺。

◆ 基本开发工作严重依赖微软开发平台(Visual Studio .NET和Windows CE/Windows Mobile PlatformBuilder)和芯片厂家的板级支持包(Board Supporting Package)——缺乏其中任何一个的支持,即使很简单的功能都无法实现。

◆ 由于源代码并不开放,所谓的软件优化基本无从谈起。