




已阅读5页,还剩89页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式LINUX解决方案华恒公司是国内最早进行嵌入式Linux技术研发的公司之一。华恒公司先后推出了国内第一个嵌入式Linux的SOHO路由卡;国内第一个手持设备、PDA用的嵌入式Linux开发板;国内第一块工控应用的嵌入式uCLinux开发板。华恒公司为客户提供了一个从硬件到系统软件的开放的平台,为客户的应用开发提供了一个低成本、高效易用的Internet接入的全面解决方案。采用华恒嵌入式LINUX全面解决方案:高性价比:国人自主开发保证了该解决方案的低成本高性能。领先的硬件设计开发能力:华恒公司是能够提供硬件技术的嵌入式Linux供应商,其深厚的电信技术背景及其丰富的嵌入式系统、Linux系统的设计开发经验赋予客户强大的信心及可靠的技术支持。提供全中文软硬件开发培训:为客户带来嵌入式处理器的开发调试技术、板级硬件设计及软硬件系统整合技术能力。华恒公司与著名高校的研究机构有着长期合作的协议,并与微处理器制造的业界领导厂商进行深入合作。这些良好的资源,也为我司客户的最终产品设计提供了强有力的支持。丰富的资源:华恒公司长期支持并不断发起多项基于其嵌入式Linux开发平台的开源项目,并将源代码及时公布在技术网站上,对客户的开发进行技术指引及代码支持。嵌入式Linux随着微处理器的产生,价格低廉、结构小巧的CPU 和外设连接提供了稳定可靠的硬件架构,那么限制嵌入式系统发展的瓶颈就突出表现在了软件方面。尽管从八十年代末开始,陆续出现了一些嵌入式操作系统,比较著名的有Vxwork、pSOS、Neculeus和Windows CE。但这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步;而且,源代码封闭性也大大限制了开发者的积极性。另外,结合国内实情,当前国家对自主操作系统的大力支持,也为源码开放的Linux的推广提供的广阔的发展前景。还有,对上层应用开发者而言,嵌入式系统需要的是一套高度简练、界面友善、质量可靠、应用广泛、易开发、多任务,并且价格低廉的操作系统。在不久的将来,从冰箱到收音机都会内置处理器。因为Linux的开放性,许多人认为Linux非常适合多数Internet设备。他们认为Linux可以支持不同的设备,支持不同的配置。Linux对厂商不偏不倚而且成本极低,能够很快成为用于各种设备的操作系统。如今,业界已经达成共识:即嵌入式linux是大势所趋,其巨大的市场潜力与酝酿的无限商机必然会吸引众多的厂商进入这一领域。嵌入式操作系统主要有 Palm OS,Windows CE,EPOC,LinuxCE,QNX,ECOS,LYNX,高端嵌入式系统要求许多高级的功能,如图形用户界面和网络支持 。很多高端RTOS供应商已经提供了这些功能,但其价格也很高端,一般人难以接受。微软的Windows CE也有此类功能,却不具备大多数嵌入式系统要求的实时性能,而且难以移植,也曾经有人想以DOS为基础用单独的第三方工具拼凑一个系统,但这种努力将是白费。现在需要的是一个便宜、成熟并且提供高端嵌入式系统所必须特性的操作系统,嵌入式Linux操作系统以价格低廉、功能强大又易于移植而正在被广泛采用,成为新兴的力量,所以,众多商家纷纷转向了嵌入式linux。Linux为嵌入操作系统提供了一个极有吸引力的选择,它是个和Unix相似、以核心为基础的、完全内存保护、多任务多进程的操作系统。支持广泛的计算机硬件,包括X86 ,Alpha, Sparc, MIPS, PPC, ARM, NEC, MOTOROLA 等现有的大部分蕊片。程式源码全部公开,任何人可以修改并在GNU通用公共许可证(GNU General Public License)下发行,这样,开发人员可以对操作系统进行定制,再也不必担心像MS Windows 操作系统中后门的威胁。同时由于有GPL的控制,大家开发的东西大都相互兼容,不会走向分裂之路。Linux 用户遇到问题时可以通过Internet向网上成千上万的Linux开发者请教,这使最困难的问题也有办法解决。Linux 带有Unix 用户熟悉的完善的开发工具,几乎所有的Unix系统的应用软件都已移植到了Linux 上。Linux还提供了强大的网络功能,有多种可选择窗口管理器(X windows)。其强大的语言编译器gcc、g+等也可以很容易得到。不但成熟完善、而且使用方便。选择linux的原因可应用于多种硬件平台。Linux 已经被移植到多种硬件平台,这对受开销、时间限制的研究与开发项目是很有吸引力的。原型可以在标准平台上开发然后移植到具体的硬件上,加快了软件与硬件的开发过程。Linux可以随意地配置不需要任何的许可证或商家的合作关系。它是免费的,源代码可以得到。这是最吸引人的。毫无疑问,这会节省大量的开发费用。它本身内置网络支持。Linux的高度模块化使添加部件非常容易。Linux在台式机上的成功,使大家看到了linux在嵌入式系统中的辉煌前景。嵌入式系统及如何开发自己的嵌入式系统-由JoelR.Williams提供 多数Linux系统是在PC平台上运行,然而Linux作为嵌入式系统也是非常稳定的。本文描绘了一个嵌入式系统的概览,并展示嵌入式系统产品是如何使用Linux的。嵌入式系统比摩西还老的故事 电脑用于控制设备或嵌入系统的历史几乎电脑自身的历史一样长。在通讯领域,六十年代晚期,电脑被用于电子电话交换机,称为“存储程序控制”系统。“电脑”这词那时并不普遍,存储程序指内存装有程序和例程信息。存储控制逻辑,而不是将其固化在硬件中,在当时确实是突破性的。今天,我们认为它本来就应如此。那时的电脑是为每一个应用而定制的,按今天的标准,它们是一些不正常的、由奇怪的特殊指令和IO设备集成在一部电脑中。微处理器通过提供构建大系统模块的小型、低成本、CPU引擎改变了这一切。它提出了外设通过总线联接的固定硬件架构及称为编程的一般编程模型。软件也随着硬件提出。最初,编写和测试软件只有简单的编程开发工具。每个项目实际运行的软件通常来自于草稿的修改。编程常用汇编语言或宏语言,因为编译器常常有缺陷和缺乏完善的调试工具。软件构建模块和标准化库只是到了七十年代才流行起来的概念。 嵌入式系统的商品化操作系统在1970年代后期才出现,许多是用汇编语言写成的,并且只能用于特定的微处理器,当微处理器被淘汰时,它的操作系统除非为新处理器重写,否则也要被淘汰。今天,许多这类早期的系统成了些模糊的记忆;还有谁记得MTOS吗?当C语言出现时,操作系统编写的效率、稳定性、可移植性都提高了很多。这一点在管理上立刻表现出来,它为微处理器被淘汰时保护软件投资带来了希望。对于市场来说这是一个好消息。用C语言写成的操作系统今天越来越普遍。一般来说,可重复使用的软件已经占主导并越做越好。在八十年代早期,我最喜欢的操作系统是Wendon操作系统,大约150美元就可以得到一个C源码库。它是一个包,你可以通过选择部件建立自己的操作系统,类似在菜单上点菜。例如,你可以在库清单上点工作排程安排和内存管理方案。 很多嵌入式系统的商品化操作系统是在八十年代出现的。这一热潮持续到现在,今天,有很多可行的商品化操作系统可供选择。一些大佬出现了,如VxWorks, pSOS, Neculeus和Windows CE。许多嵌入式系统根本没有操作系统,只有循环控制。对于一些简单设备这是足够的,但是随着系统越来越复杂,操作系统就很必要了或软件变得不可思议的复杂。不幸的是,有些复杂得可怕的嵌入式系统只因为设计者坚持不要操作系统才那么复杂。渐渐地,更多嵌入式系统需要与各类网络联接,因此需要网络功能。即便是酒店的门把手也嵌入了微处理器与网络相联。 对于仅仅是编码控制循环的嵌入式系统,增加网络功能将导致系统复杂程度提高以致要求操作系统。除了商品化操作系统,还有大量专用操作系统。其中大部分来自于草案,如CISCO的IOS;还有是从其他操作系统中派生出来的。例如,许多操作系统是从同一版本的Berkeley Unix系统派生,因为它有完整的网络功能。其他是基于主要操作系统的如KA9Q来自Phil Karn。Linux作为嵌入式系统是一个带有很多优势的新成员。它对许多CPU和硬件平台都是可移植的、稳定、功能强大、易于开发。工具包突破ICE的障碍开发嵌入式系统的关键的是可用的工具包。像任何工作一样,好的工具使得工作更快更好。开发的不同阶段需要不同的工具。传统上,首先用于开发嵌入式系统工具是内部电路仿真器(ICE),它是一个相对昂贵的部件,用于植入微处理器与总线之间的电路中,允许使用者监视和控制微处理器所有信号的进出。这有点难做,因为它是异体,可能会引起不稳定。但是它提供了总线工作的清晰状况,免了许多对硬件软件底层工作状况的猜测。过去,一些工作依赖ICE为主要调试工具,用于整个开发过程。但是,一旦初始化软件对串口支持良好的话,多数的调试可以不用ICE而用其他方法进行。较新的嵌入式系统利用非常清晰的微处理器设计。有时,相应工作初始码已经有了能够快速获得串口工作。这意味着没有ICE人们也能够方便地工作。省去ICE降低了开发的成本。一旦串口开始工作,它可以支持各种专业开发工具。Linux是基于GNU的C编译器,作为GNU工具链的一部分,与gdb源调试器一起工作。它提供了开发嵌入式Linux系统的所有软件工具。这有些典型的、用于在新硬件上开发嵌入式Linux系统的调试工具。1. 写入或植入引导码2. 向串口打印字符串的编码,如“Hello World”(事实上我更喜欢“Watson,Come hre I need you”,电话上常用的第一个词。)3. 将gdb目标码植入工作串口,这可与另一台运行gdb程序的Linux主机系统对话。只要简单地告诉gdb通过串口调试程序。它通过串口与测试机的gdb目标码对话,你可以进行C源代码调试,也可以用这个功能将更多的码载入RAM或Flash Memory中。4. 利用gdb让硬件和软件初始化码在Linux内核启动时工作。5. 一旦Linux内核启动,串口成为Linux控制口并可用于后续开发。利用kgdb,内核调试版的gdb,这步常常不作要求,如果你与网络联接,如10BaseT,下一步你可能要启动它。6. 如果在你的目标硬件上运行了完整的Linux内核,你可以调试你的应用进程。利用其他的gdb或覆盖gdb的图形如xgdb。什么是实时系统?嵌入式系统常常被错误地分为实时系统, 尽管多数系统一般并不要求实时功能。实时是一个相对的词,纯化论者常常严格地定义实时为对一事件以预定的方式在极短的时间如微秒作出响应渐渐地,在如此短暂时间间隔内的严格实时功能在专用DSP芯片或ASIC上实现了。只有在设计低层硬件FIFO、分散聚集DMA引擎和定制硬件时才会有这样的要求。许多设计人员因为对真实的要求设有清晰的理解而对实时的要求焦虑不安。对于大多数的系统,在一至五微秒的近似实时响应已经足够。同样软需求也是可以接受的。如 Windows 98 已经崩溃的中断必须在4毫秒内(98)内、或20毫秒(0)内进行处理。这种软要求是比较容易满足的,包括环境转换时间、中断等待时间、任务优先级和排序。环境转换时间曾是操作系统的一个热门话题。总之,多数 CPU 这些要求处理得很好,而且CPU的速度现在已经快了很多,这个问题也就不重要了。严格的实时要求通常由中断例程或其他内核环境驱动程序功能处理,以确保稳定的表现,等待时间,一旦请求出现要求服务的时间很大程度上取决于中断的优先及其他能暂时掩盖中断的软件。中断必须进行处理和管理以确保时间要求能符合,如同许多其他的操作系统。在IntelX86处理器中,这工作很容易由Linux实时扩展处理。这是提供了一个以后台任务方式运行Linux的中断处理调度。关键的中断响应不必通知Linux。因此可以得到许多对于关键时钟的控制。在实时控制级和时间限制宽松的基本Linux级之间提供接口,这提供了与其他嵌入式操作系统相似的实时框架。因此,实时关键代码是隔开的、并“设计”成满足要求的。代码处理的结果是以更一般的方法也许只在应用任务级。 嵌入式系统定义 一个观点是如果一个应用没有用户界面,它必须是嵌入式的,因为用户不能直接与之交互。当然这是简单化的。一个电梯控制的电脑被认为是嵌入式的:按键选择楼层指示灯显示电梯的停层。对于联网的嵌入式系统,如果系统包含监视和控制的网络浏览器,这种界限就更加模糊了。更好些的定义注重系统的集中的功能和主要的目的。因为Linux提供了完成嵌入功能的基本的内核和你所需要的所有用户界面,它是多面的。它能处理嵌入式任务和用户界面。将Linux看作是连续的统一体,从一个具有内存管理、任务切换和时间服务及其他的分拆的、微内核到完整的服务器,支持所有的文件系统和网络服务。一个小型的嵌入式Linux系统只需要下面三个基本元素:引导工具Linux微内核,由内存管理、进程管理和事务处理构成 初始化进程:如果要让它能干点什么且继续保持小型化,还得加上:硬件驱动程序提供所需功能的一个或更多应用程序。再增加功能,或许需要这些一个文件系统(也许在ROM或RAM中)TCPIP网络堆栈存储半过渡数据和交换用的磁盘。硬件平台选择最好的硬件是一个复杂的工作、充满了公司其他项目的政治、偏见、传统,缺乏完整或精确的信息。 成本经常是关键的议题。当考虑成本时、确信你在考虑产品的整个成本、不仅是CPU。有时快的、便宜的CPU一旦加上总线逻辑和时延使之与外设一起工作,能变成一个昂贵的狗的产品。如果你在寻找软件,首先是硬件已经有产品了。如果你是系统设计者,由你决定制定实时的预算及硬件的工作是否满意。现实中需要多快的CPU来完成一项工作,然后放大三倍。奇怪,CPU理论上的速度竟与现实中一样,别忘了应用程序将会充分利用cache。想象总线的速度需要多快,如果有其他总线如PCI总线,包括进来。慢的总线或产生DMA阻塞的总线会降低CPU的速度造成拥挤。 有集成设备的CPU是好的,因为只须调试很少的设备,并且支持通用CPU的驱动程序通常都很容易获得。在我的项目中,芯片与外设的联接经常出问题或不满足我们所需的兼容性。因为外设是集成的,不要认为这会便宜。将10斤重的Linux塞入只能装5斤的袋中 对于Linux一个共同的认识是它用于嵌入式系统简直是神奇极了。这可能不大对,典型的PC上的Linux 对PC用户来说功能有多。对初学者而言,可以将内核与任务分开,标准的Linux内核通常驻留在内存中,每一个应用程序都是从磁盘运到内存上执行。当程序结束后,它所占用的内存就被释放,程序就被下载了。在一个嵌入式系统里,可能没有磁盘。有两种途径可以消除对磁盘的依赖,这要看系统的复杂性和硬件的设计。在一个简单的系统里,当系统启动后,内核和所有的应用程序都在内存里。这就是大多数传统的嵌入式系统工作模式,它同样可以被Linux支持。有了Linux,就有了第二种可能性。因为Linux已经有能力“加载”和“卸载”程序,一个嵌入式系统就可以利用它来节省内存。试想一个典型的包括一个大概8MB到16MB的Flash Memory和8MB内存的系统。Flash Memory可以作为一个文件系统。Flash Memory驱动程序用来连接Flash Memory和文件系统。作为替代,可使用Flash Disk。这Flash部件用软件仿真磁盘。其中一个例是M-Systems的DiskOnChip,可以达到160MB。()。所有的程序都以文件形式存储在Flash文件中,需要时可以装入内存。这种动态的、“根据需要加载”的能力是支持其它一系列功能的重要特征:它使初始化代码在系统引导后被释放。Linux同样有很多内核外运行的公用程序。这些通常程序在初始化时运行一次,以后就不再运行。而且,这些公用程序可以用它们相互共有的方式,一个接一个按顺序运行。这样,相同内存空间可以被反复使用以“召入”每一个程序,就象系统引导一样。这的确可以节省内存,特别是那些配置一次以后就不再更改的网络堆栈 如果Linux可加载模块的功能包括在内核里,驱动程序和应用程序就都可以被加载。它可以检查硬件环境并且为硬件装上相应的软件。这就消除了用一个程序占用许多Flash Memory来处理多种硬件的复杂性。软件的升级更模块化。你可以在系统运行的时候在Flash上升级应用程序和可加载驱动程序。配置信息和运行时间参数可以作为数据文件储存在Flash上。非虚拟内存标准 Linux 的另一个待征是虚拟内存的能力。正是这种神奇的特征使应用程序员可以狂热的编写代码而不计后果,不管程序有多大。程序溢出到了磁盘交换区。在没有磁盘的嵌入式系统里,通常不能这么做。在嵌入式系统里不需要这种强大的功能。实际上,你可能不希望它在实时的关键系统里,因为它会带来无法控制的时间因素。这个软件必须设计得更加精悍,以适合市面上物理内存,就象其它嵌入式系统一样。注意由于CPU的原因,通常在Linux中保存虚拟内存代码是明智的,因为将它清除很费事。而且还有另外一个原因是它支持共享文本,这样就可以使许多程序共享一个软件。没有这个,每一个程序都要有它自己的库,就象printf一样。虚拟内存的调入功能可以被关掉,只要将交换空间的大小设置为零。然后,如果你写的程序比实际的内存大,系统就会当作你的运行用尽了交换空间来处理;这个程序将不会运行,或者malloc将会失灵。在许多CPU上,虚拟内存提供的内存管理可以将不同程序分开,防止它们写到其它地址的空间上。这在嵌入式系统上通常不可能,因为它只支持一个简单、扁平的地址空间。Linux的这种功能有助于其发展。它减少了胡乱的编写程序造成系统崩溃的可能性。许多嵌入式系统基于效率方面的原因有意识使用程序间可以共享的“全局”数据。这也可以通过Linux共享内存功能来支持,共享的只是指定的内存部分。文件系统许多嵌入式系统没有磁盘或者文件系统。Linux不需要它们也能运行。如前所述,应用程序任务可以和内核一起编写,并且在引导时作为一个影像加载。对于简单的系统来说,这就够了。然而,它缺乏前面所说的灵活性。实际上,许多商业性嵌入式系统,提供文件系统作为选项。许多或者是专用的文件系统或者是MS-DOS-Compatible文件系统。Linux提供MS-DOS-Compatible文件系统,同时还有其它多种选择。之所以提供其它选择是因为它们更加强大而且具有容错功能。Linux还具有检查和维护的功能,商业性供应商往往不提供这些。这对于Flash系统来说尤其重要,因为它是通过网络更新的。如果系统在升级过程中失去了能力,那它就没有用了。维护的功能通常可以解决这类问题。文件系统可以被放在传统的磁盘驱动器、Flash Memory或其它这类的介质上。而且,用于暂时保存文件,一个小RAM盘就足够了。Flash Memories被分割成块。这些块中也许包括一个含有当CPU启动时运行的最初的软件的引导块。这可能包括Linux 引导代码。剩余的Flash可以用作文件系统。Linux的内核可以通过引导代码从Flash复制到RAM,或者还有一个选择,内核可以被存储在Flash的一个独立部分,并且直接从那里执行。另外对于一些系统来说还有一个有趣的选择,那就是将一个便宜的CD-ROM包含在内。这比Flash Memory 便宜,而且通过交换CD-ROM支持简单的升级。有了这个,Linux 只要从 CD-ROM上引导,并且象从硬盘上一样从CD-ROM上获得所有的程序。最后,对于联网的嵌入式系统来说,Linux 支持NFS(Network File System)。这为实现联网系统的许多增值功能打开了大门。第一,它允许通过网络上加载应用程序。这是控制软件修改的基础,因为每一个嵌入式系统的软件都可以在一个普通的服务器上加载。它在运行的时候也可以用来输入或输出大量的数据、配置和状态信息。这对用户监督和控制来说是一个非常强大的功能。举例来说,嵌入式系统可以建立一个小的RAM磁盘,包含的文件中有与当前状态信息同步的内容。其它系统可以简单的把这个RAM磁盘设置为基于网络的远程磁盘,并且空中存取状态文件。这就允许另一个机器上的Web服务器通过简单的CGI Script存取状态信息。在其它电脑上运行的其它应用程序包可以很容易的存取数据。对更复杂的监控,应用程序包如Matlab(/products/matlab/),可以用来在操作员的PC或工作站的提供系统运行的图形展示。引导LILO和BIOS在哪里 当一个微处理器第一次启动的时候,它开始在预先设置的地址上执行指令。通常在那里有一些只读内存,包括初始化或引导代码。在PC上,这是BIOS。它执行了一些低水平的CPU初始化和其它硬件的配置。BIOS 继续辨认哪个磁盘里有操作系统,把操作系统复制到RAM并且转向它。实际上,这非常复杂,但对我们的目标来说也非常重要。在PC上运行的Linux依靠PC的BIOS来提供这些配置和OS加载功能。在一个嵌入式系统里经常没有这种BIOS。这样你就要提供同等的启动代码。幸运的是,嵌入式系统并不需要PC BIOS 引导程序那样的灵活性,因为它通常只需要处理一个硬件的配置。这个代码更简单也更枯燥。它只是一指令清单,将固定的数字塞到硬件寄存器中去。然而,这是关键的代码,因为这些数值要与你的硬件相符而且要按照特定的顺序进行。所以在大多数情况下,一个最小的通电自检模块,可以检查内存的正常运行、让LED闪烁,并且驱动其它必须的硬件以使主Linux OS启动和运行。这些启动代码完全根据硬件决定,不可随意移动。幸运的是,许多系统都有为核心微处理器和内存所定制的菜单式硬件设计。典型的是,芯片制造商有一个样本主板,可以用来作为设计的参考或多或少与新设计相同。通常这些菜单式设计的启动代码是可以获得的,它可以根据你的需要轻易的修改。在少数情况下,启动代码需要重新编写。 为了测试这些代码,你可以使用一个包含模拟内存的电路内置模拟器,它可以代替目标内存。你把代码装到模拟器上并通过模拟器调试。如果这样不行,你可以跳过这一步,但这样就要一个更长的调试周期。这个代码最终要在较为稳定的内存上运行,通常是Flash或EPROM芯片。你需要使用一些方法将代码放在芯片上。怎么做,要根据“目标”硬件和工具来定。一种流行的方法是把Flash或EPROM芯片插入EPROM或Flash烧制器。这将把你的程序“烧”(存)入芯片。然后,把芯片插入你的目标板的插座,打开电源。这个方法需要板上配有插座,但有些设备是不能配插座的。 另一个方法是通过一个JTAG界面。一些芯片有JTAG界面可以用来对芯片进行编程。这是最方便的方法。芯片可以永远被焊在主板上,一个小电缆从板上的JTAG连接器,通常是一个PC卡,联到JTAG界面。下面是PC运行JTAG界面所需的一些惯用程序。这个设备还可以用来小量生产。健壮性比政治家的承诺更可靠在PC硬件上运行时,Linux是非常可靠和稳定的,特别是和现在流行的一些操作系统相比。嵌入式内核本身有多稳定呢?对大多数微处理器来说,Linux非常好。移植到新微处理器家族的Linux内核运行起来与本微处理器一样稳定。它经常被移植到一个或多个特定的主板上。这些板包括特定的外围设备和CPU。幸运的是,许多代码是与处理器的,所以移植集中在差异上。其中大多数是在内存管理和中断控制领域。一旦成功移植,它们就非常稳定。前面我们讨论过,引导策略广泛依赖于硬件要求,而且你必须有计划地做一些定制的工作。设备驱动程序更加混乱:有些稳定有些不稳定。而且选择很有限;一旦你离开了通用的PC平台,你需要自己编写。幸运的是,周围有许多驱动程序,你可能可以找到一个与你的需求相近的修改一下。这种驱动程序界面已定义好。许多类的驱动程序都非常相近,所以把磁盘、网络或一系列的端口驱动程序从一个设备移植到另一个设备上通常并不难。我发现许多驱动程序都写得很好,很容易理解,但你还是要准备一本关于内核结构的书在手头。 依我的经验,Linux至少和我用过的著名的商业性操作系统一样稳定。总之,这些操作系统和Linux的问题在于对工作过程微秒之处的误解,而不在于代码的难度或基本的设计错误。任何操作系统都有很多争论不休的故事,这里不需要重复。Linux的优势在于源代码是公开、注释清晰和文档齐全的。这样,你就可以控制和处理所出现的任何问题。伴随着基本内核和驱动程序,还有其它问题。如果系统有一个硬盘, 那么文件系统的可靠性就成问题。我们有用磁盘进行Linux系统设计超过两年的经验。这些系统几乎从未正常关闭过。电源随时都可能被中断。感觉非常好,使用的是标准(EXT2)文件系统。标准Linux初始化脚本运行fsck程序,它在检查和清除不稳定的inodes方面非常有效。将默认的每隔30秒运行更新程序改为每隔5或10秒运行是比较明智的。这样缩短了数据在进入磁盘之前,待在高速缓冲存储器内的时间,降低了丢失数据的可能性。如何发展嵌入式Linux的确有它的缺陷。比如,虽然它并不比某些商业竞争对手差多少,但它的确是个贪婪的存储器。这可以通过减少一些不必要的功能来弥补,但这可能会花很长的时间,而且如果不仔细的话,还可能带来很大的困扰。许多Linux的应用程序都要用到虚拟内存,在许多嵌入式系统中,是没有价值的,所以不要以为一个没有磁盘的嵌入式系统可以运行任何Linux应用程序。内核调试工具都不怎么好,特别是在较底层的。kgdb可以使错误定位非常容易,你只要重新启动。不幸的是,打印语句更麻烦。然而,对我来说最糟糕的是心理上的问题。Linux非常的灵活。嵌入式系统总的来说却不灵活;而且它们完全是为最有效实现预定功能而严格设计的。现在的趋势是保持灵活性、保持总体目标功能、尽量少做修改。这个目标是崇高的,但是,所付出的代价将是针对具体的工作做出巨大的调整。保持灵活性将导致额外的工作,带着额外的软件包,而且有时还要降低性能。一个反复出现的例子就是配置。考虑在一个网络界面配置IP地址,这通常是通过从启动 script上运行ifconfig程序来完成的。这是一个28K的程序,从配置文件上调用数据,可以用几行代码代替,初始化合适的结构。然而,即使这非常合理,但它仍然有害,因为它用一种从未使用过的方法扭曲了软件。Linux在嵌入式系统中的应用是可行的。它有用、可靠。它的发展成本和替代者一致。随着 CE(消费电子)供应商不断竞争市场份额,消费者要求设计师在每件新产品或产品升级时纳入更多的功能。用户不再满足于只提供一种功能的设备。各种多功能设备都在争夺消费者钱包中的钱,如手机、媒体播放机、数码相机、游戏机、收音机和电视机等。针对这种复杂性,32 b处理器、网络联接、全图形显示、安全以及多线程软件已经成为新设计中的标准配置。鉴于 CE 产品的巨大批量和微薄的利润余地,设计团队正在研究和利用 Linux 操作系统,以解决软件的负担。Linux 的多种特性使之很适合于 CE 项目。Linux 最初吸引设计师的是它免费的源码、无需许可费用,也没有单台设备的专利金。与机构内部开发或商业化的操作系统相比较,这些成本相当高,在项目生命周期中要增加数千美元。成本竞争与预算限制迫使软件开发团队不得不为新项目考虑一种无需专利金的免费软件,如 Linux。Linux 包括内核、作业控制 环境以及应用程序。Linux 内核的基本架构包括内存管理、进程调度、文件系统和网络接口。内存管理器可以使多个程序安全地共享系统内存,而进程调度器可以确保各个程序能够公平地访问 CPU。虚拟文件系统隐藏了硬件的细节,为用户提供公共的文件界面。Linux 内核占用 RAM一般 低于 1M B,作业控制环境提供一个用户界面,它可以简单到一个命令行,或者像 Windows 的图形界面一样复杂。当设计师从用于 8b 和 16 b 处理器的功能有限“自行设计”操作系统转向复杂的应用程序时,应用程序的复杂性超出了内部软件团队的能力或预算,于是 Linux 就出现了。这些开发人员习惯于维护自己的软件包,而用 Linux 许可协议很适合他们的口味。开放源 Linux 增加了一些功能,如内置联网支持以及图形等,可以在新项目开发中节省很多编码与整合时间。随着大批新一代高速、低成本32b处理器和 Linux 的抢先改进,开发人员发现嵌入系统的实时需求已不再是一个负担。尽管数据速率提高了,但用户 I/O 的时序仍保持相对稳定,程序员在处理今天高速处理器的 I/O 请求时有更多可用的时钟周期。Linux 并非要提供决定性的性能,而是用于以前需要实时操作系统的一些应用上。低开销Linux 是模块化的,开发者可以构建一个经修改的小型软件包,装入每台设备的内存中,从而消除了专用的多用途操作系统中的代码开销。Linux 还支持大量的微处理器,使之最适合于变化多端的消费产品市场。由于设计师可以将 Linux 移植到最常见的嵌入式处理器上,不存在迫使开发者改变硬件决策的软件限制。设计师可以用一个低成本的微处理器开始生产,它只需满足当前的需求,而随着设备需求和功能的扩展,又能够方便地升级为一个功能更强大的 CPU。Linux 开发人员会定期对内核进行更新,使之包含来自用户社团的插入码和建议内容。可以从 找到最新内核的相关信息,下载最新版本。现在的 2.6 版包括很多抢先点,允许调度器可以挂起一个工作任务,而起动一个更高的优先级进程。进程调度算法经过重写,加快了多任务应用中作业的切换速度。除了实时方面的改进外,2.6 版还有多个有益于消费设备应用程序的更新。例如,蓝牙和 USB 2.0 等增强外设选项,ALSA(高级 Linux 声音架构)可以使应用程序处理多个音频流,而 Video4Linux 则增加了一个视频子系统。用于深度嵌入系统的其它更新内容也只占很少空间,适用于容量有限的应用。Linux 的许可协议对消费设备开发者来说有正、反两方面的意义。从好的一面说,你可以下载免费的 Linux 拷贝,在自己的产品中使用,无需支付专利金,想用多少就可以用多少。Linux 是按照 GNU 的 GPL(通用公共许可)使用规则发放许可。如果你修改并重新分发 GPL 软件,你的修改也自动遵从 GPL,并且必须公开源码。应用程序和设备驱动可能会保持专有性,只要它们与 Linux 内核无关,不含 GPL 代码。但代码隔离的要求是小型消费设备开发者所担心的事,因为他们会将所有软件保存在一个 ROM里。除了许可的不确定性外,Linux 用户还面临其它非技术性因素。例如,SCO(Santa Cruz Operation) 集团提出法律质疑,称 Linux 包含残余的专有 Unix 代码,并强制对内核作修改,甚至要求获得专利金。在2005年 12 月,SCO 集团提出扩展对 Novell 的诉讼,它是 UNIX 知识产权原来的所有者,也是现在的一个 Linux 开发商。最新的消息和 SCO纠纷的全部历史可以浏览Linux 在线网站,。内核补码开发者在开放源 Linux 环境中预见到的另一个可能的危险是软件破碎的可能性。如果公司 A 决定修改 Linux 内核来解决自己产品中的一个集成问题,而公司 B 作了类似但不兼容的修改,于是现在就有了三个 Linux 版本。当下一个正式 Linux 更新版推出时,两家公司都要搜索修正后的代码,重新纳入这些改动内容,或者继续使用旧版本。最聪明的选择恐怕是不修改内核,而使用为调试用的源代码,或者了解 Linux 的内部功能。现在,Linux 社团利用复杂系统的升级建议与发布,已经成功地防止了多版本的出现。虽然 Linux 是一个免费的操作系统,但很多设计师仍希望付费获得专业支持、特殊工具、定制服务以及预包装好的配置,以方便开发过程。商业化供应商用定制的嵌入式配置、订户支持包、开发工具套件、应用实例,以及咨询服务,作为 Linux 的增强服务。但与限制用户使用单一来源的商业化专有操作系统不同,Linux 用户仍然享有从任何其他供应商处获得支持的自由。看到 Linux 在 CE 产品中日益普遍的应用,某些商用 RTOS(实时操作系统)供应商也加入了开放源运动,提供定制分销、开发工具,支持并向严格的实时应用推广自己的专有软件。例如,Wind River 产品系列经理 Glenn Seiler 这样总结公司的策略:“市场希望有个选择。在有些情况下,市场想要 RTOS,因为有严格的实时要求或占位面积小的要求,有些客户仍然反感 GPL 概念。其他一些进行了大量既有投资的用户也想继续使用 RTOS。”Seiler 也描述了其他一些客户,他们希望得到快速创新的好处、无专利金的模式,他们希望控制源码,希望保持与供应商的无关性,也不怕 GPL 的麻烦。他说,这些客户的态度更偏向 Linux。他解释说:“我们希望提供一种既能满足 RTOS 客户,也能满足 Linux 客户的解决方案。我们的方案采用了一种基于 Workbench 工具套件的策略,它是一个万能的生命周期产品,覆盖从电路板设计到固件开发,直到内核电路板支持开发、应用程序开发和调试等全部内容。”Wind River 的 Workbench 套件是建立在开放源的 Eclipse 集成开发环境上的(图 1)。 同样,MontaVista 软件公司提供 Linux CEE(消费电子版),这是一个用于 CE 设备的嵌入式操作系统和交叉开发环境。该软件包具有动态电源管理、增强的文件系统、用于系统性能调整的新开发工具、处理器和外设的支持、适合应用开发的交叉开发工具,以及样品实用工具、库和驱动程序等。CEE 支持来自Freescale、Intel、Renesas 和 Texas Instruments的多种为消费设备定制的处理器。MontaVista 还为无线手机和移动产品提供 Linux for Mobile Devices(Mobilinux),满足它们对电源管理、严格实时性能、快速起动以及占位面积小的需求(图 2)。TiVo 领头很多 CE 设备都组合有 Linux 操作系统,但 TiVo 个人录像机是被最普遍公认的。TiVo Linux 也是爱好者们最喜欢拿来修改的软件,修改后可以使用更大硬盘或通过添加硬盘来增加存储容量,或者将录制的节目传送到计算机或其它设备中。Linux 可能会成为索尼为它下一代游戏机 PlayStation 3 提供软件包的一部分,该产品预计在 2006 年春季上市。Linux也为最近推出的诺基亚 770 Internet Tablet所采用,它带有 802.11、USB 和蓝牙连接、800480 像素触摸屏以及 64 MB 闪存(图 3)。除了网页浏览器以外,770 还带有一个 E-mail 客户机、媒体播放器、文件管理器、游戏,以及几个通用应用程序。诺基亚 770 的网购价格为 360 美元。在今年拉斯维加斯的消费电子大展上,Sonos 推出了基于 Linux 的 ZonePlayer ZP80(见图),它是一个无线系统的组成部分,可以使用户在家中将数字音乐流送至音频设备。用模拟或数字输出将 ZP80 连接到任何音频功放设备上后,该设备就成了一台无线、多室数字音乐系统的组成部分,你可以用一个彩色的 Sonos 控制器进行操作。ZP80 包含有一个自动检测的线路输入连接器,它可以对任何输入的音频源进行数字编码,如 Apple iPod、CD 机或卫星收音机。Sonos ZonePlayer ZP80 的零售价为 349 美元。如果你对 CE 使用的 Linux 还比较陌生,可以到 CELF(消费电子 Linux 论坛)查找消息、讨论和定制源码。该论坛的目标是通过公开规范并管理面向 CE 的代码,增强在 CE 设备中使用的 Linux 的功能。另外也可以在 上找到有关 Linux CE 产品的信息。该网站包括最新消息、文章以及有关 Linux 编程的教程、现有分销商名单,以及有关嵌入系统主题的论坛。当下一代 CE 设备进入市场时,设计师必须准备好为定制的应用软件提供复杂的用户界面、网络联接能力,以及实时数据安全功能。Linux 提供了一种无需专利金的开放源操作系统,已经内置了一些这样那样的功能。事实上,在互联网上已经有数百万免费的 Linux 兼容软件,支持 CE 开发项目。有了这些好处以及越来越多的技术爱好者,Linux 在 CE 行业一定有光明的前景。第7章 嵌入式uClinux及其应用开发(1)本章从构建一个针对S3C4510B硬件平台的嵌入式uClinux操作系统和在其上进行应用程序的开发入手,逐步讲述如何在Linux环境下编写用户应用程序的方法和步骤,并为熟悉Windows操作系统的用户介绍在这种平台之上,使用何种工具编写和编译自己的应用。通过本章的学习,读者可以对嵌入式uClinux有一定的了解,并且掌握在Linux和Windows下嵌入式系统应用开发的基本方法。 本章主要内容有: 嵌入式uClinux系统概况 开发工具GNU的使用 建立uClinux开发环境 在uClinux下开发应用程序7.1 嵌入式uClinux系统概况在PC机上开发应用程序的用户都会有这样的感觉,PC机有完善的操作系统并提供应用程序接口(API),开发好的应用程序可以直接在操作系统上运行。虽然嵌入式系统的应用程序完全可以在裸板上运行,但为了使系统具有任务管理、定时器管理、存储器管理、资源管理、事件管理、系统管理、消息管理、队列管理和中断处理的能力,提供多任务处理,更好的分配系统资源的功能,用户就需要针对自己的硬件平台和实际应用选择适当的嵌入式操作系统(Embedded Operating System,以下简称EOS)。本节将结合本书所谈到的硬件平台S3C4510B,介绍一种针对不带MMU的ARM微处理器的嵌入式操作系统uClinux。uClinux是一个完全符合GNU/GPL公约的操作系统,完全开放代码,现在由Lineo公司支持维护。uClinux的发音是“you-see-linux”,它的名字来自于希腊字母“mu”和英文大写字母“C”的结合。“mu”代表“微小”之意,字母“C”代表“控制器”,所以从字面上就可以看出它的含义,即“微控制领域中的Linux系统”。为了降低硬件成本及运行功耗,有一类CPU在设计中取消了内存管理单元(Memory Management Unit,以下简称MMU)功能模块。最初,运行于这类没有MMU的CPU之上的都是一些很简单的单任务操作系统,或者更简单的控制程序,甚至根本就没有操作系统而直接运行应用程序。在这种情况下,系统无法运行复杂的应用程序,或者效率很低,而且,所有的应用程序需要重写,并要求程序员十分了解硬件特性。这些都阻碍了应用于这类CPU之上的嵌入式产品开发的速度。然而,随着uClinux的诞生,这一切都改变了。uClinux从Linux 2.0/2.4内核派生而来,沿袭了主流Linux的绝大部分特性。它是专门针对没有MMU的CPU,并且为嵌入式系统做了许多小型化的工作。适用于没有虚拟内存或内存管理单元(MMU)的处理器,例如ARM7TDMI。它通常用于具有很少内存或Flash的嵌入式系统。uClinux是为了支持没有MMU的处理器而对标准Linux作出的修正。它保留了操作系统的所有特性,为硬件平台更好的运行各种程序提供了保证。在GNU通用公共许可证(GNU GPL)的保证下,运行uClinux操作系统的用户可以使用几乎所有的Linux API函数,不会因为没有MMU而受到影响。由于uClinux在标准的Linux基础上进行了适当的裁剪和优化,形成了一个高度优化的、代码紧凑的嵌入式Linux,虽然它的体积很小,uClinux仍然保留了Linux的大多数的优点:稳定、良好的移植性、优秀的网络功能、完备的对各种文件系统的支持、以及标准丰富的API等。图7.1为uClinux的基本架构。图7.1 uClinux的基本架构Boot Loader:负责Linux内核的启动,它用于初始化系统资源,包括SDRAM。这部分代码用于建立Linux内核运行环境和从Flash中装载初始化ramdisk。内核初始化:Linux内核的入口点是start_kernel()函数。它初始化内核的其他部分,包括捕获,IRQ通道,调度,设备驱动,标定延迟循环,最重要的是能够fork “init”进程,以启动整个多任务环境。系统调用函数/捕获函数:在执行完“init”程序后,内核对程序流不再有直接的控制权,此后,它的作用仅仅是处理异步事件(例如硬件中断)和为系统调用提供进程。设备驱动:设备驱动占据了Linux内核很大部分。同其他操作系统一样,设备驱动为它们所控制的硬件设备和操作系统提供接口。文件系统:Linux最重要的特性之一就是对多种文件系统的支持。这种特性使得Linux很容易地同其他操作系统共存。文件系统的概念使得用户能够查看存储设备上的文件和路径而无须考虑实际物理设备的文件系统类型。Linux透明的支持许多不同的文件系统,将各种安装的文件和文件系统以一个完整的虚拟文件系统的形式呈现给用户。下面介绍一些和uClinux相关的知识。1、 MMU(内存管理单元) 和VM(虚拟内存)许多嵌入式微处理器都由于没有MMU而不支持虚拟内存。没有内存管理单元所带来的好处是简化了芯片设计,降低了产品成本。由于大多数的嵌入式设备没有磁盘或者只有很有限的内存空间,所以无需复杂的内存管理机制。但是由于没有MMU的管理,操作系统对内存空间是没有保护的,所有程序访问的地址都是实际物理地址。但从嵌入式系统一般都是实现某种特定功能的角度考虑,对于内存管理的要求
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年统编版(2024)小学语文一年级上册第二单元测试卷及参考答案
- 防汛知识培训工作方案课件
- 防汛救灾知识培训感悟课件
- 防汛抗灾知识培训课件
- 书店行业阅读推广方案
- 防拐防骗培训知识课件
- 【语文】期中练习卷(一) +2025-2026学年统编版语文八年级上册
- 雨水收集盖板更换合同4篇
- 男性输精管结扎术后附睾淤积症护理查房
- 医疗数据的可视化与成本控制分析-洞察及研究
- 2025中国农业科学院棉花研究所第二批招聘7人备考考试题库附答案解析
- 重庆西南大学附中2025-2026学年九年级上学期开学考试语文试题
- 2024版风力发电站智能运维与远程监控合同3篇
- (公开课)26个英文字母书写笔顺动态演示(基础教育)
- 不一样的卡梅拉2-我想有颗星星幼儿绘本
- 安全生产费用投入台账模报表
- 希望杯数学竞赛小学三年级试题
- 高分子化学6离子聚合阳离子
- NB_T 10337-2019《水电工程预可行性研究报告编制规程》_(高清最新)
- 环保节能供热锅炉项目建议书范文
- 翰文工程进度计划编制教程(最新版)
评论
0/150
提交评论