00000000.htm

来自「水木社区 embeded 版精华区 下载」· HTM 代码 · 共 332 行 · 第 1/3 页

HTM
332
字号
<?xml version="1.0" encoding="gb2312"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"/><title>嵌入Linux到商业产品中                  sunno </title></head><body><center><h1>BBS 水木清华站∶精华区</h1></center><a name="top"></a>发信人:&nbsp;appleton&nbsp;(苹果牛★语如冰丝情似火),&nbsp;信区:&nbsp;Embedded&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />标&nbsp;&nbsp;题:&nbsp;嵌入Linux到商业产品中&nbsp;<br />发信站:&nbsp;BBS&nbsp;水木清华站&nbsp;(Tue&nbsp;Sep&nbsp;26&nbsp;22:24:48&nbsp;2000)&nbsp;<br />&nbsp;<br />嵌入式系统以及如何构造一个嵌入式系统概览&nbsp;<br />作者:Joel&nbsp;R&nbsp;Williams&nbsp;<br />译者:john&nbsp;zhan&nbsp;&amp;&nbsp;zhang&nbsp;bing&nbsp;chen&nbsp;<br />------------------------------------------------------------&nbsp;<br />大多数的Linux系统运行于PC平台,但是,Linux也可在嵌入式系统中可靠的工作。此篇&nbsp;<br />论文讲述了嵌入式系统的概况,以及论证了有关Linux应用于商业嵌入式系统的问题。&nbsp;<br />嵌入式系统&nbsp;----&nbsp;比摩西还老&nbsp;<br />那些用以控制设备的计算机,或叫嵌入式系统,差不多同计算机本身一样早地出现在我&nbsp;<br />们的周围。&nbsp;<br />在通信领域中,这些嵌入式系统早在20世纪60年代后期就被用来控制电话的电子式机械&nbsp;<br />交换并被称为“存储程控控制“系统“计算机”一词在那时尚不常见;所谓的存储程序&nbsp;<br />是指那些放有程序和路由信息的内存。存储这些控制逻辑而不是用硬件来实现是在观念&nbsp;<br />上的一种真正突破,现今,我们早认为这种工作机理是理所当然的了。&nbsp;<br />为适应每一个应用,这些计算机是被定做出来的(简言之,这些计算机是面向应用的).按今&nbsp;<br />天的标准来看,他们有着奇怪的专用指令以及与主要计算引擎集成在一起的I/O设备,就像&nbsp;<br />一批突变异种者.&nbsp;<br />微处理器通过提供一个小巧低价的并可以在大系统中像搭积木那样使用的CPU引擎改变了&nbsp;<br />这一情况;它利用一基于被一条总线挂接在一起的不同外设所构建的严格的硬件体系结构&nbsp;<br />并提供一个可以简化编程的通用目的编程模型.&nbsp;<br />同硬件一起,软件也得到了发展.最初,只有一些简单的开发工具可供用以创建和调试软件&nbsp;<br />.各工程项目的运行软件通常以信手涂鸦的方式编出来.由于编译器经常有很多错误而且&nbsp;<br />也缺乏象样的调试器,这些软件差不多总是用汇编语言或宏语言来写.采用软件构建块和&nbsp;<br />标准库的编程思想直到20世纪70年代中期才流行起来.&nbsp;<br />用于嵌入式系统的与&quot;搁架&quot;无关的操作系统(OS)在20世纪70年代后期开始出现.它们中的&nbsp;<br />许多是用汇编语言写就的并且仅能用于为其编写的微处理器上.当这些微处理器变得过时&nbsp;<br />的时候,它们使用的OS也厄运同临.只能在新的处理器上从新写一遍才能运行.今天,许多&nbsp;<br />这种早期的系统只不过成了人们模糊的记忆,还有人能记起MTOS吗?当C语言出现后,OS可&nbsp;<br />以用一种高效的,稳定的和可移植的方式来编写.这种方式对使用和经营有直接的吸引力&nbsp;<br />,因为它承载着人们当微处理器废弃不用时能保护他们的软件投资的希望.听起来,有点儿&nbsp;<br />像商业市场营销中的一段传奇故事.用C来编写OS已经成了一种标准直至今天.总之,软件&nbsp;<br />的可复用性已经为人接受而且正在很好地发挥作用.&nbsp;<br />在20世纪80年代早期,我特别喜爱的OS是Wendon操作系统;大概只要150美金,就可以获得&nbsp;<br />它的C源代码库.它是一个开发套件,人们可以通过选择一些组件来构建自己的OS---整个&nbsp;<br />过程就像是从中餐菜单里订餐一样.比如,可以从库中的多个可行选项列表中精选出一种&nbsp;<br />任务调度算法和内存管理方案.&nbsp;<br />许多用于嵌入式系统的的商业操作系统在20世纪80年代获得了蓬勃发展.(Wendon)这一原&nbsp;<br />始的炖菜已经发展成为了商业操作系统这一现代炖肉.今天已经有几打的商业性操作系统&nbsp;<br />可供选择.出现了许多互相竞争的产品,如VxWorks,pSOS,Neculeus和WindowsCE.&nbsp;<br />许多嵌入式系统根本就没有操作系统,只不过有一个控制环而已.对很简单的嵌入式系统&nbsp;<br />来说,这可能已经足够.不过,随着嵌入式系统在复杂性上的增长,一个操作系统显得重要&nbsp;<br />起来,因为否则的话,将使(控制)软件复杂度变得极不合理.可悲的是,现实中确实有一些&nbsp;<br />复杂得另人生畏的嵌入式系统,而且它们之所以变得复杂就因为它们的设计者坚持认为它&nbsp;<br />们的系统不需要操作系统.&nbsp;<br />渐渐地,更多的嵌入式系统需要被连接到某些网络上,因而,需要在嵌入式系统中有网络协&nbsp;<br />议栈(支持);甚至很多宾馆中的门把手都有一个连接到网络的微处理器.&nbsp;<br />把网络栈添加到一个仅用控制环来实现的简单嵌入式系统所带来的复杂程度可能足以唤&nbsp;<br />起人们对一个操作系统的渴望.&nbsp;<br />除了各种商业性操作系统以外,还有多种私拥操作系统.其中,有很多是涂鸦式写就的,像&nbsp;<br />Cisco公司的IOS等.有些则源于对别的操作系统的改写,像很多网络产品都衍生于同一版&nbsp;<br />本的伯克利UNIX操作系统,因为后者有完整的网络支持能力;而还有一些则基于公共域OS&nbsp;<br />,比如KA9Q就来源于PhilKarn.&nbsp;<br />作为侯选的嵌入式操作系统,LINUX有一些引人的优势:它可以移植到多个有不同结构的C&nbsp;<br />PU和硬件平台上,很好的稳定性,各种性能的升级能力,而且开发更容易.。&nbsp;<br />开发工具--打破了传统仿真器的阻碍&nbsp;<br />在开发嵌入式系统中极为关键的一项是有各种可用的工具.就像任何一个行当一样,好的&nbsp;<br />工具有助于快捷而圆满地完成任务;在嵌入式系统开发的不同阶段,可能要用到不同的工&nbsp;<br />具.&nbsp;<br />传统上,开发嵌入式系统的首选工具是仿真器。这是一块比较昂贵的设备,一般插于微处&nbsp;<br />理器和它的总线之间的电路中,从而让开发者监视和控制所有输入和输出&nbsp;微处理器的各&nbsp;<br />种活动和行为.在装配起来,可能有一些困难,并且由于它们的侵入性,装上后可能造成不&nbsp;<br />稳定&nbsp;的性能;尽管这样,它们却能在总线级上给出一个系统正在发生什么的清晰的描绘并&nbsp;<br />排除了很多在硬件和软件&nbsp;接口最底层上的猜测工作.&nbsp;<br />在以往,一些工程项目依赖它--经常在开发周期中的各个阶段--作为主要的调试工具.不&nbsp;<br />过,一旦当编制的软件&nbsp;有能力支持一个串型口的时候,大量的调试可以不用ICE而使用别&nbsp;<br />的方法来完成.同样,大部分新一代的嵌入式系统&nbsp;采用蛮像食谱式的微处理器设计;通信&nbsp;<br />工作的启动代码常常是具备的以使串型口尽快地工作,这意味着开发者能&nbsp;在没有ICE的情&nbsp;<br />况下也能很好地进展;去掉了ICE,从而降低了开发成本.一旦串型口可以工作起来,便能用&nbsp;<br />于支持那&nbsp;些日渐复杂的开发工具的相关(软件)层&nbsp;<br />LINUX基于GNU&nbsp;C&nbsp;编译器;后者作为GNU工具集的一组成部分,和源码级调试器gdb一起工&nbsp;<br />作,提供了在开发一个嵌入式&nbsp;LINUX系统中要用到的所有软件工具.下面是在为一个新的&nbsp;<br />硬件开发一个新的嵌入式LINUX系统时要用到的典型调试&nbsp;工具的序列和步骤:&nbsp;<br />1:写出或移植一段启动代码(后面再详细讨论);&nbsp;<br />2:写一段代码在串型口上输出一字符串,像&quot;Hello,World!&quot;(其实,我更喜欢人类发明电话&nbsp;<br />后,通过电话说的第一句话&quot;Watson,&nbsp;come&nbsp;here&nbsp;I&nbsp;need&nbsp;you&quot;);&nbsp;<br />3:移植gdb目标码使之能在串型口上工作.这将允许向另一台正运行着gdb程序的LINUX主&nbsp;<br />机会话;你只不过要告诉&nbsp;gdb是通过串型口调试该目标程序;gdb通过串型口与你的测试计&nbsp;<br />算机上的gdb目标码会话并给出全部C源码级的&nbsp;调试信息.你也可以利用这一(通信)能力&nbsp;<br />把附加的代码下载到RAM或闪存中.&nbsp;<br />4:借助gdb,执行余下的直到LINUX内核开始接管之前的所有硬件和软件的初始化代码.&nbsp;<br />5:&nbsp;一旦LINUX内核启动后,上述的串型口就成为LINUX的控制台端口并可以利用它的便利&nbsp;<br />来进行后继开发过程.再使用gdb的内核调试版本kgdb.这一步常常不是必需的.如果你有&nbsp;<br />一个网络连接,比如,10BaseT,你或许会想让它紧接着工作起来.&nbsp;<br />6:&nbsp;如果你的目标平台运行的Linux&nbsp;kernel是全功能的(即:未经删减过功能),你可以利用&nbsp;<br />gdb或其图形化替代品如xgdb去调试你的应用进程.&nbsp;<br />实时--真是这样吗?&nbsp;<br />轻率,大部分的系统并不是如此。嵌入式系统经常被错误地说做实时系统,但是它们中&nbsp;<br />的大多数并不具备实时特性。实时性仅仅是相对的。实时严谨地定义应为硬实时:能在&nbsp;<br />极短的时间(毫秒级)内响应,并以某种确定的方式处理事件。现在,许多硬实时功能&nbsp;<br />正逐渐集中在DSP或ASIC的设计中,通过一些适当的硬件,如FIFO,DMA或其它专用硬件&nbsp;<br />来实现。&nbsp;<br />对大多数系统来说,有1到5毫秒的实时响应时间应足够了。当然,另一种宽松的要求也&nbsp;<br />是可以接受的,例如:&nbsp;<br />Windows&nbsp;98的处理监视器崩溃画面的中断,要求必须在4微秒之内处理的,占所有情况的9&nbsp;<br />8%;而在20微秒之内处理的,占各情况的100%.&nbsp;<br />这些宽松的实时要求可以很容易达到.实现它们过程中涉及到一些探讨,包括现场切换,中&nbsp;<br />断延迟,任务选优和调度.&nbsp;<br />现场切换曾一度成为操作系统界的一个热点话题,不过,由于大多数CPU在这点上处理得比&nbsp;<br />

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?