??xml version="1.0" encoding="utf-8" standalone="yes"?>
嵌入式系l无疑是当前最热门最有发展前途的IT应用领域之一。嵌入式pȝ用在一些特定专用设备上Q通常q些讑֤的硬件资?如处理器、存储器{?非常有限Qƈ且对成本很敏感,有时对实时响应要求很高等。特别是随着消费家电的智能化Q嵌入式更显重要。像我们q_常见到的?
机、PDA、电子字典、可视电话、VCD/DVD/MP3 Player、数字相?DC)、数字摄像机(DV)、U-Disk、机盒(Set Top Box)、高清电?HDTV)、游戏机、智能玩兗交换机、\由器、数控设备或仪表、汽车电子、家甉|制系l、医疗A器、航天航I备等{都是典型的嵌入式系l?
嵌入式系l是软硬l合的东西,搞嵌入式开发的人有两类?
一cL学电子工E、通信工程{偏g专业n的hQ他们主要是搞硬件设计,有时要开发一些与g关系最密切的最底层软gQ如BootLoader、Board Support
Package(像PC的BIOS一P往下驱动硬Ӟ往上支持操作系l?Q最初的硬仉动程序等。他们的优势是对g原理非常清楚Q不x他们更擅长定义各U硬件接口,但对复杂软gpȝ往往力不从心(例如嵌入式操作系l原理和复杂应用软g{??
另一cL学Y件、计机专业n的hQ主要从事嵌入式操作pȝ和应用Y件的开发。如果我们学软g的h对硬件原理和接口有较好的掌握Q我们完全也可写BSP和硬仉动程序。嵌入式g设计完后Q各U功能就全靠软g来实CQ嵌入式讑֤的增值很大程度上取决于嵌入式软gQ?
q占了嵌入式pȝ的最主要工作(目前有很多公司将g设计包给了专门的g公司Q稍复杂的硬仉交给台湾或国外公司设计,国内的硬件设计力量很弱,很多嵌入式公司自己只负责开发YӞ因ؓ公司都知道,嵌入式品的差异很大E度在Y件上Q在软g斚w是最有“花头“可做的)Q?
所以我们搞软g的h完全不用担心我们在嵌入式市场上的用武之地Q越是智能设备越是复杂系l,软gv关键作用Q而且q是目前的趋ѝ?
从事嵌入式Y件开发的好处?
(1)
目前国内外这斚w的h都很E~。一斚wQ是因ؓq一领域入门门槛较高Q不仅要懂较底层软g(例如操作pȝU、驱动程序软g)Q对软g专业水^要求较高(嵌入式系l对软g设计的时间和I间效率要求较高)Q而且必须懂得g的工作原理,所以非专业IT人员很难切入q一领域另一?
面,是因一领域较新Q目前发展太快,很多软硬件技术出现时间不长或正在出现(如ARM处理器、嵌入式操作pȝ、MPEG技术、无UK信协议{?Q掌握这些新技术的人当然很找。嵌入式人才E~,wh自然高Q越有经验h格就高。其实嵌入式人才E根本原因可能是大多Ch无条
件接触这需要相应的嵌入式开发板和Y件另外需要有l验的hq行指导开发流E?
(2)
与企业计等应用软g不同Q嵌入式领域人才的工作强度通常低一?但收入不?。搞企业应用软g的IT企业Q这个用Lpȝ搞完了,又得L下一个用LQ而且每个用户的需求和完成旉都得按客戯求改变,往往疲于奔命Q重复劳动。相比而言Q搞嵌入式系l的公司Q都有自q
产品计划Q按自己的节奏行事。所开发的产品通常是通用的,不会因客L不同而修攏V一个品型号开发完了,往往有较长一D늩闲时?或只是对软gq行一些小修补)Q有旉q行充电和休整。另外,从事嵌入式Y件的每个人工作范围相对狭H,所涉及的专业技术范围就是那?ARM?
RTOS、MPEG?02.11{?Q时间长了这些东西会搞有l验Q卖卖老本Q几句指g够让那些初入道者琢半q的。若搞应用YӞ可能下一个客戯换成一个完全不同的软g开发^収ͼ那就苦了?
(3)
哪天若想创业Q搞自已的品,那么嵌入式是一个不错的LQ这可不像应用Y仉样容易被盗版。土木学院有一个叫启明星的公司开发出一个好象叫“工Ee”的掌上PDA(南校区门口有q告)Q施工技术h员用该PDA可当行土木概预算和其它土木计,据说销路特好。我认识的某大学
老师Q他开发的饭馆用的点菜PDA(WinCEq_Q可无线q网和上|?Q据他说销路不错,饭馆点点PDA让客L菜,多显z֤档次。我记得00U?2班当q有一l同学在学WindowsE序设计评时用VC设计了一个功能很强的点菜pȝ做ؓ评目Q当时真惛_议他们将q个软g做成PDAQ估计会
有些销?上v火R站南q场的Macdonald便用很漂亮的PDAl用L食品Q像摸像L)。这些PDA的硬件设计一般都是请其它公司l订?q叫“脓牌?OEM)Q都是通用的硬Ӟ我们只管设计软g变成自q产品了?
从事嵌入式Y件开发的~点?
(1) 入门L较高Q所用到的技术往往都有一定难度,若Yg基础不好Q特别是操作pȝUY件功底不深,则可能不适于此行?
(2)
q方面的企业数量要远于企业计算cM业。特别是从事嵌入式的企业数量较?企业要搞自q产品创业)Q知名大公司较少(搞嵌入式的大公司主要有Intel、Motorola、TI、Philip、Samsung、Sony、Futjtum、Bell-Alcatel、意法半g、Microtek、研华、华为、中兴通信、上q电
{制造类企业)。这些企业的习惯思维方式是到电子、通信{偏专业找人。由于正规高校Y件学院以前毕业生以企业计ؓ主,所以正规高校Y件学院与q些企业联系相对较少。正规高校Y件学院正U极努力Q目前已与其中部分公司徏立了联系Q争取今后能有正规高校Y件学院同学到q?
些企业中实习或就业?
(3)有少数公司经常要士以上的h搞嵌入式Q主要是Z嵌入式的隑ֺ。但大多数公怹q无此要求,只要有经验即可?
正规高校软g学院同学若学习嵌入式Q显然应偏重于嵌入式软gQ特别是嵌入式操作系l方面,应是我们的强V对于搞嵌入式Y件的人,最重要的技术显然是(实际上很多公司的招聘q告上就是这样写?:
(1) 掌握L嵌入式微处理器的l构与原?
(2) 必须掌握一个嵌入式操作pȝ
(3) 必须熟悉嵌入式Y件开发流Eƈ臛_做过一个嵌入式软g目?
正规高校软g学院在嵌入式软g斚w最重要的课E包?
(1)
嵌入式微处理器结构与应用:q是一门嵌入式g基础评Q正规高校Y件学院用q门译֏代了传统的“微机原理与接口”课E?目前国内已有部分高校IT专业q样做了Q因x86微机原理与接口很难找到实际用处,只ؓ教学而已)。我们说q,嵌入式是软硬件结合的技术,搞嵌入式软g
的h应对ARM处理器工作原理和接口技术有充分了解Q包括ARM的汇~指令系l。若不了解处理器原理Q怎么能控制硬件工作,怎么能写省内存又q行高速的最优代?嵌入式Y件设计特别讲I时I效?Q怎么能写出驱动程?驱动E序都是与硬件打交道?很多公司招聘嵌入式Y件h?
旉要求熟悉ARM处理器,来若同学到公司中从事嵌入式软g开发,公司都会l你一本该讑֤的硬件规D明书 (xxx
Specification)Q您必须能看懂其中的内存分布和端口用等最基本的说?像x86汇编一?Q否则怎么设计软g。有些同学觉得嵌入式处理器课E较枯燥Q这主要是硬件课E都较抽象的原因Q等我们的嵌入式实验?0月䆾建好后,您做了一些实验后׃觉得看得见摸得着。还有同学对A
RM汇编不感兴趣Q以为嵌入式开发用C语言p够了。其实不应仅是将汇编语言当成一个程序设计语aQ学汇编主要是ؓ了掌握处理器工作原理的。一个不熟悉汇编语言的hQ怎么能在该处理器写出最优的C语言代码。在嵌入式开发的一些关键部分,有时q必d汇编Q如Bootloader{??
能还包括BSP)。特别是在对速度有极高要求的场合(如DSP处理器的高速图像采集和囑փ解压~?Q目前主要还要靠汇编写程?我看到过很多公司是这样做?。当您在一个嵌入式公司工作Ӟ在查看描q原理的手册Ӟ可能很多都是用汇~描q的(我就遇到q?Q这是因为很多硬件设计h?
只会写或者喜Ƣ用汇编描述Q此时您必ȝ懂汇~程序,否则软硬件h员可能就无法交流。很多嵌入式职位招聘旉要求熟悉汇编?
(2) 嵌入式操作系l类评
除了WinCE的实时性稍差外Q大多数嵌入式操作系l的实时性都很强所以也可称为实时操作系lReal Time Operating System.从事嵌入式的须掌握一个嵌入式操作pȝ(当然掌握两个更好)q在嵌入式的所有技术中是最为关键的了。目前最重要的RTOS主要包括:
W一cR传l的l典RTOS:最主要的便是Vxworks操作pȝQ以及其Tornado开发^台。Vxworks因出现稍早,实时性很?据说可在1ms内响应外部事件请?Qƈ且内核可极微(据说最可8K)Q可靠性较高等Q所以在北美QVxworks占据了嵌入式pȝ的多半疆山。特别是在通信讑֤{实?
性要求较高的pȝ中,几乎非Vxworks莫属。Vxworks的很多概念和技术都和Linux很类|主要是C语言开发。像Bell-alcatel、Lucent、华为等通信企业在开发品时QVxworks用得很多。但Vxworks因h格很高,所以一些小公司或小产品中往往用不赗目前很多公叔R在往嵌入式Linux?
听说华ؓ目前正在q样?。但无论如何QVxworks在一D长旉内仍是不可动摇的。与VxworkscM的稍有名的实时操作系l还有pSOS、QNX、Nucleus{RTOS?
W二cR嵌入式Linux操作pȝ:Linux的前途除作ؓ服务器操作系l外Q最成功的便是在嵌入式领域的应用Q原因当然是免费、开源、支持Y件多、呼拥者众Q这样嵌入式产品成本会低。Linux本n不是一个ؓ嵌入式设计的操作pȝQ不是微内核的,q且实时性不强。目前应用在嵌入?
领域的Linuxpȝ主要有两c?一cL专ؓ嵌入式设计的已被裁减q的LinuxpȝQ最常用的是uClinux(不带MMU功能)Q目前占较大应用份额Q可在ARM7上跑另一cL跑在ARM 9上的Q一般是Linux 2.4.18内核UL在其上,可用更多的Linux功能(当然uClinux更可跑在ARM
9?。很多h预测Q嵌入式Linux预计占嵌入式操作系l的50以上份额Q非帔R要。缺Ҏ熟悉Linux的h太少Q开发难度稍大。另外,目前我们能发现很多教材和很多大学都以ucOS/II为教学用实时操作pȝQ这主要是由于ucOS/II较简单,且开源,非常适合入门者学习实时操作系l原?
Q但׃ucOS/II功能有限Q实用用得较,所以正规高校Y件学院不其作ؓ教学重点Q要学习应学直接实用的Q比?
uClinux很实用。况且熟悉了Linux开发,不仅在嵌入式领域有用Q对开发Linux应用软gQ对加深操作pȝ的认识也有帮助,可谓一丑֤得。据我所知,目前Intel、Philip都在大搞ARMLINUX的嵌入式开发,Fujitum则是在自q处理器上大搞Linux开发。目前在嵌入式Linux领域Q以下几
个方面的人特别难找,一是能LinuxUL到某个新型号的开发版上二是能写Linux驱动E序的h三是熟悉Linux内核裁减和优化的人。正规高校Y件学院在该嵌入式Linux斚w的课E系列是:本科生操作系l必修课Q然后是LinuxE序设计选修课,最后是嵌入式Linuxpȝ选修课。正规高校Y
件学院在Linux斚w目前已有较强力量Q魏老师和张老师熟悉Linux开发,金老师和唐老师熟悉Linuxpȝ理?
W三cR?Windows
CE嵌入式操作系l?Microsoft也看准了嵌入式的巨大市场QMS永远是最厉害的,WinCE出来只有几年旉Q但目前已占据了很大市场份额Q特别是在PDA、手机、显CZA表等界面要求较高或者要求快速开发的场合QWinCE目前已很行(据说有一家卖工控机的公司板子卖得太好Q以x不及?
客户裁减WinCE)。WinCE目前主要?.2?.NET)Q开发^C要ؓWinCE Platform
BuilderQ有时也用EVC环境开发一些较上层的应用,׃WinCE开发都是大家熟悉的VC环境Q所以正规高校Y件学院学qWindowsE序设计评的同学都不会有多大难度,q也是WinCEҎ被h们接受的原因Q开发环境方便快速,微Y的强大技术支持,WinCE开发难度远低于嵌入式Linux。对
于急于完成Q不x嵌入式Linux冒险的开发场合,WinCE是最合适了(扑ֵ入式Linux的h可没那么好找?Q毕竟公怸能像学生学习那样试试看,保证开发成功更重要。根据不同的侧重?QWinCEq有两个Ҏ版本Q一个是MS PocketPC操作pȝ专用于PDA?掌上电脑)Q另一个是MS
SmartPhone操作pȝ用于手机?带PDA功能的手?Q两者也都属于WinCEq_。在PDA和手机市ZQ除WinCE外,著名的PDA嵌入式操作系l还有Palm
OS(因出现很早,很有?、Symbian{,但在WinCE的强劲冲MQPalm和Symbian来日q能有多长正规高校Y件学院可能是全国高校中唯一一家开设专门的“Windows
CE嵌入式操作系l“课E的学校Q这主要是基于以下原?正规高校软g学院本n前面便有WindowsE序设计评Q同学学qVC后再学WinCE非常方便自然Q通过学习WinCE同样也可了解嵌入式Y件的一般开发过E,对Linux有惧怕心理的同学也很合适。很昄Q嵌入式Linux永远不可能替代Wi
nCEQ而且来谁占份额大还很难Ԍ毕竟很多人更愿意接受MS的^収ͼ像各国政府都在大力推LINUX已好长时_但您能看到几个在PCZ真正使用LINUX的用h我观察目前在嵌入式^CLINUX是叫得最响但q是WinCE实际用得更多.嵌入式LINUX可能更多地是一些有长远产品计划的公
ؓ降低成本而进行长q考虑 二是微Y亚洲研究院对正规高校软g学院WinCE评的支持计划,我们也很希望来正规高校软g学院能有同学通过微Y的面试去实习。WinCE和多媒体(如MPEG技?是微软亚z工E院目前做得较多的项目领域之一他们很需要精通WinCE的h?
ȝ关于嵌入式操作系l类评Q若您觉得自己功底较׃能钻研下去,则可d嵌入式Linux若您觉得自己VC功底较好且想短^快地学嵌入式开发,则正规高校Y件学院的WinCE评是最好的选择?
(3) 嵌入式开发的其它相关软g评
搞嵌入式若能熟悉嵌入式应用的一些主要领域,q样的h更受企业Ƣ迎。主要的相关领域包括:
A、数字图像压~技?q是嵌入式最重要最热门的应用领域之一Q主要是应掌握MPEG~解码算法和技术,如DVD、MP3、PDA、高_视、机盒{都涉及MPEG高速解码问题。ؓ此,正规高校软g学院已预订了一位能开设数字图像处理课E的博士?
B、通信协议及编E技?q包括传l的TCP/IP协议和热门的无线通信协议。首先,大多数嵌入式讑֤都要q入局域网或InternetQ所以首先应掌握TCP/IP协议及其~程Q这是需首要掌握的基本技术其ơ,无线通信是目前的大趋势,所以掌握无UK信协议及编E也是是很重要的。无l?
信协议包括无U局域网通信协议802.11pdQBluetoothQ以及移动通信(如GPRS、GSM、CDMA{??
C、网l与信息安全技?如加密技术,数字证书CA{。正规高校Y件学院有q方面的选修课?
D、DSP技?DSP是Digital Signal
Process数字信号处理的意思,DSP处理器通过g实现数字信号处理法Q如高速数据采集、压~、解压羃、通信{。数字信号处理是电子、通信{硬件专业的评Q对于搞软g的h若能了解一下最好。目前DSP人才较缺。如果有信号与系l、数字信号处理等评基础Q对于学习MPEG~解
码原理会有很大帮助?
(4)嵌入式开发的相关g基础
对于软g工程专业的学生,从事嵌入式Y件开发,像数字电路、计机l成原理、嵌入式微处理器l构{硬件课E是较重要的。另外,汇编语言、C/C、数据结构和法、特别是操作pȝ{Y件基课也是十分重要的。我们的主要目地是能看懂g工作原理Q但重点应是在嵌入式软g
Q特别操作系l软gQ那是我们的优ѝ?
我们的研I生里有些是学电子、通信cM业过来的Q有较好的模拟电路和单片机基Q学嵌入式非常合适。嵌入式本n是从单片机发展q来的,只是单片Z带OSQ而现在很多嵌入式应用来复杂,以至不得不引入嵌入式操作pȝ。另外,求更高速的信号处理速度Q现在在一
些速度要求较高的场合,有不公司是一些DSP法Q如MPEG压羃解压~算法等用硬件来实现Q这涉及到HDL数字电\设计技术及其FPGA/IP核实现技术,q方面的人目前市Z也很~?
(5) 题外?
另外Q能写驱动程序的人目前是非常紧缺?驱动E序也可归于嵌入式范?Q包括桌面Windows中的DDK开发环境和WDM驱动E序。公司每时每刻都要推出新产品Q每一个新产品出来了,要能被操作系l所使用Q是必须写驱动程序的。写驱动E序必L握操作系l?如Windows或Linux)
的内部工作原理,q涉及到量g知识Q难度较大,所以这斚w的h很难找。想成ؓ高手的同学,也可从驱动程序方面获得突破。我可说一下自ql历Q三q前我曾短暂地在一家公司写qWinCE驱动E序(正是因ؓ知道q方面的人紧~,所以才要做q方面的?Q尽那以前从未做过?
动程序,应聘那个职位时正是看准了公司是很难招聘到q方面的人,既然都找不到人,驱动q得有h做,q正是可能有Z切入q一领域的大好机会。面试时大讲自己写过多少万行汇编E序Q对计算机工作原理如何清楚,历中又写着我曾阅读完两本关于Windows Driver
Model的两本英文原版书Q写q几个小型的驱动E序l习E序(其实Ҏ没写q,我们的同学将来千万不要像我这P早练׃q硬功夫Q就不至于落到我这{地步,׃用像我那样去“欺骗”公怺Q我q是一个典型的反面教材)Q居然一切都PASS(当然最重要的是W试和面试问题还说得
q去)Q这只能说明q一领域找h的困隄度。公司本未指望扑ֈ搞过驱动的hQ找个有相关基础的hq不错了。做了以后,发现也ƈ不是怎样隄。其实搞驱动E序的工作是很舒服的Q搞完一个版本就会空一D|_只有{公司新的芯片推出或新的OS出现后,才需要再d发新一?
驱动Q那时有近一个月旉I闲着在等WinCE .NET Beta版推出,准备驱动程序升U到CE .NET上,现在在Y件学院工作整日忙Q无限怀念那D|闲时光?
很y合,最q本人无意中再次体会C嵌入式的qh之处。上周我那用?q的手机l于不能WORK了。此ơ更斎ͼ除要求有手机常见功能外,最好有MP3功能(现在很多p听力都有MP3文g)Q最好有英汉词典Q最好还能读WORD文档。最后选了个满以上条件的最便宜的手机DOPOD
515(斩了?.2KQ但xq也自己对嵌入式事业的支持Q这样便也想开?Q算得上最低档的智能手Z。回来一查,手机的about昄Q本手机Processor是ARMQ其OS是MS Smartphone(即WinCE .NET
4.2)Q这么y合,直可做ؓ学习嵌入式课E的产品案例?{我们的WinCE评开得有声有色后Q希望能从微软研I搞些Smartphone来开发开?。有OS的手机果然了得,金山词霸、WORD、EXCEL、REGEDIT{居焉有smartphone版的QPC上的MP3、DOC{居然在download旉可被自动转换
成smartphone格式Q真是爽。完全可用Windows CE自己开发一些需要的E序download到自q手机上。现在市面销售PDA手机火爆QMSL财源滚滚。但我已发现国的ARMLINUX手机出现在市面上Qh格只1.2K?
在GOOGLE|上能搜索太多的关于嵌入式系l的讨论了,我刚发现一个http:www.embyte.com 非常不错Q有很多有经验者谈自己的体会投入到其中的论坛中Q你会切w感到嵌入式学习的热潮?
要么走ARMWinCEQ要么走ARMLINUXQ要么走ARMVXWORKS。每个搞嵌入式的人都可选一条\Q条条大路通罗马?
嵌入式系l是以应用ؓ中心Q以计算机技术ؓ基础Qƈ且Yg是可裁剪的,适用于对功能、可靠性、成本、体U、功耗等有严D求的专用计算机系l。嵌入式pȝ最典型的特Ҏ与h们的日常生活紧密相关QQ何一个普通h都可能拥有各cdŞ形色色运用了嵌入式技术的电子产品Q小到MP3、PDA{微型数字化讑֤Q大C息家c智能电器、R载GISQ各U新型嵌入式讑֤在数量上已经q远过了通用计算机。这也难怪美国著名未来学家尼葛洛庞帝?999q?月访华时预aQ?~5q后嵌入式智能工具将成ؓlPC机和Internet之后计算机工业最伟大的发明?/p>
1.1 历史与现?/strong>
虽然嵌入式系l是q几q才开始真正风靡v来的Q但事实上嵌入式q个概念却很早就已经存在了,从上个世U?0q代单片机的出现C天各U嵌入式微处理器、微控制器的q泛应用Q嵌入式pȝ说也有了近30q的历史。纵观嵌入式pȝ的发展历E,大致l历了以下四个阶D:
无操作系l阶D?/strong>
嵌入式系l最初的应用是基于单片机的,大多以可~程控制器的形式出现Q具有监、伺服、设备指C等功能Q通常应用于各cd业控制和飞机、导弹等武器装备中,一般没有操作系l的支持Q只能通过汇编语言对系l进行直接控Ӟq行l束后再清除内存。这些装|虽然已l初步具备了嵌入式的应用特点Q但仅仅只是使用8位的CPU芯片来执行一些单U程的程序,因此严格地说q谈不上"pȝ"的概c?/p>
q一阶段嵌入式系l的主要特点是:pȝl构和功能相对单一Q处理效率较低,存储定w较小Q几乎没有用h口。由于这U嵌入式pȝ使用ѝhg廉,因而曾l在工业控制领域中得C非常q泛的应用,但却无法满CҎ行效率、存储容量都有较高要求的信息家电{场合的需要?/p>
单操作系l阶D?/strong>
20世纪80q代Q随着微电子工艺水q的提高QIC刉商开始把嵌入式应用中所需要的微处理器、I/O接口、串行接口以及RAM、ROM{部件统l集成到一片VLSI中,刉出面向I/O设计的微控制器,q一举成为嵌入式pȝ领域中异军突L新秀。与此同Ӟ嵌入式系l的E序员也开始基于一些简单的"操作pȝ"开发嵌入式应用软gQ大大羃短了开发周期、提高了开发效率?/p>
q一阶段嵌入式系l的主要特点是:出现了大量高可靠、低功耗的嵌入式CPUQ如Power PC{)Q各U简单的嵌入式操作系l开始出现ƈ得到q速发展。此时的嵌入式操作系l虽然还比较单,但已l初步具有了一定的兼容性和扩展性,内核_y且效率高Q主要用来控制系l负载以及监控应用程序的q行?/p>
实时操作pȝ阶段
20世纪90q代Q在分布控制、柔性制造、数字化通信和信息家늭巨大需求的牵引下,嵌入式系l进一步飞速发展,而面向实时信号处理算法的DSP产品则向着高速度、高_ֺ、低功耗的方向发展。随着g实时性要求的提高Q嵌入式pȝ的Y件规模也不断扩大Q逐渐形成了实时多d操作pȝQRTOSQ,q开始成为嵌入式pȝ的主?/p>
q一阶段嵌入式系l的主要特点是:操作pȝ的实时性得C很大改善Q已l能够运行在各种不同cd的微处理器上Q具有高度的模块化和扩展性。此时的嵌入式操作系l已l具备了文g和目录管理、设备管理、多d、网l、图形用L面(GUIQ等功能Qƈ提供了大量的应用E序接口QAPIQ,从而得应用Y件的开发变得更加简单?/p>
面向Internet阶段
21世纪无疑是一个网l的时代Q将嵌入式系l应用到各种|络环境中去的呼声自然也来高。目前大多数嵌入式系l还孤立于Internet之外Q随着Internet的进一步发展,以及Internet技术与信息家电、工业控制技术等的结合日益紧密,嵌入式设备与Internet的结合才是嵌入式技术的真正未来?/p>
信息时代和数字时代的到来Qؓ嵌入式系l的发展带来了巨大的机遇Q同时也对嵌入式pȝ厂商提出了新的挑战。目前,嵌入式技术与Internet技术的l合正在推动着嵌入式技术的飞速发展,嵌入式系l的研究和应用生了如下新的显著变化Q?/p>
1.2 体系l构
Ҏ国际甉|和电子工E师协会QIEEEQ的定义Q嵌入式pȝ?控制、监视或者辅助设备、机器和车间q行的装|?Qdevices used to control, monitor, or assist the operation of equipment, machinery or plantsQ。一般而言Q整个嵌入式pȝ的体pȝ构可以分成四个部分:嵌入式处理器、嵌入式外围讑֤、嵌入式操作pȝ和嵌入式应用软gQ如?所C?/p>
? 嵌入式系l的l成
嵌入式处理器
嵌入式系l的核心是各U类型的嵌入式处理器Q嵌入式处理器与通用处理器最大的不同点在于,嵌入式CPU大多工作在ؓ特定用户所专门设计的系l中Q它通用CPU中许多由板卡完成的Q务集成到芯片内部Q从而有利于嵌入式系l在设计时趋于小型化Q同时还h很高的效率和可靠性?/p>
嵌入式处理器的体pȝ构经历了从CISCQ复杂指令集Q至RISCQ精指o集)和Compact RISC的{变,位数则由4位?位?6位?2位逐步发展?4位。目前常用的嵌入式处理器可分Z端的嵌入式微控制器(Micro Controller UnitQMCUQ、中高端的嵌入式微处理器QEmbedded Micro Processor UnitQEMPUQ、用于计机通信领域的嵌入式DSP处理器(Embedded Digital Signal ProcessorQEDSPQ和高度集成的嵌入式片上pȝQSystem On ChipQSOCQ?/p>
目前几乎每个半导体制造商都生产嵌入式处理器,q且来多的公司开始拥有自ȝ处理器设计部门,据不完全l计Q全世界嵌入式处理器已经过1000多种Q流行的体系l构?0多个pdQ其中以ARM、PowerPC、MC 68000、MIPS{用得最为广泛?/p>
嵌入式外围设?/strong>
在嵌入系l硬件系l中Q除了中心控刉ӞMCU、DSP、EMPU、SOCQ以外,用于完成存储、通信、调试、显C等辅助功能的其他部Ӟ事实上都可以作嵌入式外围设备。目前常用的嵌入式外围设备按功能可以分ؓ存储讑֤、通信讑֤和显C备三cR?/p>
存储讑֤主要用于各类数据的存储,常用的有静态易失型存储器(RAM、SRAMQ、动态存储器QDRAMQ和非易失型存储器(ROM、EPROM、EEPROM、FLASHQ三U,其中FLASH凭借其可擦写次数多、存储速度快、存储容量大、hg宜等优点Q在嵌入式领域内得到了广泛应用?/p>
目前存在的绝大多数通信讑֤都可以直接在嵌入式系l中应用Q包括RS-232接口Q串行通信接口Q、SPIQ串行外围设备接口)、IrDAQ红外线接口Q、I2CQ现场ȝQ、USBQ通用串行ȝ接口Q、EthernetQ以太网接口Q等?/p>
׃嵌入式应用场合的Ҏ性,通常使用的是阴极线(CRTQ、液晶显C器QLCDQ和触摸板(Touch PanelQ等外围昄讑֤?/p>
嵌入式操作系l?/strong>
Z使嵌入式pȝ的开发更加方便和快捷Q需要有专门负责理存储器分配、中断处理、Q务调度等功能的Y件模块,q就是嵌入式操作pȝ。嵌入式操作pȝ是用来支持嵌入式应用的系lYӞ是嵌入式pȝ极ؓ重要的组成部分,通常包括与硬件相关的底层驱动E序、系l内核、设备驱动接口、通信协议、图形用L面(GUIQ等。嵌入式操作pȝh通用操作pȝ的基本特点,如能够有效管理复杂的pȝ资源Q能够对gq行抽象Q能够提供库函数、驱动程序、开发工具集{。但与通用操作pȝ相比较,嵌入式操作系l在pȝ实时性、硬件依赖性、Y件固化性以及应用专用性等斚wQ具有更加鲜明的特点?/p>
嵌入式操作系l根据应用场合可以分Z大类Q一cL面向消费电子产品的非实时pȝQ这c设备包括个人数字助理(PDAQ、移动电话、机盒QSTBQ等Q另一cd是面向控制、通信、医疗等领域的实时操作系l,如WindRiver公司的VxWorks、QNXpȝ软g公司的QNX{。实时系l(Real Time SystemQ是一U能够在指定或者确定时间内完成pȝ功能Qƈ且对外部和内部事件在同步或者异步时间内能做出及时响应的pȝ。在实时pȝ中,操作的正性不仅依赖于逻辑设计的正程度,而且与这些操作进行的旉有关Q也是_实时pȝ寚w辑和时序的要求非常严格Q如果逻辑和时序控制出现偏差将会生严重后果?/p>
实时pȝ主要通过三个性能指标来衡量系l的实时性,卛_应时_Response TimeQ、生存时_Survival TimeQ和吞吐量(ThroughputQ:
实时pȝҎ响应旉可以分ؓ弱实时系l、一般实时系l和强实时系l三U。弱实时pȝ在设计时的宗旨是使各个Q务运行得快好Q但没有严格限定某一d必须在多长时间内完成Q弱实时pȝ更多x的是E序q行l果的正与否,以及pȝ安全性能{其他方面,对Q务执行时间的要求相对来讲较ؓ宽松Q一般响应时间可以是数十U或者更ѝ一般实时系l是弱实时系l和强实时系l的一U折P它的响应旉可以在秒的数量上,q泛应用于消费电子设备中。强实时pȝ则要求各个Q务不仅要保证执行q程和结果的正确性,同时q要保证在限定的旉内完成Q务,响应旉通常要求在毫U甚臛_U的数量U上Q这Ҏ及到ȝ、安全、军事的软硬件系l来说是臛_重要的?/p>
旉QdeadlineQ是实时pȝ中的一个重要概念,指的是对d截止旉的要求,Ҏ旉对系l性能的媄响程度,实时pȝ又可以分Y实时pȝQsoft real-time-systemQ和实时系l(hard real-time-systemQ。Y实时指的是虽然对pȝ响应旉有所限定Q但如果pȝ响应旉不能满要求Qƈ不会Dpȝ产生致命的错误或者崩溃;实时则指的是对pȝ响应旉有严格的限定Q如果系l响应时间不能满求,׃引vpȝ产生致命的错误或者崩溃。如果一个Q务在旉到达之时未完成Q对软实时系l来说还是可以容忍的Q最多只会降低系l性能Q但对硬实时pȝ来说则是无法接受的,因ؓq样带来的后果根本无法预,甚至可能是灾难性的。在目前实际q用的实时系l中Q通常允许软硬两种实时性同时存在,其中一些事件没有时限要求,另外一些事件的旉要求是Y实时的,而对pȝ产生关键影响的那些事件的旉要求则是实时的?/p>
嵌入式应用Y?/strong>
嵌入式应用Y件是针对特定应用领域Q基于某一固定的硬件^収ͼ用来辑ֈ用户预期目标的计机软gQ由于用户Q务可能有旉和精度上的要求,因此有些嵌入式应用Y仉要特定嵌入式操作pȝ的支持。嵌入式应用软g和普通应用Y件有一定的区别Q它不仅要求其准性、安全性和E_性等斚w能够满实际应用的需要,而且q要可能地q行优化Q以减少对系l资源的消耗,降低g成本?/p>
1.3 关键问题
嵌入式系l是先q的计算机技术、半g技术以及电子技术与特定行业的具体应用相l合的物,因此必然是一个技术密集、资金密集、高度分散、不断创新的知识集成pȝQ嵌入式pȝ的开发充满了竞争、机遇与创新Q需要解军_如下一些关键问题:
Linux?991q问世到现在Q短短的十几q时间已l发展成为功能强大、设计完善的操作pȝ之一Q不仅可以与各种传统的商业操作系l分庭抗争,在新兴的嵌入式操作系l领域内也获得了飞速发展。嵌入式LinuxQEmbedded LinuxQ是指对标准Linuxl过型化裁剪处理之后,能够固化在容量只有几K或者几M字节的存储器芯片或者单片机中,适合于特定嵌入式应用场合的专用Linux操作pȝ?/p>
2.1 优势
嵌入式Linux的开发和研究是操作系l领域中的一个热点,目前已经开发成功的嵌入式系l中Q大U有一半用的是Linux。Linux之所以能在嵌入式pȝ市场上取得如此辉煌的成果Q与其自w的优良Ҏ是分不开的?/p>
q泛的硬件支?/strong>
Linux能够支持x86、ARM、MIPS、ALPHA、PowerPC{多U体pȝ构,目前已经成功UL到数十种gq_Q几乎能够运行在所有流行的CPU上。Linux有着异常丰富的驱动程序资源,支持各种Lg讑֤和最新硬件技术,甚至可以在没有存储管理单元(MMUQ的处理器上q行Q这些都q一步促q了Linux在嵌入式pȝ中的应用?/p>
内核高效E_
Linux内核的高效和E_已经在各个领域内得到了大量事实的验证QLinux的内核设计非常精巧,分成q程调度、内存管理、进E间通信、虚拟文件系l和|络接口五大部分Q其独特的模块机制可以根据用L需要,实时地将某些模块插入到内核或从内怸U走。这些特性得Linuxpȝ内核可以裁剪得非常小巧,很适合于嵌入式pȝ的需要?/p>
开放源码,软g丰富
Linux是开放源代码的自由操作系l,它ؓ用户提供了最大限度的自由度,׃嵌入式系l千差万别,往往需要针对具体的应用q行修改和优化,因而获得源代码变得至关重要了。Linux的Y件资源十分丰富,每一U通用E序在Linux上几乎都可以扑ֈQƈ且数量还在不断增加。在Linux上开发嵌入式应用软g一般不用从头做P而是可以选择一个类似的自由软g做ؓ原型Q在其上q行二次开发?/p>
优秀的开发工?/strong>
开发嵌入式pȝ的关键是需要有一套完善的开发和调试工具。传l的嵌入式开发调试工h在线仿真器(In-Circuit EmulatorQICEQ,它通过取代目标板的微处理器Q给目标E序提供一个完整的仿真环境Q从而开发者能够非常清楚地了解到程序在目标板上的工作状态,便于监视和调试程序。在U仿真器的h格非常昂贵,而且只适合做非常底层的调试Q如果用的是嵌入式LinuxQ一旦Yg能够支持正常的串口功能时Q即使不用在U仿真器也可以很好地q行开发和调试工作Q从而节省了一W不的开发费用。嵌入式Linux为开发者提供了一套完整的工具链(Tool ChainQ,它利用GNU的gcc做编译器Q用gdb、kgdb、xgdb做调试工P能够很方便地实现从操作系l到应用软g各个U别的调试?/p>
完善的网l通信和文件管理机?/strong>
Linux臌生之日v׃Internet密不可分Q支持所有标准的Internet|络协议Qƈ且很ҎUL到嵌入式pȝ当中。此外,Linuxq支持ext2、fat16、fat32、romfs{文件系l,q些都ؓ开发嵌入式pȝ应用打下了很好的基础?/p>
2.2 挑战
目前Q嵌入式Linuxpȝ的研发热潮正在蓬勃兴Pq且占据了很大的市场份额Q除了一些传l的Linux公司Q如RedHat、MontaVista{)正在从事嵌入式Linux的开发和应用之外QIBM、Intel、Motorola{著名企业也开始进行嵌入式Linux的研I。虽然前景一片灿烂,但就目前而言Q嵌入式Linux的研I成果与市场的真正要求仍有一D差距,要开发出真正成熟的嵌入式LinuxpȝQ还需要从以下几个斚w做出努力?/p>
提高pȝ实时?/strong>
Linux虽然已经被成功地应用CPDA、移动电话、R载电视、机盒、网l微波炉{各U嵌入式讑֤上,但在ȝ、航I、交通、工业控制等对实时性要求非怸格的场合中还无法直接应用Q原因在于现有的Linux是一个通用的操作系l,虽然它也采用了许多技术来加快pȝ的运行和响应速度Qƈ且符合POSIX 1003.1b标准Q但从本质上来说q不是一个嵌入式实时操作pȝ。Linux的内核调度策略基本上是沿用UNIXpȝ的,它直接应用于嵌入式实时环境会有许多~陷Q如在运行内核线E时中断被关闭,分时调度{略存在旉上的不确定性,以及~Z高精度的计时器等{。正因如此,利用Linux作ؓ底层操作pȝQ在其上q行实时化改造,从而构建出一个具有实时处理能力的嵌入式系l,是现在日益流行的解决Ҏ?/p>
改善内核l构
Linux内核采用的是整体式结构(MonolithicQ,整个内核是一个单独的、非常大的程序,q样虽然能够使系l的各个部分直接沟通,有效地羃短Q务之间的切换旉Q提高系l响应速度Q但与嵌入式pȝ存储定w、资源有限的特点不相W合。嵌入式pȝl常采用的是另一U称为微内核QMicrokernelQ的体系l构Q即内核本n只提供一些最基本的操作系l功能,如Q务调度、内存管理、中断处理等Q而类g文gpȝ和网l协议等附加功能则运行在用户I间中,q且可以Ҏ实际需要进行取舍。Microkernel的执行效率虽然比不上MonolithicQ但却大大减了内核的体U,便于l护和移植,更能满嵌入式系l的要求。可以考虑Linux内核部分攚w成MicrokernelQLinux在具有很高性能的同Ӟ又能满嵌入式系l体U小的要求?/p>
完善集成开发^?/strong>
引入嵌入式Linuxpȝ集成开发^収ͼ是嵌入式Linuxq一步发展和应用的内在要求。传l上的嵌入式pȝ都是面向具体应用场合的,软g和硬件之间必ȝ密配合,但随着嵌入式系l规模的不断扩大和应用领域的不断扩展Q嵌入式操作pȝ的出现就成了一U必Ӟ因ؓ只有q样才能促成嵌入式系l朝层次化和模块化的方向发展。很昄Q嵌入式集成开发^C是符合上q发展趋势的Q一个优U的嵌入式集成开发环境能够提供比较完备的仿真功能Q可以实现嵌入式应用软g和嵌入式g的同步开发,从而摆׃"嵌入式应用Y件的开发依赖于嵌入式硬件的开发,q且以嵌入式g的开发ؓ前提"的不利局面。一个完整的嵌入式集成开发^台通常包括~译器、连接器、调试器、跟t器、优化器和集成用L面,目前Linux在基于图形界面的特定pȝ定制q_的研I上Q与Windows CE{商业嵌入式操作pȝ相比q有很大差距Q整体集成开发环境有待提高和完善?/p>
嵌入式系l是一U根据特定用途所专门开发的pȝQ它只完成预期要完成的功能,因此其开发过E和开发环境同传统的Y件开发相比有着显著的不同?/p>
3.1 开发流E?/strong>
在嵌入式pȝ的应用开发中Q整个系l的开发过E如?所C:
? 嵌入式系l的开发流E?/p>
嵌入式系l发展到今天Q对应于各种微处理器的硬件^C般都是通用的、固定的、成熟的Q这大大减了q件系l引入错误的Z。此外,׃嵌入式操作系l屏蔽了底层g的复杂性,使得开发者通过操作pȝ提供的API函数可以完成大部分工作Q因此大大简化了开发过E,提高了系l的E_性。嵌入式pȝ的开发者现在已l从反复q行gq_设计的过E中解脱出来Q从而可以将主要_֊攑֜满特定的需求上?/p>
嵌入式系l通常是一个资源受限的pȝQ因此直接在嵌入式系l的gq_上编写Y件比较困难,有时候甚x不可能的。目前一般采用的解决办法是首先在通用计算Z~写E序Q然后通过交叉~译生成目标q_上可以运行的二进制代码格式,最后再下蝲到目标^C的特定位|上q行?/p>
需要交叉开发环境(Cross Development EnvironmentQ的支持是嵌入式应用软g开发时的一个显著特点,交叉开发环境是指编译、链接和调试嵌入式应用Y件的环境Q它与运行嵌入式应用软g的环境有所不同Q通常采用宿主机/目标机模式,如图3所C?/p>
? 交叉开发环?/p>
宿主机(HostQ是一台通用计算机(如PC机或者工作站Q,它通过串口或者以太网接口与目标机通信。宿L的Yg资源比较丰富Q不但包括功能强大的操作pȝQ如Windows和LinuxQ,而且q有各种各样优秀的开发工P如WindRiver的Tornado、Microsoft的Embedded Visual C++{)Q能够大大提高嵌入式应用软g的开发速度和效率?/p>
目标机(TargetQ一般在嵌入式应用Y件开发期间用,用来区别与嵌入式pȝ通信的宿LQ它可以是嵌入式应用软g的实际运行环境,也可以是能够替代实际q行环境的仿真系l,但Yg资源通常都比较有限。嵌入式pȝ的交叉开发环境一般包括交叉编译器、交叉调试器和系l仿真器Q其中交叉编译器用于在宿L上生成能在目标机上运行的代码Q而交叉调试器和系l仿真器则用于在宿主Z目标机间完成嵌入式Y件的调试。在采用宿主机/目标机模式开发嵌入式应用软gӞ首先利用宿主Z丰富的资源和良好的开发环境开发和仿真调试目标Z的YӞ然后通过串口或者以|络交叉编译生成的目标代码传输q装载到目标ZQƈ在监控程序或者操作系l的支持下利用交叉调试器q行分析和调试,最后目标机在特定环境下q宿主机单独运行?/p>
建立交叉开发环境是q行嵌入式Y件开发的W一步,目前常用的交叉开发环境主要有开攑֒商业两种cd。开攄交叉开发环境的典型代表是GNU工具链、目前已l能够支持x86、ARM、MIPS、PowerPC{多U处理器。商业的交叉开发环境则主要有Metrowerks CodeWarrior、ARM Software Development Toolkit、SDS Cross compiler、WindRiver Tornado、Microsoft Embedded Visual C++{?/p>
3.2 交叉~译和链?/strong>
在完成嵌入式软g的编码之后,需要进行编译和链接以生成可执行代码Q由于开发过E大多是在用Intel公司x86pdCPU的通用计算Zq行的,而目标环境的处理器芯片却大多为ARM、MIPS、PowerPC、DragonBall{系列的微处理器Q这p求在建立好的交叉开发环境中q行交叉~译和链接?/p>
交叉~译器和交叉链接器是能够在宿L上运行,q且能够生成在目标机上直接运行的二进制代码的~译器和链接器。例如在ZARM体系l构的gcc交叉开发环境中Qarm-linux-gcc是交叉编译器Qarm-linux-ld是交叉链接器。通常情况下,q不是每一U体pȝ构的嵌入式微处理器都只对应于一U交叉编译器和交叉链接器Q比如对于M68K体系l构的gcc交叉开发环境而言Q就对应于多U不同的~译器和链接器。如果用的是COFF格式的可执行文gQ那么在~译Linux内核旉要用m68k-coff-gcc和m68k-coff-ldQ而在~译应用E序时则需要用m68k-coff-pic-gcc和m68k-coff-pic-ld?/p>
嵌入式系l在链接q程中通常都要求用较的函数库,以便最后生的可执行代码能够尽可能地小Q因此实际运用时一般用经q特D处理的函数库。对于嵌入式Linuxpȝ来讲Q功能越来越强、体U越来越大的C语言函数库glibc和数学函数库libm已经很难满实际的需要,因此需要采用它们的_版本uClibc、uClibm和newlib{?/p>
目前嵌入式的集成开发环境都支持交叉~译和交叉链接,如WindRiver Tornado和GNU工具铄Q编写好的嵌入式软gl过交叉~译和交叉链接后通常会生成两U类型的可执行文Ӟ用于调试的可执行文g和用于固化的可执行文件?/p>
3.3 交叉调试
嵌入式Y件经q编译和链接后即q入调试阶段Q调试是软g开发过E中必不可少的一个环节,嵌入式Y件开发过E中的交叉调试与通用软g开发过E中的调试方式有所差别。在通用软g开发中Q调试器与被调试的程序往往q行在同一台计机上,调试器是一个单独运行着的进E,它通过操作pȝ提供的调试接口来控制被调试的q程。而在嵌入式Y件开发中Q调试时采用的是在宿L和目标机之间q行的交叉调试,调试器仍然运行在宿主机的通用操作pȝ之上Q但被调试的q程却是q行在基于特定硬件^台的嵌入式操作系l中Q调试器和被调试q程通过串口或者网l进行通信Q调试器可以控制、访问被调试q程Q读取被调试q程的当前状态,q能够改变被调试q程的运行状态?/p>
交叉调试QCross DebugQ又常常被称E调试(Remote DebugQ,是一U允许调试器以某U方式控制目标机上被调试q程的运行方式,q具有查看和修改目标Z内存单元、寄存器以及被调试进E中变量值等各种调试功能的调试方式。一般而言Q远E调试过E的l构如图4所C?/p>
?q程调试l构
嵌入式系l的交叉调试有多U方法,可以被细分成不同的层ơ,但一般都h如下一些典型特点:
在嵌入式软g开发过E中的调试方式有很多U,应根据实际的开发要求和条gq行选择。就调试Ҏ而言Q嵌入式pȝ的交叉调试可以分为硬件调试和软g调试两种Q前者用仿真调试器协助调试q程Q而后者则使用软g调试器完成调试过E?/p>
g调试
相对于Y件调试而言Q用硬件调试器可以获得更强大的调试功能和更优秀的调试性能。硬件调试器的基本原理是通过仿真g的执行过E,让开发者在调试时可以随时了解到pȝ的当前执行情c目前嵌入式pȝ开发中最常用到的g调试器是ROM Monitor、ROM Emulator、In-Circuit Emulator和In-Circuit Debugger?/p>
采用ROM Monitor方式q行交叉调试需要在宿主Zq行调试器,在目标机上运行ROM监视器(ROM MonitorQ和被调试程序,宿主机通过调试器与目标Z的ROM监视器徏立通信q接Q它们之间的通信遵@q程调试协议。ROM监视器可以是一D运行在目标机ROM上的可执行程序,也可以是一个专门的g调试讑֤Q它负责监控目标Z被调试程序的q行情况Q能够与宿主机端的调试器一同完成对应用E序的调试。在使用q种调试方式Ӟ被调试程序首先通过ROM监视器下载到目标机,然后在ROM监视器的监控下完成调试,目前使用的绝大部分ROM监视器能够完成设|断炏V单步执行、查看寄存器、修改内存空间等各项调试功能?/p>
采用ROM Emulator方式q行交叉调试旉要用ROM仿真器,它通常被插入到目标Z的ROM插槽中,专门用于仿真目标Z的ROM芯片。在使用q种调试方式Ӟ被调试程序首先下载到ROM仿真器中Q它{效于下载到目标机的ROM芯片上,然后在ROM仿真器中完成对目标程序的调试。ROM Emulator调试方式通过使用一个ROM仿真器,虽然避免了每ơ修改程序后都必重新烧写到目标机ROM中这一Ҏ费力的操作,但由于ROM仿真器本w比较昂贵,功能相对来讲又比较单一Q因此只适应于某些特定场合?/p>
采用In-Circuit EmulatorQICEQ方式进行交叉调试时需要用在U仿真器Q它是仿照目标机上的CPU而专门设计的gQ可以完全仿真处理器芯片的行为,q且提供了非怸富的调试功能。在使用在线仿真器进行调试的q程中,可以按顺序单步执行,也可以倒退执行Q还可以实时查看所有需要的数据Q从而给调试q程带来了很多的便利。嵌入式pȝ应用的一个显著特Ҏ与现实世界中的硬件直接相养I存在各种异变和事先未知的变化Q从而给微处理器的指令执行带来各U不定因素Q这U不定性在目前情况下只有通过在线仿真器才有可能发玎ͼ因此管在线仿真器的h非常昂贵Q但仍然得到了非常广泛的应用?/p>
采用In-Circuit DebuggerQICDQ方式进行交叉调试时需要用在U调试器。由于ICE的h格非常昂贵,q且每种CPU都需要一U与之对应的ICEQ得开发成本非帔RQ一个比较好的解军_法是让CPU直接在其内部实现调试功能Qƈ通过在开发板上引出的调试端口Q发送调试命令和接收调试信息Q完成调试过E。目前Motorola公司提供的开发板上用的是DBM调试端口Q而ARM公司提供的开发板上用的则是JTAG调试端口Q用合适的软g工具与这些调试端口进行连接,可以获得与ICEcM的调试效果?/p>
软g调试
软g调试通常要在不同的层ơ上q行Q有时可能需要对嵌入式操作系l的内核q行调试Q而有时可能仅仅只需要调试嵌入式应用E序可以了。在嵌入式系l的整个开发过E中Q不同层ơ上的Y件调试需要用不同的调试Ҏ?/p>
嵌入式操作系l的内核调试相对来讲比较困难Q这是因为在内核中不便于增加一个调试器E序Q而只能通过q程调试的方法,通过串口和操作系l内|的"调试?Qdebug stubQ进行通信Q共同完成调试过E。调试桩可以看成是一个调试服务器Q它通过操作pȝ获得一些必要的调试信息Qƈ且负责处理宿L发送来的调试命令。具体到嵌入式Linuxpȝ内核Q调试时可以先在Linux内核中设|一个调试桩Q用作调试过E中和宿L之间的通信服务器,然后可以在宿主Z通过调试器的串口与调试桩q行通信Qƈ通过调试器控制目标机上Linux内核的运行?/p>
嵌入式应用Y件的调试可以使用本地调试和远E调试两U方法,相对于操作系l的调试而言Q这两种方式都比较简单。如果采用的是本地调试,首先要将所需的调试器UL到目标系l中Q然后就可以直接在目标机上运行调试器来调试应用程序了Q如果采用的是远E调试,则需要移植一个调试服务器到目标系l中Qƈ通过它与宿主Z的调试器共同完成应用E序的调试。在嵌入式Linuxpȝ的开发中Q远E调试时目标Z使用的调试服务器通常是gdbserverQ而宿L上用的调试器则是gdbQ两者相互配合共同完成调试过E?/p>
3.4 pȝ试
嵌入式系l的g一般采用专门的试仪器q行试Q而Y件则需要有相关的测试技术和试工具的支持,q要采用特定的测试策略。测试技术指的是软g试的专门途径Q以及能够更加有效地q用q些途径的特定方法。在嵌入式Y件测试中Q常常要在基于目标机的测试和Z宿主机的试之间做出折衷Q基于目标机的测试需要消耗较多的旉和经费,而基于宿L的测试虽然代仯,但毕竟是在仿真环境中q行的,因此难以完全反映软gq行时的实际情况。这两种环境下的试可以发现不同的Y件缺P关键是要对目标机环境和宿L环境下的试内容q行合理取舍?/p>
试工具指的是那些能够用来辅助测试的工具Q测试工具主要用来支持测试h员的试工作Q本w不能直接用来进行测试,试工具一般都是通用工具Q测试h员应该根据实际情况对它们q行适当的调整。嵌入式软g试中经常用到测试工具主要有内存分析工具、性能分析工具、覆盖分析工兗缺陯t工L?/p>
内存分析工具
嵌入式系l的内存资源通常是受限的Q内存分析工具可以用来处理在q行动态内存分配时产生的缺陗当动态分配的内存被错误地引用Ӟ产生的错误通常难以再现Q可出现的失效难以追t,使用内存分析工具可以很好地检出q类~陷。目前常用的内存分析工具有Y件和g两种Q基于Y件的内存分析工具可能会对代码的执行性能带来很大影响Q从而媄响系l的实时性;Zg的内存分析工具h格昂贵,q且只能在特定的环境中用?/p>
性能分析工具
嵌入式系l的性能通常是一个非常关键的因素Q开发h员一般需要对pȝ的某些关键代码进行优化来改进性能Q而首先遇到的问题自然是定需要对哪些代码q行优化。性能分析工具可以为开发h员提供有关的数据Q说明执行时间是如何消耗的Q是什么时候消耗的Q以及每个进E所使用的时间。这些数据可以帮助确定哪些进E消耗了q多的执行时_从而可以决定如何优化YӞ以获得更好的旉性能。此外,性能分析工具q可以引导开发h员发现在pȝ调用中存在的错误以及E序l构上的~陷?/p>
覆盖分析工具
在进行白盒测试时Q可以用代码覆盖分析工兯t哪些代码被执行q,分析q程一般通过插桩来完成,插桩可以是在试环境中嵌入硬Ӟ也可以是在可执行代码中加入YӞ或者是两者的l合。开发h员通过对分析结果进行ȝQ可以确定哪些代码被执行q,哪些代码被遗漏了。目前常用的覆盖分析工具一般都会提供有兛_能覆盖、分支覆盖、条件覆盖等信息?/p>
C的嵌入式pȝ在网l化潮流的推动下Q已l逐渐摆脱q去那种y而简单的模式Q开始进入复杂度高、功能强大的阶段Q吸引了许多E序设计人员和硬件开发h员的视线。本文讨Z嵌入式Linuxpȝ的基本知识、开发流E、开发工兗调试工兗测试工LQƈ指出了嵌入式pȝ的开发与一般通用计算Y件开发的不同点及应该注意的事,q些都是今后在进行嵌入式Linuxpȝ开发时必须具备的基知识?/p>