摘要:车载电子业目前面临众多机遇与挑战,开发一套所有汽车可以安装的通用平台不仅可以降低整个产业链成本,而且可以使应用软件增加,满足不同用户喜好。本文提出一种可行的软件架构,将谷歌Android系统良好的兼容性和安全性的特点应用在车载电子系统中。
关键词:车载电子;开源;软件架构
引言
车载电子行业有着巨大的市场潜力,因为车主们期望将用在手机上面的某些应用软件直接运行在自己的私家车上。但同时也面临诸多挑战,车载电子厂商需要满足不同汽车型号的要求,而且即便是同一品牌的不同车型往往也需要不同的定制。如今的车主们都希望能够像使用智能手机一样随心所欲地安装或者删除应用软件。要将手机上使用的软件移植到车载电子系统中,开发者必须面对一个严峻的挑战,即第三方应用程序必须在一个隔离的环境中运行,以此来阻止对其他车载功能模块的干扰,以及可能使车主信息泄露等威胁。同时,第三方应用软件必须跟车载其他系统有效地结合起来,以便给用户带来更加完美的用户体验。最后,第三方软件开发者必须针对车载系统的共同特征,开发一套公用平台,以方便不同的汽车制造商进行移植,而且可以使同一个应用程序无缝隙地在不同的品牌的轿车上使用。
本文是对谷歌Android系统应用的一种创新扩展,它可以对第三方应用程序进行隔离,并使可信任的第三方应用程序有访问汽车功能软件层的权限,加强了对汽车安全的防范。
1 背景知识
人们直观上感觉汽车内部的消费电子似乎只是提供同智能手机、PDA以及MP3类似的功能,但是由于其在使用时不可避免地要与汽车其他功能模块接触,所以车载娱乐电子比其他消费电子要更加复杂。一般情况下,汽车上面的大多数应用软件都是厂商在汽车生产的时候已经固化好,它们一般会随着汽车的报废而报废,所以其生命周期一般是手机或者MP3的5~10倍。这就要求车载电子设计公司支持对其出厂后的应用程序进行长期升级。但由于电子产品更新换代很快,仅靠软件升级很大程度上提高了成本。
GENIVI联盟去年同一些汽车巨头、芯片设计巨头、软件开发公司等召开了一次大会,主要讨论的是怎样为车载电子产品建立一个标准公开的开发平台。GENIVI提出开发一个可扩展的架构,可能会应用到下一代车载电子上面,它需要在以下方面进行努力:
①通过从开源社区以及专业软件开发联盟获取无缝隙的软件补丁以及插件,使其可以增加更多的内容和特点,并始终要考虑系统的安全性以及可靠性。
②增加车主和乘客的切身享受,并且尽量使其性价比更高,努力降低设备成本。
GENIVI的软件架构利用英特尔的Moblin平台作为框架,通过增加或者删除组件来满足特定汽车需求和使用。支持用户自定义安装应用程序正在讨论,同时,许多可供选择的平台正在磋商中,谷歌的Android系统便是其中之一。
要强调的是,目前被GENIVI和Moblin重点强调支持的汽车电子硬件设备(CAN总线上网络特定的设备),当前在Android上却未能实现。但由于Android对开源的大力支持,允许用户对终端程序安装并卸载,目前Moblin对这些功能尚未许可。
2 谷歌Android
2007年底,在谷歌主持召开的开放手机联盟大会上,一个完全免费开放的手机平台诞生了,其目标是要延伸到更为广泛的硬件设备当中。谷歌Android基本的特点是其开放性,免费的SDK源码开发者可以很容易下载得到,Google的号召力以及Android的开源性迅速促使开发者社区的形成。
Android是一个主要为手机设备提供的开发平台,它包含一个系统内核、中间层和底层驱动以及一些绑定的应用程序。整个项目有Apache许可证版本2授权,因此移动运营商、软件企业、任何开发人员可以添加或删除功能。按照2.0范例协议,即使不是内容提供商,共享应用程序都是可能的。该平台允许一些二次开发商根据自己的需要添加新的功能或者应用,所以可以很容易开发出丰富的端对端应用程序。
2.1 结构概述
Android系统架构由5部分组成:Linux内核、库函数、Android运行态、应用程序框架、应用程序。
在线性架构的底层是Linux内核,基本上是Linux2.6.27版本。通过Linux内核为Android更新补丁,内核负责管理系统服务程序以及驱动模块、内存管理、任务调度。根文件系统使用rootfs,而数据及文件使用YAFFS,它是专门为NAND和NOR存储器设计驱动的文件系统。
应用程序框架和Android运行时态主要通过C/C++库,这部分库包括标准的C库、多媒体库、图形界面库、浏览器、字体库以及数据库。
Android运行态包括核心库以及Java Dalvik虚拟机,Dalvik是一种允许在有限的内存上运行多进程的虚拟机,每一个程序运行在一个独立的Linux进程里。
应用程序框架由许多类、接口、包组成。它的目的是提供一种简单、连续的方式去管理图形化用户接口,访问资源内存,收到通知,或者处理来电,主要的组成部分有可视系统、activity类管理、共享管理、资源管理、通知管理、电话管理。
2.2 安全性
Android内部进程通信以及安全性主要指在安装第三方应用的情况下,尽可能保证系统的稳定性。底层的许可机制是由Linux内核以及文件系统提供的,基本上可以满足基于Linux内核的其他系统。由于Android设备针对的是单用户,因此多用户服务的设备靠分配唯一的标识才能应用。
此外,Android是静态的安全许可系统,它在程序安装时被强制使用。
2.3 进程间的通信
Android有两种进程间通信的模型:intent和code绑定。intent类框架提供上层的进程间通信,这是最好的方式,可以动态地利用SDK包进行开发,并与上层应用程式绑定。intent类包含了几个用来描述调用者真正意图的域,调用者发送intent给Android的intent解析器,And-roid系统将通过intent过滤器从所有的应用程序中选择最适合处理该intent的activity类。intent域包含了期望的处理方式、类以及数据字符、数据的MIME类型。
intent能够被用来触发activities,发送数据给广播并启动相应的服务。安全性方面的限制主要通过Android系统提供的权限框架类来实现。
每个程序运行在自身的进程里,但开发者能够写一个服务运行在不同的进程中,一些对象在进程间传递也是允许的。在Android平台上,一个进程通常不能进入其他进程内存。因此,两个进程间如果相互通信,需要把他们的对象分解成操作系统可以识别的基础类型,并且通过进程的边界来控制对象。附带SDK的AIDL工具自动生成控制代码段,AIDL是用来生成在两个进程之间通信代码的一种接口描述语言。AIDL IPC机制就是使用代理类在客户端和实现端传递参数。
3 Android应用在车载电子的一种架构
Android扩展了汽车的总体结构,基本架构如图1所示,自定义的Android平台应用在汽车功能模块和支持组件的一边。这种扩展的目的是提供一种允许可信任的应用程序访问汽车功能模块(车辆制动、转向或电力传动分配)的安全机制,而不可信任的程序被隔离并且不可以访问。应用程序之间的这种强制性的安全策略是源于可靠性要求的IVI系统。通过汽车管理类可信任应用程序有机会访问一些特性(CAN总线),但处理不当也可能危及车辆安全(例如通过连续发送无效的数据帧使得CAN总线带宽饱和)。这种方案的主要特点是使上层逻辑去耦合,那样就可以方便上层应用获取并处理来自底层数据。
3.1 汽车管理模块
从上图可知,汽车管理模块可以看成是负责车载应用程序与Android底层交互的一个中间类库,只有通过它,车载应用程序才可以获取相应底层数据。
它有两个接口:一个是对应于应用程序而另一个是对应平台的组件,它是在Android SDK上面开发的并且拥有平台认证的一款应用程序。因为这个管理类不属于平台本身,所以用户在没有专业人员帮助时不能自行更新。
3.2 与应用程序之间的交互
Android是基于不透明的IPC之间的通信模型。应用程序将其功能交给操作系统,在运行时,其他的应用程序可以获得他们的功能。基本上,平台提供了后期管理和维护代码的能力,这种模型也可以用于在第三方应用程序和汽车管理类之间的交互。
汽车管理类处理汽车功能模块通过属性android.permission.car.speed.read和android.permission.car.speed.write。对于每一个属性(例如汽车总线发送实时速度),Android提供两种权限,创建并且指派给管理类。
利用预先定义的安全级别,它可以指定不同安全级别拥有以下的权限:
①所有的。任何人可以访问应用程序
②通常情况。访问是有权限决定的,但是一些应用程序的权限没有具体指出权限人;在程序安装后,权限会被手动设置。
③危险。访问时有权限限制的,用户在安装时必须有详尽的安全许可。
④签名。访问是有权限限制的,只要应用程序获得平台的认证,那么权限就会自动同意。
平台认证就是车载设计商在开发设计过程中使用的签署平台。它也用于签署汽车管理类。如果一个第三方申请了此证书,它就具有完整的控制汽车扩展(事实上汽车管理类只是一个签署应用平台证书的应用程序)。通过以下属性定义的汽车功能,能够通过高级别的AIDL接口去访问:
这种读/写的方式允许通过输入/输出来访问属性的值。通过增加或者删除监听器的方法来允许注册或者取消相关的回调函数,该通知的属性值是可以改变的。汽车管理类继承了此接口。个人的电话是要被Android权限相关的属性核实的,如果来电者是被允许执行的,那么汽车管理类进程会自动处理,否则就会抛出一个异常。
在开发应用时,开发者需要知道其属性名称以及数据的类型才能够开发第三方应用程序。而且所有的交互发生在先前的AIDL接口。这就意味着,多亏Android系统的架构,开发者并不需要了解整个SDK而是只要知道AIDL文件定义的电话属性和AIDL文件描述的回调函数。而且,如果不同的IVI来自不同的生产商,但有着相同的属性功能,那么第三方应用程序使用这样的属性能够无缝隙地运行在IVI上。
为了证实以上架构的实用性,开发了一块实现完整功能的工作模块,由自定义的Android发布版的概念验证组成。该模块已经通过Andr-oid模拟器的测试,基于ARM处理器,自定制模式的典型功能和IVI上面的用户界面,并在有英特尔Atom处理器的上网本上运行。
结语
本文概述了车载电子系统的相关知识,并介绍了Google Android系统背景知识;设计了一个基于Android架构的车载电子可扩展平台,以适应个性化汽车发展的需要。下一步的工作是引导该系统运行在自定义硬件上,并获取实时的汽车数据。