嵌入式资料自学参考与建议.docx
《嵌入式资料自学参考与建议.docx》由会员分享,可在线阅读,更多相关《嵌入式资料自学参考与建议.docx(33页珍藏版)》请在冰豆网上搜索。
嵌入式资料自学参考与建议
同济-嵌入式系统
A课程:
《深入理解linux内核》《情景分析》和源代码
Linux基础
1、《Linux与UnixShell编程指南》
C语言基础
1、《CPrimerPlus,5thEdition》【美】StephenPrata著
2、《TheCProgrammingLanguage,2ndEdition》【美】BrianW.KernighanDavidM.Rithie(K&R)著
3、《AdvancedProgrammingintheUNIXEnvironment,2ndEdition》(APUE)
4、《嵌入式Linux应用程序开发详解》
Linux内核
1、《深入理解Linux内核》(第三版)
2、《Linux内核源代码情景分析》毛德操胡希明著
研发方向
1、《UNIXNetworkProgramming》(UNP)
2、《TCP/IP详解》
3、《Linux内核编程》
4、《Linux设备驱动开发》(LDD)
硬件基础
1、《ARM体系结构与编程》杜春雷著
2、S3C2410Datasheet
英语基础
1、《计算机与通信专业英语》
系统教程
1、《嵌入式系统――体系结构、编程与设计》
2、《嵌入式系统――采用公开源代码和StrongARM/Xscale处理器》毛德操胡希明著
3、《BuildingEmbeddedLinuxSystems》
理论基础
1、《算法导论》
2、《数据结构(C语言版)》
3、《计算机组织与体系结构?
性能分析》
4、《深入理解计算机系统》【美】RandalE.BryantDavidO"Hallaron著
5、《操作系统:
精髓与设计原理》
6、《编译原理》
7、《数据通信与计算机网络》
8、《数据压缩原理与应用》
学习路线是:
使用linux—〉linxu系统编程开发---〉驱动开发和分析linux内核。
而我差不多相反,实际上你不会使用linux也可以学习内核
B分析:
(2)这方面的企业数量要远少于企业计算类企业。
特别是从事嵌入式的小企业数量较多(小企业要搞自己的产品创业),知名大公司较少(搞嵌入式的大公司主要有Intel、Motorola、TI、Philip、Samsung、Sony、Futjtum、Bell-Alcatel、意法半导体、Microtek、研华、华为、中兴通信、上广电等制造类企业)。
这些企业的习惯思维方式是到电子、通信等偏硬专业找人。
由于我院以前毕业生以企业计算为主,所以我院与这些企业联系相对较少。
我院正积极努力,目前已与其中部分公司建立了联系,争取今后能有我院同学到这些企业中实习或就业。
(3)有少数公司经常要硕士以上的人搞嵌入式,主要是基于嵌入式的难度。
但大多数公司也并无此要求,只要有经验即可。
我院同学若学习嵌入式,显然应偏重于嵌入式软件,特别是嵌入式操作系统方面,应是我们的强项。
对于搞嵌入式软件的人,最重要的技术显然是(实际上很多公司的招聘广告上就是这样写的):
(1)掌握主流嵌入式微处理器的结构与原理
(2)必须掌握一个嵌入式操作系统
(3)必须熟悉嵌入式软件开发流程并至少做过一个嵌入式软件项目。
我院在嵌入式软件方面最重要的课程包括:
(1)嵌入式微处理器结构与应用:
这是一门嵌入式硬件基础课程,我院用这门课取代了传统的“微机原理与接口”课程(目前国内已有少部分高校IT专业这样做了,因为讲x86微机原理与接口很难找到实际用处,只为教学而已)。
我们说过,嵌入式是软硬件结合的技术,搞嵌入式软件的人应对ARM处理器工作原理和接口技术有充分了解,包括ARM的汇编指令系统。
若不了解处理器原理,怎么能控制硬件工作,怎么能写出节省内存又运行高速的最优代码(嵌入式软件设计特别讲究时空效率),怎么能写出驱动程序(驱动程序都是与硬件打交道的)?
很多公司招聘嵌入式软件人员时都要求熟悉ARM处理器,将来若同学到公司中从事嵌入式软件开发,公司都会给你一本该设备的硬件规格说明书(xxxSpecification),您必须能看懂其中的内存分布和端口使用等最基本的说明(就像x86汇编一样),否则怎么设计软件。
有些同学觉得嵌入式处理器课程较枯燥,这主要是硬件课程都较抽象的原因,等我们的嵌入式实验室10月份建好后,您做了一些实验后就会觉得看得见摸得着。
还有同学对ARM汇编不感兴趣,以为嵌入式开发用C语言就足够了。
其实不应仅是将汇编语言当成一个程序设计语言,学汇编主要是为了掌握处理器工作原理的。
一个不熟悉汇编语言的人,怎么能在该处理器写出最优的C语言代码。
在嵌入式开发的一些关键部分,有时还必须写汇编,如Bootloader等(可能还包括BSP)。
特别是在对速度有极高要求的场合(如DSP处理器的高速图像采集和图像解压缩),目前主要还要靠汇编写程序(我看到过很多公司是这样做的)。
当您在一个嵌入式公司工作时,在查看描述原理的手册时,可能很多都是用汇编描述的(我就遇到过),这是因为很多硬件设计人员只会写或者喜欢用汇编描述,此时您就必须看懂汇编程序,否则软硬件人员可能就无法交流。
很多嵌入式职位招聘时都要求熟悉汇编。
[小知识]目前嵌入式处理器常见的有ARM、PowerPC、MIPS、Motorola68K、ColdFire(冷火)等,但ARM占据了绝对主流(资料说手机中几乎100%都是ARM处理器)。
ARM是一个只卖知识产权的公司,目前获得购买了ARMCPU核授权许可的大公司很多,包括Intel、Samsung、Amstel、Motorola、Philip等,他们都在ARMCPU核的基础上进行了一些外围扩展,形成自己的处理器(如SamsungS3C2410,Motorolai.MXL9328等处理器都是采用ARM9内核,指令一级是相同的)。
而众多中小公司又购买了这些处理器,设计了各种各样的开发板,如华恒等国内很多著名嵌入式公司都生产基于SamsungS3C2410的开发板,供最终用户使用或供教学实验。
在ARM这个食物链上,ARM公司是大鱼,Intel、Samsung等公司是小鱼,而华恒等则是虾米,最终用户(想我们要采购嵌入式开发板的实验室)则是喂虾米的。
Intel早期生产的是低端ARM(StrongARM,相当于ARM7),现在转向主要生产高端ARM(即IntelXscale处理器,相当于ARM10,主要用在高端PDA上,如HP和DELL生产的PDA都采用IntelXscale,价格较高)。
目前应用最多的是ARM7和ARM9两类处理器。
ARM7较便宜,可跑uclinux(是一个不支持高级内存管理功能的嵌入式Linux系统)、Vxworks、uc/osII等实时操作系统,但因处理器不带内存管理单元MMU(无内存分页和地址映射机制,所以不能使用虚拟内存),所以不能跑WindowsCE,另外通用Linux中的某些内存管理功能也不能用在ARM7上。
ARM9是一个带MMU功能的高端处理器,可跑WinCE或通用Linux的大多数功能。
以上是我的一点了解,可能有不对的地方。
我们学院正在建设的嵌入式实验室(10月底到货)包括30套ARM7系统(拟采用SamsungS3C44b0x开发板,主要用于嵌入式处理器结构、嵌入式linux课程实验),10套ARM9系统(拟采用SamsungS3C2410x开发板,主要用于WindowsCE课程建设),每套实验板都配了高速仿真器,价格都很贵(比我们招标的DELLPC还贵),很容易损坏,同学应爱护使用。
(2)嵌入式操作系统类课程
除了WinCE的实时性稍差外,大多数嵌入式操作系统的实时性都很强,所以也可称为实时操作系统RealTimeOperatingSystem.从事嵌入式的人至少须掌握一个嵌入式操作系统(当然掌握两个更好),这在嵌入式的所有技术中是最为关键的了。
目前最重要的RTOS主要包括:
第一类、传统的经典RTOS:
最主要的便是Vxworks操作系统,以及其Tornado开发平台。
Vxworks因出现稍早,实时性很强(据说可在1ms内响应外部事件请求),并且内核可极微(据说最小可8K),可靠性较高等,所以在北美,Vxworks占据了嵌入式系统的多半疆山。
特别是在通信设备等实时性要求较高的系统中,几乎非Vxworks莫属。
Vxworks的很多概念和技术都和Linux很类似,主要是C语言开发。
像Bell-alcatel、Lucent、华为等通信企业在开发产品时,Vxworks用得很多。
但Vxworks因价格很高,所以一些小公司或小产品中往往用不起。
目前很多公司都在往嵌入式Linux转(听说华为目前正在这样转)。
但无论如何,Vxworks在一段长时间内仍是不可动摇的。
与Vxworks类似的稍有名的实时操作系统还有pSOS、QNX、Nucleus等RTOS。
第二类、嵌入式Linux操作系统:
Linux的前途除作为服务器操作系统外,最成功的便是在嵌入式领域的应用,原因当然是免费、开源、支持软件多、呼拥者众,这样嵌入式产品成本会低。
Linux本身不是一个为嵌入式设计的操作系统,不是微内核的,并且实时性不强。
目前应用在嵌入式领域的Linux系统主要有两类:
一类是专为嵌入式设计的已被裁减过的Linux系统,最常用的是uClinux(不带MMU功能),目前占较大应用份额,可在ARM7上跑;另一类是跑在ARM9上的,一般是将Linux2.4.18内核移植在其上,可使用更多的Linux功能(当然uClinux更可跑在ARM9上)。
很多人预测,嵌入式Linux预计将占嵌入式操作系统的50%以上份额,非常重要。
缺点是熟悉Linux的人太少,开发难度稍大。
另外,目前我们能发现很多教材和很多大学都以ucOS/II为教学用实时操作系统,这主要是由于ucOS/II较简单,且开源,非常适合入门者学习实时操作系统原理,但由于ucOS/II功能有限,实用用得较少,所以我院不将其作为教学重点,要学习就应学直接实用的,比如uClinux就很实用。
况且熟悉了Linux开发,不仅在嵌入式领域有用,对开发Linux应用软件,对加深操作系统的认识也有帮助,可谓一举多得。
据我所知,目前Intel、Philip都在大搞ARM+LINUX的嵌入式开发,Fujitum则是在自己的处理器上大搞Linux开发。
目前在嵌入式Linux领域,以下几个方面的人特别难找,一是能将Linux移植到某个新型号的开发版上;二是能写Linux驱动程序的人;三是熟悉Linux内核裁减和优化的人。
我院在该嵌入式Linux方面的课程系列是:
本科生操作系统必修课,然后是Linux程序设计选修课,最后是嵌入式Linux系统选修课。
我院在Linux方面目前已有较强力量,魏老师和张老师熟悉Linux开发,金老师和唐老师熟悉Linux系统管理。
第三类、WindowsCE嵌入式操作系统:
Microsoft也看准了嵌入式的巨大市场,MS永远是最厉害的,WinCE出来只有几年时间,但目前已占据了很大市场份额,特别是在PDA、手机、显示仪表等界面要求较高或者要求快速开发的场合,WinCE目前已很流行(据说有一家卖工控机的公司板子卖得太好,以至来不及为客户裁减WinCE)。
WinCE目前主要为4.2版(.NET),开发平台主要为WinCEPlatformBuilder,有时也用EVC环境开发一些较上层的应用,由于WinCE开发都是大家熟悉的VC++环境,所以我院学过Windows程序设计课程的同学都不会有多大难度,这也是WinCE容易被人们接受的原因,开发环境方便快速,微软的强大技术支持,WinCE开发难度远低于嵌入式Linux。
对于急于完成,不想拿嵌入式Linux冒险的开发场合,WinCE是最合适了(找嵌入式Linux的人可没那么好找的),毕竟公司不能像学生学习那样试试看,保证开发成功更重要。
根据不同的侧重点,WinCE还有两个特殊版本,一个是MSPocketPC操作系统专用于PDA上(掌上电脑),另一个是MSSmartPhone操作系统用于智能手机上(带PDA功能的手机),两者也都属于WinCE平台。
在PDA和手机市场上,除WinCE外,著名的PDA嵌入式操作系统还有PalmOS(因出现很早,很有名)、Symbian等,但在WinCE的强劲冲击下,Palm和Symbian来日还能有多长?
我院可能是全国高校中唯一一家开设专门的"WindowsCE嵌入式操作系统"课程的学校,这主要是基于以下原因:
我院本身前面便有Windows程序设计课程,同学学过VC++后再学WinCE,非常方便自然,通过学习WinCE同样也可了解嵌入式软件的一般开发过程,对Linux有惧怕心理的同学也很合适。
很显然,嵌入式Linux永远不可能替代WinCE,而且将来谁占份额大还很难讲,毕竟很多人更愿意接受MS的平台,就像各国政府都在大力推LINUX已好长时间,但您能看到几个在PC机上真正使用LINUX的用户?
据我观察,目前在嵌入式平台上,LINUX是叫得最响,但还是WinCE实际用得更多.嵌入式LINUX可能更多地是一些有长远产品计划的公司,为降低成本而进行长远考虑;二是微软亚洲研究院对我院WinCE课程的支持计划,我们也很希望将来我院能有同学通过微软的面试去实习。
WinCE和多媒体(如MPEG技术)是微软亚洲工程院目前做得较多的项目领域之一,他们很需要精通WinCE的人。
总结关于嵌入式操作系统类课程,若您觉得自己功底较深且能钻研下去,则可去学嵌入式Linux;若您觉得自己VC++功底较好且想短平快地学嵌入式开发,则我院的WinCE课程是最好的选择。
(3)嵌入式开发的其它相关软件课程
搞嵌入式若能熟悉嵌入式应用的一些主要领域,这样的人更受企业欢迎。
主要的相关领域包括:
A、数字图像压缩技术:
这是嵌入式最重要最热门的应用领域之一,主要是应掌握MPEG编解码算法和技术,如DVD、MP3、PDA、高精电视、机顶盒等都涉及MPEG高速解码问题。
为此,我院已预订了一位能开设数字图像处理课程的博士。
B、通信协议及编程技术:
这包括传统的TCP/IP协议和热门的无线通信协议。
首先,大多数嵌入式设备都要连入局域网或Internet,所以首先应掌握TCP/IP协议及其编程,这是需首要掌握的基本技术;其次,无线通信是目前的大趋势,所以掌握无线通信协议及编程也是是很重要的。
无结通信协议包括无线局域网通信协议802.11系列,Bluetooth,以及移动通信(如GPRS、GSM、CDMA等)。
C、网络与信息安全技术:
如加密技术,数字证书CA等。
我院有这方面的选修课。
D、DSP技术:
DSP是DigitalSignalProcess数字信号处理的意思,DSP处理器通过硬件实现数字信号处理算法,如高速数据采集、压缩、解压缩、通信等。
数字信号处理是电子、通信等硬件专业的课程,对于搞软件的人若能了解一下最好。
目前DSP人才较缺。
如果有信号与系统、数字信号处理等课程基础,对于学习MPEG编解码原理会有很大帮助。
(4)嵌入式开发的相关硬件基础
对于软件工程专业的学生,从事嵌入式软件开发,像数字电路、计算机组成原理、嵌入式微处理器结构等硬件课程是较重要的。
另外,汇编语言、C/C++、数据结构和算法、特别是操作系统等软件基础课也是十分重要的。
我们的主要目地是能看懂硬件工作原理,但重点应是在嵌入式软件,特别操作系统级软件,那将是我们的优势。
我们的研究生里有些是学电子、通信类专业过来的,有较好的模拟电路和单片机基础,学嵌入式非常合适。
嵌入式本身就是从单片机发展过来的,只是单片机不带OS,而现在很多嵌入式应用越来越复杂,以至不得不引入嵌入式操作系统。
另外,为追求更高速的信号处理速度,现在在一些速度要求较高的场合,有不少公司是将一些DSP算法,如MPEG压缩解压缩算法等用硬件来实现,这就涉及到HDL数字电路设计技术及其FPGA/IP核实现技术,这方面的人目前市场上也很缺。
(5)题外话
另外,能写驱动程序的人目前是非常紧缺的(驱动程序也可归于嵌入式范畴),包括桌面Windows中的DDK开发环境和WDM驱动程序。
公司每时每刻都要推出新产品,每一个新产品出来了,要能被操作系统所使用,是必须写驱动程序的。
写驱动程序就必须掌握操作系统(如Windows或Linux)的内部工作原理,还涉及到少量硬件知识,难度较大,所以这方面的人很难找。
想成为高手的同学,也可从驱动程序方面获得突破。
我可说一下自己的经历,三年前我曾短暂地在一家公司写过WinCE驱动程序(正是因为知道这方面的人紧缺,所以才要做这方面的事),尽管那以前从未做过驱动程序,应聘那个职位时正是看准了公司是很难招聘到这方面的人,既然都找不到人,驱动还得有人做,这正是可能有机会切入这一领域的大好机会。
面试时大讲自己写过多少万行汇编程序,对计算机工作原理如何清楚,简历中又写着我曾阅读完两本关于WindowsDriverModel的两本英文原版书,写过几个小型的驱动程序练习程序(其实根本没写过,我们的同学将来千万不要像我这样,早练就些过硬功夫,就不至于沦落到我这等地步,就不用像我那样去“欺骗”公司了,我这是一个典型的反面教材),居然一切都PASS(当然最重要的是笔试和面试问题还说得过去),这只能说明这一领域找人的困难程度。
公司本就未指望找到搞过驱动的人,找个有相关基础的人就算不错了。
做了以后,发现也并不是怎样难的。
其实搞驱动程序的工作是很舒服的,搞完一个版本就会空一段时间,只有等公司新的芯片推出或新的OS出现后,才需要再去开发新一版驱动,那时有将近一个月时间空闲着在等WinCE.NETBeta版推出,准备将驱动程序升级到CE.NET上,现在在软件学院工作整日忙,无限怀念那段悠闲时光。
很巧合,最近本人无意中再次体会到了嵌入式的迷人之处。
上周我那用了3年的手机终于不能WORK了。
此次更新,除要求有手机常见功能外,最好有MP3功能(现在很多英语听力都有MP3文件),最好有英汉词典,最好还能读WORD文档。
最后选了个满足以上条件的最便宜的手机DOPOD515(斩了我2.2K,但想想这也算自己对嵌入式事业的支持,这样便也想开了),算得上最低档的智能手机了。
回来一查,手机的about显示,本手机Processor是ARM,其OS是MSSmartphone(即WinCE.NET4.2),这么巧合,简直可做为学习嵌入式课程的产品案例了(等我们的WinCE课程开得有声有色后,希望能从微软研究院搞些Smartphone来开发开发)。
有OS的手机果然了得,金山词霸、WORD、EXCEL、REGEDIT等居然都有smartphone版的,PC上的MP3、DOC等居然在download时都可被自动转换成smartphone格式,真是爽。
完全可用WindowsCE自己开发一些需要的程序download到自己的手机上。
现在市面销售PDA智能手机火爆,MS总是财源滚滚。
但我已发现国产的ARM+LINUX手机出现在市面上,价格只1.2K。
在GOOGLE网上能搜索太多的关于嵌入式系统的讨论了,我刚发现一个非常不错,有很多有经验者谈自己的体会,投入到其中的论坛中,你会切身感到嵌入式学习的热潮。
要么走ARM+WinCE,要么走ARM+LINUX,要么走ARM+VXWORKS。
每个搞嵌入式的人都可选一条路,条条大路通罗马。
C建议:
话说...,现在大部分处理器生产商在销售处理器的同时,还会提供开发环境IDE比如TI的CCS和AD的VisualDsp++。
另外你还可以从这些公司或其它专门开发DEMO板的公司购买开发板。
这些DEMO一般会提供比较丰富的Demo程序,比如音视频捕捉及显示、I2C实例、DMA实例、CACHE实例等。
这些DEMO程序基本上由应用处理器生产商提供的底层驱动程序库(driverlib)经二次开发出来的。
可见,对于一般的嵌入式底层软件开发人员来说,基本就不用写什么真正意义上的驱动程序,(除非你是为处理器生产商写底层驱动的,毕竟这种大牛不多,也不屑于我的文章),只要参照DEMO程序或使用驱动程序接口开发适合自己项目的FIRMWARE就可以了。
这种开发已经演变成驱动应用而不是驱动开发,其难度相比从零开始的驱动开发已经大大降低。
我们国内很大部分“驱动开发者”都在从事这样的工作!
不过也确实没办法,如果处理器生产商不提供已经屏蔽硬件特性并降低底层软件开发难度的驱动程序库,估计许多的“驱动开发者”即使磕破头皮绞尽脑汁也未必能搞定那些底层驱动。
可见,要搞真正的驱动开发,还是要到大公司去混!
一般来说,从事消费类或通信类产品研发的底层软件开发的人员,如果不熟练掌握DMA、cache、PCI、代码优化(包括编译器优化)等技术,那么他充其量还只是停留在应用软件或简单系统开发的层面,就好比搞VC编程的还没很好掌握MFC一样,虽然进入了应用软件开发的殿坛,但还没有把握这个领域的关键技术。
这几个东西在对嵌入式底层软件软件开发的人来说至关重要,可以说是高手和普通者的分水岭。
现在,一些高端的流媒体产品如手机研发、游戏设备开发、IPTV、数字视频录像机(DVR)、数字视频广播(DVB)、机顶盒、视频会议系统、网络监控摄像头以及可视电话,为了能够处理大量的音视频输入输出数据流,往往采用单一MPU(比如ARM和Motorola的PPC/Coldfire/68K)、单一DSP(专用媒体处理器TI C64x/DM642、ADBlackfin5xx、Equator的BSP15以及PhilipsTriMedia)或MPU+DSP组合的单核多芯或单芯多核的处理结构(TIOMAP/DaVinci和ADBF561)作为核心处理模块(一般的MCU主要应用于控制目的,不具备大批量数据处理的能力,所以比较少被应用于这些产品)。
另外,这些处理器为了能进一步提升数据处理能力往往都会配备DMA、CACHE、PCI等外设或接口(见下图,DMA+CACHE+PCI的协作极大地提高了处理器与处理器之间以及处理器与外设的交互能力)。
由此可见DMA、CACHE、PCI对于从事消费类或通信类研发的底层软件开发的重要性可想而知(搞定了这些复杂有难度的外设,其它的也不在话下了:
))。
*DMA:
它是个很好“奴才”。
"主子"CPU让它干什么它就干什么,任劳任怨。
那些搬移大量外围设备数据的“体力活”它统统包下,干完之后马上中断告诉"主子",而且两者在同时使用数据总线时,卑微的“奴才”会让着"主子"。
这样的好“奴才”谁会不要,谁会不喜欢呢?
(DMA是很基本的东西,后面介绍的cache和PCI控制器也都会用到)。
*Cache:
它是“加速器”。
在目前的IT行业,外围内存在访问速率上与处理器严重脱节一直是不可回避的“瓶颈”问题。
cache的引入无疑极大地缓解了这个问题。
它使得处理器访问cache就如同访问外部内存一样快速,极大地提高了CPU处理数据的效率,所以被广泛地应用于流媒体设备中。
*PCI:
当在一块板子上有多块处理器时,它们之间大量的数据交互就是可能存在问题,比如MPU从网络接收的大块连续数据发送给DSP处理时,就需要有足够承载能力及带宽的总线。
PCI总线一般33M最大66M带宽能力足以应付决大部分的应用。
PCI给处理器之间架上了桥梁,使得MPU+DSP的应用设计成为现实。
*Optimization:
选择合适的处理器并设计能够充分发挥外设性能的板子是项目负责人和硬件人员干的事情,而软件开发人员要干的就是编写能够充分发挥硬件功能的高效代码。
代码优化方法就是其中用于提高系统性能和代码效率的有效技术,是任何嵌入式开发人员都要努力掌握的技能
现在很多公