嵌入式软件设计的主要挑战是如何让嵌入式开发更快、更安全,以及让软件开发的文档特别规范,这样才可以让设计更为顺畅。这些都和开源系统的开发速度和进程控制密切相关。与此同时,汽车系统正在从传统的嵌入式软件转向开源Linux开发,其中最主要的问题在于通信。
针对嵌入式软件应用,风河(Wind River)系统公司Mobile Linux产品资深总监Chris Buerger指出,很多大公司虽然面向不同的市场(比如网络设备商华为和汽车厂商BMW),但是它们都投入了很多资源去支持开放源代码。这其中最大的挑战是安全性问题,特别是Android,基本所有的开放源码都存在这方面的隐患。在开源方面,风河主要面向三个与Linux相关的操作系统:Android、基于Yocto的Linux和Genivi Linux。
Android的优势在智能手机等移动领域,而Linux本身的起源则是服务器的操作系统。Linux早在十年前就在服务器中兴起,现在才逐渐延伸到设备领域。现在有个很新的趋势是,Android原来只是应用在手机和平板领域,现在正逐渐走向其他领域,比如血液透析仪、停车咪表和ATM机等。将Android应用到与人类自身安全相关的领域时,就需要特别小心!
Genivi是一个面向车载的协会,从操作系统来看包括两个部分,一个已经在用,一个还在讨论之中。目前已经在用的是基于Yocto的Linux,正在讨论的是从Meego沿袭而来的Tizen。Meego最开始的主要推动者是Intel和Nokia。Nokia转向和微软合作后,Intel得到了另外两个合作伙伴:三星和华为。目前是Intel在领导Genivi Linux的版本发布。风河也有和其专门配合的Linux版本。
风河车载解决方案资深产品经理Franz Walkembach表示,风河把Linux、Yocto和Genivi串联起来,积极地参与Yocto、Genivi这些标准制定组织,同时,又把这些规范融入到自己的产品中。Genivi有很多的技术规范和要求,通过把它们融合到Yocto项目中,便可以很方便地形成车载信息娱乐(IVI)解决方案。
Genivi协会内部经常讨论,如何把Genivi和Android连接起来开发IVI解决方案。目前,有一种解决方案是通过为它们创建符合性文件提供支持。第二种解决方案是将Genivi专有组件合并到Android中,这样成本和维护都非常大。还有一种解决方案是保留Genivi的符合性文件,并将Android融入其中,然后采用Hypervisor虚拟化方案,将系统划分成两个区块,分别运行两者的功能。在汽车行业,这是一个特别的情况。另外,用户并不关心系统内部是Android功能还是Genivi功能,因此,在同一个界面中提供所有功能是一个很大的挑战。这个问题非常复杂,比如系统会用到Intel和Freescale等厂商的芯片,也会采用来自不同机构的软件。
国内外在操作系统的选择上也有所不同。以BMW为例,其在中国的部门非常热衷于Android开发,而在德国则习惯用Genivi开发。Chris解释道,BMW在中国有一个很大的研发中心,其中有很多的Android工程师,他们对Android更为熟悉。另外,中国的android工程师比德国要多得多。Genivi操作系统的两个部分,从用户角度来看,二者没有太大区别,但其实现方法却有差别,比如在开源的图形界面Qt上。用Android设计更容易做到开发更快、成本更低。
手机和汽车设计也存在很多差别。首先,人机界面(HMI)在汽车和手机上非常不同,汽车互联的状况和手机不同。手机进入汽车,蓝牙和车载音响配合会有不同的情况;手机和IVI对接时的连通不一样;iPad或iPod与IVI连接时的情况也不同。第二,软件堆栈也不相同。第三个非常大的不同是安全性。汽车采用Android系统后,整个系统的安全要求就不同了。
另外,消费电子需要提供不同的功能,以满足个性化需求,而车载设备则不可能把各种不同的应用都整合到汽车当中。消费电子客户的需求是快,每个人都有自己习惯的应用软件。手机中有多个应用,用户可能每周进行一次更新。然而,汽车中包含导航、收音和播放等多个系统,如果同时更新的话,数据量将非常惊人。因此,对于汽车OEM来讲,一方面要满足消费者对性能的要求,一方面又要满足车载对安全性的要求。
在安全性上,德国曾做过一个模拟试验:一个人在亚洲通过互联网去攻击在德国的一辆与Internet互联的汽车。这种攻击情况在测试时就需要考虑。又比如一个人在东欧,通过互联网去控制一辆中国车的刹车系统。这种情况就可以采用风河的Hypervisor进行隔离,将多核分开。另外,风河设计了符合美国国家安全局(NSA)规范的安全加强(SE)的Android,此外还有SE Linux。同样是Android,用来设计手机和设计与人安全相关的设备,要求是完全不同的。Android产品不只适用于手机平台,还可以用来支持很多其他的智能终端应用。
在物联网(M2M)方面的应用,Android可能并不是应该选择的系统。因为物联网中往往不存在移动设备的应用环境(显示、按键或触摸等),所以比较好的选择可能选择Linux或VxWorks系统。手机中包含很多图形处理的代码,在物联网应用上并不需要这些功能。关于汽车物联网的应用,非常有趣的事是车与车之间的沟通。比如汽车相互靠近时,它们都记录了一些信息(堵车等交通信息),这时不需要人为介入,它们之间就可以进行直接交流。这样就可以达到交通便利的目的。还有车与云端的沟通等都无需人去介入。利用手机的蓝牙或NFC功能,人与人见面可以直接交换信息;又比如男女朋友约会,不用带名片,直接将手机一碰,就可以获取信息。现在,汽车之间也可以约会了!
汽车信息传递可以是通过WiFi与云端建立通信,将限速提醒等数据用于先进驾驶员辅助系统(ADAS)。车内重要数据(比如引擎数据等)通常不会和IVI互连。通常有个误解,既然手机中的功能(比如蓝牙)都很强了,汽车中为何还需要这些功能?然而,从汽车的角度来看,是汽车通过蓝牙和手机沟通,手机再与外网通信。这样,通过许多车把信息(堵车、运行等)传送到云端,服务提供商再把这些信息传回,这样就可以知道哪里堵车了等等。这样问题就来了。汽车中有WiFi,手机开某个应用可能会和汽车相关联。这样,把这么复杂的系统快速启动将非常困难。这样就要看情况了。不同的应用需要分先后顺序启动,比如主屏幕、蓝牙互联等立即启动,而有些不重要的应用则可以稍缓。这些是可以规划的。具体到哪些应用需要快速启动,不同的厂商可能有不同的需求。
很多人认为手机采用的就是Android操作系统,组织一个团队把软件设计到汽车设备并不困难。这样太低估了其中的挑战。给汽车开发解决方案和给手机开发解决方案完全不同,一旦合同签下后,这便是一条不归路。这个过程从演示到开发,时间将越来越紧。只有充分了解这个行业,站在整车的角度帮助车厂审查,然后将各部件整合到系统中,才能加快设计速度。
最后,对于刚入手嵌入式系统设计的工程师,Chris给出了自己的建议。嵌入式系统设计对稳定性的要求非常高。对于应用软件开发,竞争对手比较多;而对于嵌入式系统开发,则竞争对手要少得多。如果进入到这个领域,那么就祝贺您做出了一个非常好的选择。这个圈子不像游戏软件的开发,它非常稳定,竞争不是那么频繁,并且大家在一起就像好朋友和家人一样。另外,在嵌入式软件领域,操作系统都是各公司所专有的。如果换一家公司,则相当于学习一种新的语言。因此,对于初学者来说,应该选一种用得较多的语言。对于初学者来说,VxWorks是一个非常好的学习起点。而对于Linux来说,就非常建议多去了解基于Yocto的Linux,因为Yocto是目前集中了最广泛Linux资源的机构。
11/30/2012
|