1.4 Linux操作系统
Linux操作系统是可以运行在许多不同类型的计算机上的一种操作系统的“内核”。它是提供命令行或者程序与计算机硬件之间接口的软件的核心部分。Linux操作系统内核管理以下内容:内存,采用什么方法及在什么时候打开或者关闭文件,哪一个进程或者程序可以获得计算机的中央处理单元(CPU)等。
1.4.1 Linux操作系统概述
1. Linux操作系统的起源和发展
Linux的兴起可以说是因特网创造的一个奇迹。1991年年初,当年轻的芬兰大学生Linus Torvalds在开始其Linux操作系统的设计时,他的目的只不过是想看一看Intel 386存储管理硬件是怎样工作的,而绝对没有想到这一举动会在计算机界产生如此重大的影响。他的设计进展得很顺利,只花了几个月时间就在一台Intel 386微机上完成了一个类似于UNIX的操作系统,这就是最早的Linux版本。1991年年底,Linus Tornalds首次在因特网上发布了基于Intel 386体系结构的Linux源代码,从此以后,奇迹开始发生了。由于Linux具有结构清晰、功能简捷等特点,许多大专院校的学生和科研机构的研究人员纷纷把它作为学习和研究的对象。他们在更正原有Linux版本中错误的同时,也不断地为Linux增加新的功能。
在众多热心者的努力下,Linux逐渐成为一个稳定可靠、功能完善的操作系统。一些软件公司,如Red Hat、InfoMagic等也不失时机地推出了以Linux为核心的操作系统版本,这大大推动了Linux的商品化。在一些大的计算机公司的支持下,Linux还被移植到以AlphaAPx、PowerPC、MIPS及Spare等处理机的系统上。资料显示,Linux的应用在各个行业的分布比较平均,其中电信业占50%,医疗业占20%,汽车业占15%,工业控制占15%,消费类电子占20%。
2. UNIX和Linux的区别
UNIX(此名称源自以前的“Multits”操作系统)于1969年在AT&T贝尔实验室被创造出来,它是一种健壮的、灵活的对开发人员友好的计算环境。尽管UNIX最初是为Digital Equipment Corporation(DEC)公司的PDP微型计算机系列编写的,但它却成为最受欢迎的多用户通用操作系统,并已在所有计算领域——甚至包括曾一度被大型机垄断的领域——占据主导地位。历经20多年的发展,UNIX已经开始——至少在某些领域——被Linux超越。Linux不是UNIX,只是非常像UNIX。对于有些任务,开发者需要Linux;对于其他任务,开发者仍需要UNIX。UNIX和Linux可以在一起非常协调地工作,编写得好的程序可以非常容易地在这两个系统之间进行移植。
3. Linux操作系统的主要特点
作为一个操作系统,Linux几乎满足当今UNIX操作系统的所有要求,它具有UNIX操作系统的基本特征。
(1)符合POSIX 1003.1标准
POSIX 1003.1标准定义了一个最小的UNIX操作系统接口,任何操作系统只有符合这一标准,才有可能运行UNIX程序。考虑到UNIX具有丰富的应用程序,当今绝大多数操作系统都把满足POSIX 1003.1标准作为实现目标。Linux也不例外,它完全支持POSIX 1003.1标准。另外,为了使UNIX System V和BSD上的程序能直接在Linux上运行,Linux还增加了部分System V和BSD的系统接口,使Linux成为一个完善的UNIX程序开发系统。
(2)支持多用户访问和多任务编程
Linux是一个多用户操作系统,它允许多个用户同时访问系统而不会造成用户之间的相互干扰。另外,Linux还支持真正的多用户编程,一个用户可以创建多个进程,并使各个进程协同工作来完成用户的需求。
(3)采用页式存储管理
页式存储管理使Linux能更有效地利用物理存储空间,页面的换入/换出为用户提供了更大的存储空间。
(4)支持动态链接
用户程序的执行往往离不开标准库的支持,一般的系统往往采用静态链接方式,即在装配阶段就已将用户程序和标准库链接好。这样,当多个进程运行时,可能会出现库代码在内存中有多个副本而浪费存储空间的情况。Linux支持动态链接方式,当运行时才进行库链接,如果所需要的库已被其他进程装入内存,则不必再装入,否则才从硬盘中将库调入。这样能保证内存中的库程序代码是唯一的。
(5)支持多种文件系统
Linux能支持多种文件系统。目前支持的文件系统有:EXT3、EXT2、EXT、XIAFS、ISOFS、HPFS、MSDOS、UMSDOS、PROC、NFS、SYSV、MINIX、SMB、UFS、NCP、VFAT、AFFS。Linux最常用的文件系统是EXT3,它解决了EXT2中的一些缺陷。它的文件名长度可达255个字符,并且还有许多特有的功能,使它比常规的UNIX文件系统更加安全。
(6)支持TCP/IP,SLIP和PPP
在Linux中,用户可以使用所有的网络服务,如网络文件系统、远程登录等。SLIP和PPP能支持串行线上的TCP/IP协议的使用,这意味着用户可用一个高速MODERM通过电话线接入因特网中。
除了上述基本特征外,Linux还具有其独有的特色。虽然大多数Linux系统运行在PC平台上,但Linux也可以作为嵌入式系统的可靠主力。典型的压缩包装Linux系统经过打包,在拥有硬盘和大容量内存的PC上运行,而目前来说,嵌入式系统不可能有这么高的配置。一个功能完备的Linux内核要求大约1 MB内存。而Linux微内核只占用其中很小一部分内存。包括虚拟内存和所有核心的操作系统功能在内,只需占用系统的100 KB内存。由于内存要求常常是由需要的应用所决定的,比如Web服务器或者SNMP代理,Linux系统甚至可以仅使用256 KB ROM和512 KB RAM进行工作。在减小体积方面,美国网虎国际公司已经成功地将Linux裁剪到143 KB大小,这是目前正式公布的最小的Linux内核。因此,Linux完全可以作为嵌入式操作系统,越来越多的企业和科研机构已经把目光转向了嵌入式Linux的开发和应用上。
目前,世界上基于嵌入式Linux的设备越来越多,嵌入式Linux已经渗透到信息电子的各个领域,如手机、PDA、手表、汽车电子、机器人等。
1.4.2 Linux的重要性
在过去的十年中,嵌入式系统的开发发生了很大的变化。以前嵌入式设备往往是一个孤立的、资源有限的系统,它们追求的是在有限的价格上满足一定的功能性要求。通常它们采用那些功能并不强大的CPU,这也是开发者不得不尽可能地压缩嵌入式系统性能的原因。而今天,人们对嵌入式设备在智能化和互联性上提出了要求,这使得嵌入式设备不再是孤立的,它们要通过互联网、无线或其他的方式实现相互连接,同时它们也是软件生态系统(software ecosystem)的一部分。最初的嵌入式设备是单一用途的,它们拥有各自独特的显示方式和用户界面,而今天它们变成了“等同PC”的系统。它们必须运行很多相同的应用程序,它们需要采用相同的方式实现互联或在某些情况下增强互联性。因此可以看到在传统的实时操作系统(RTOS)之上建立应用程序的必要性。作为内部开发(in-house developed)操作系统的替代方式,RTOS的出现使得建立嵌入式应用变得更加容易。
1. Linux的优势
因为Linux是自由软件,通过GNU通用公共许可证授权(GPL),这样程序员无须在每次开发新项目时都要不断重新设计操作层。打个比方,GNU的系列工具就好比免版税的砖块和灰泥,程序员可以用它们构建独立的项目。自由软件的批评者们常常担心自由软件的自由和低成本将会导致一场计算行业的经济灾难。然而,自由软件对计算领域的影响只不过像古腾堡(Gutenberg)的印刷机对文字世界的影响一样。
嵌入式系统是以应用为中心的,以计算机为基础,软、硬件可裁剪,适用于系统对功能、可靠性、成本、功耗严格要求的专用计算机系统。高实时性是嵌入式系统的基本要求;其次,还要求代码尽可能小,运行速度尽可能快,可靠性尽可能高。嵌入式Linux(Embedded Linux)是指对Linux经过小型化裁剪后,能够固化在容量只有几十千字节或几百兆字节的存储器芯片或单片机中,应用于特定嵌入式场合的专用Linux操作系统。嵌入式Linux的开发和研究是目前操作系统领域的一个热点。与其他的嵌入式操作系统相比,嵌入式Linux系统具有一些独特的优势。
(1)Linux系统层次结构且内核完全开放。Linux是由很多体积小且性能高的微内核和系统组成的。在内核代码完全开放的前提下,不同领域和不同层次的用户可以根据自己的应用需要很容易地对内核进行改造,在低成本的前提下,设计和开发出真正满足自己需要的嵌入式系统。
(2)强大的网络支持功能。Linux诞生于因特网并具有UNIX的特性,这就保证了它支持所有标准因特网协议,并且可以利用Linux的网络协议栈将其开发成为嵌入式的TCP/IP网络协议栈。
(3)Linux具备一整套工具链,容易自行建立嵌入式系统的开发环境和交叉运行环境,并且可以跨越嵌入式系统开发中仿真工具的障碍。一般开发嵌入式操作系统的程序调试和跟踪都是使用仿真器来实现的,而使用Linux系统做原型的时候,可以绕过这个障碍,直接使用内核调试器来进行操作系统的内核调试和查错。
(4)Linux具有广泛的硬件支持特性。无论是RISC还是CISC,32位还是64位等各种处理器,Linux都能运行。Linux最常用的微处理器是Intel X86芯片家族,但它同样能运行于Motorola公司的68 K系列CPU和IBM、Apple、Freescale公司的PowerPC CPU及Intel公司的Strong ARM CPU等处理器系统。这意味着嵌入式Linux将具有更广泛的应用前景。
2. Linux的使用领域
用户需求的不同导致了进行Linux结构和功能的配置及裁减的必要性,相应地,对Linux系统的理解程度也随着用户需求的不同而改变。Linux是进行内核研究、学习UNIX或学习编程的绝佳学习平台,有许多工具和应用程序可用来玩游戏、进行桌面排版或者只是闲来无事发一下电子邮件和浏览Web。它也是开放和封闭式生产系统的绝佳平台,因为可自由地对其进行最大程度的定制。Linux可以作为各种事务的平台,从中间件到嵌入式计算和群集,从并行超级计算机到小的电子产品。IBM已经参与了制造在Linux上运行的收银机的项目,以及制造Linux手表的项目。其他开发人员已经在手机、Sony PlayStation、TiVo和Sharp Zaurus上使用了Linux。
尽管GNU通用公共许可证要求将修改过的代码发布给使用该代码的客户,但它不要求将所有修改后的代码都发布给公众(这是某些自由软件的批评者没有领会的关键一点)。的确,对于基于Linux的收银机,把代码发布给大众在安全性上完全是一种冒险。GNU GPL只要求使用代码的客户可以获得修改后的代码。
1.4.3 嵌入式Linux系统开发平台
(1)嵌入式Linux的软件操作平台
Linux作为嵌入式操作系统是完全可行的。因为Linux提供了完成嵌入功能的基本内核和所需要的所有用户界面,能处理嵌入式任务和用户界面。将Linux看作是连续的统一体,从一个具有内存管理、任务切换和时间服务及其他分拆的微内核到完整的服务器,支持所有的文件系统和网络服务。Linux作为嵌入式系统,是一个带有很多优势的新成员。它对许多CPU和硬件平台都是易移植、稳定、功能强大、易于开发的。
嵌入式Linux系统需要下面三个基本元素:系统引导工具(用于机器加电后的系统定位引导)、Linux微内核(内存管理、程序管理)、初始化进程。但如果要它成为完整的操作系统并且继续保持小型化,还必须加上硬件驱动程序、硬件接口程序和应用程序组。
Linux是基于GNU的C编译器,作为GNU工具链的一部分,与gdb源调试器一起工作。它提供了开发嵌入式Linux系统的所有软件工具。
(2)嵌入式Linux系统硬件平台
在选择硬件时,常由于缺乏完整或精确的信息而使硬件选择成为复杂且困难的工作。硬件开发成本常是开发者很关心的。当考虑硬件成本时,需要考虑产品的整个成本而不仅是CPU的成本。如果选择了合适的CPU,一旦加上总线逻辑和延时电路使之与外设一起工作,硬件系统就可能变得非常昂贵。如果要寻找嵌入式软件系统,那么,应首先确定硬件平台,即确定微处理器CPU的型号。
现在比较流行的硬件平台有Intel公司的XScale系列,Freescale公司的DragonBall系列,NEC公司的VR系列,Hitachi公司的SH3、SH4系列及ARM系列等。选定硬件平台前,首先要确定系统的应用功能和所需要的速度,并制定好外接设备和接口标准。这样才能准确地定位所需要的硬件方案,得到性价比最高的系统。
1.4.4 Linux的发展前景
Linux的开放性和灵活性使它得以在实验室和其他研究机构中被用于创新性技术变革的前沿应用中。IBM的研究涵盖信息技术的所有领域,从物理和认知科学到前沿应用研究等。但IBM的研究人员(在很多情况下)也涉及纯科学。和其他机构一样,IBM也常常在这些场合中使用Linux。
针对极具创新性的实验或原型、仿真或者测试,可以很容易地群集或定制Linux;也可以以同样具有创新性的方法使用大量的自由软件工具(为了使用这些工具而创建了Linux)。即使有了现在正在开发的所有令人振奋的新技术——从网络计算和无线语音应用程序到人工智能和量子计算——大家所处的计算时代的潜能和前景仍然远没有被充分利用。Linux的健壮性和开放的灵活性意味着它在今后很多年都将处于开发战线的最前沿。
目前,嵌入式Linux系统开发正在蓬勃兴起,并且已经开辟了很大的市场,除了一些传统的Linux公司,像RedHat、VA Linux等正在从事嵌入式Linux的研究之外,一批新公司(如Lineo、TimeSys等)和一些传统的大公司(如IBM、SGI、Motorola、InteI等)及一些开发用有嵌入式操作系统的公司(如Lynx)也正在进行嵌入式Linux的研究和开发。但就目前的技术而言,嵌入式Linux的研究成果与市场的真正需求还有一段差距。因此,要开发出真正成熟的嵌入式Linux,还需要从以下几个方面进行努力。
1. 扩充Linux的实时性
高实时性是嵌入式操作系统的基本要求。由于Linux是一种通用操作系统,而不是真正的实时操作系统,内核不支持事件优先级和抢占实时特性,所以,在开发嵌入式Linux的过程中,首要问题是扩展Linux的实时性能。一般来说,对Linux实时性的扩展可以从两方面进行:向外扩展和向上扩展。向外扩展是从范围上扩展,让实时系统支持的范围更广,支持的设备更多。目前的开发所面向的设备一般仅限于较简单的有实时要求的串/并口数据采集、浮点数据计算等,而像实时网络这样的实时系统高级应用还需进一步的发展。向上扩展是扩充Linux内核,从功能上扩充Linux的实时处理和控制系统。如嵌入式系统RT Linux,它的基本原理是将Linux的内核代码做一些修改,将Linux本身的任务及Linux内核本身作为一个优先级最低的任务,而实时任务作为优先级最高的任务,即在实时任务存在的情况下运行实时任务,否则就运行Linux本身的任务。实时任务不同于Linux普通进程,它是以Linux的内核模块(Loadable Kernel Module,LKM)的形式存在的,需要运行实时任务的时候,将这个实时任务的内核模块插入到内核中去,实时任务和Linux一般进程之间的通信通过共享内存或者FIFO(First In First Out)通道来实现。
2. 改变Linux内核的体系结构
Linux的内核体系采用的是Monolithic。在这种体系结构中,内核的所有部分都集中在一起,而且所有的部件在一起编译连接。这样虽然能使系统的各部分直接沟通,有效地缩短任务之间的切换时间,提高了系统的响应速度,改善了实时性,并提高了CPU的利用率,但在系统比较大的时候体积也比较大,与嵌入式系统容量小、资源有限的特点不符合。而另外一种内核体系结构MicroKernel,在内核中只包括了一些基本的内核功能,如创建和删除任务、任务调度、内存管理和中断处理等部分,而文件系统、网络协议栈等部分都是在用户内存空间运行。这种结构虽然执行效率不如Monolithic内核,但大大减小了内核的体积,同时也极大地方便了整个系统的升级、维护和移植,因此更能满足嵌入式系统的特点需要。为此,为使嵌入式Linux的应用更加广泛,可以考虑将Linux目前的Monolithic内核结构中的部分结构改造成MicroKernel体系结构。通过这种折中办法,可以使Linux既具有很好的实时性,又能满足嵌入式系统体积小的要求。
3. 完善Linux的集成开发环境
提供完整的集成开发环境是每一个嵌入式系统开发人员所期待的。一个完整的嵌入式系统的集成开发环境一般需要提供的工具是编译链接器、内核调试跟踪器和集成图形界面开发平台IDE。其中的集成图形界面开发平台包括编辑器、调试器、软件仿真器和监视器等。在Linux系统中,具有功能强大的gcc编译器工具链,使用了基于GNU的调试器gdb的远程调试功能,一般由一台客户机运行调试程序,调试宿主机运行的操作系统内核。在使用远程开发时还可以使用交叉平台的方式,如在Windows平台下的调试跟踪器对Linux的宿主系统做调试。但是,Linux在基于图形界面的特定系统定制平台的研究上,与Windows操作系统相比还存在差距。因此,要使嵌入式Linux在嵌入式操作系统领域中的优势更加明显,整体集成开发环境还有待提高和完善。