Remote vehicle interaction in automotive Linux
By Nathan WillisJune 10, 2015
2015年在东京举办的汽车 Linux 峰会上,捷豹路虎(JLR:Jaguar Land Rover)团队首次向与会者展示了该公司在基于 Linux 的汽车系统中实施远程车辆交互(RVI:remote vehicle interaction)的计划。RVI可涵盖利用远程网络的广泛功能,但 JLR 的项目目前聚焦于少数核心应用:通过移动应用控制简单机械系统、远程数据记录以及空中软件更新(SOTA)。
该会议由Matt Jones 和 Arthur Taylor共同主持。Jones指出,汽车级Linux(AGL)项目内部设有 RVI 专家组,多个 GENIVI 成员也参与其中。因此本次展示的方案堪称联合成果——JLR正是 GENIVI 和 AGL 的活跃成员。专家组的使命是规划、设计并构建 RVI 所需基础设施的参考实现。但他补充道,该小组在完成最初三个 RVI 用例的支持后并无停止开发的计划:“我们将持续根据新用例添加功能,欢迎各界提出创新构想。”
Jones 强调,该小组致力于构建完整框架的可运行实现:“我们坚信这不能仅仅停留在计算机科学项目层面。”实际部署方案必须具备安全性、经过充分测试且足够可靠,才能让系统制造商愿意集成。为此,小组以开源形式推进开发,相关代码已在GitHub公开。
https://github.com/PDXostc/rvi_core
该系统的第一部分是一个设计用于数据中心(而非车辆内部)运行的服务器组件,负责接收、处理并转发车辆与其他软件服务间的消息。车辆端则配备相应的客户端守护进程。但Jones特别指出,该框架无需建立直接的客户端-服务器连接,而是采用存储转发网络模型,以应对网络信号不稳定或间歇中断的情况。车辆还能以点对点方式中继消息,这对车队管理场景尤为实用。
服务器支持创建基础用户与群组账户,用于验证传入消息并检查所含指令的授权状态。系统通过车辆名称、品牌、型号及车辆识别码(VIN:vehicle identification number)进行跟踪管理。这种验证机制最直观地体现在小组的“控制”演示中:该功能提供安卓与iOS应用,可远程解锁车门。服务器上每个用户账户可配置多个加密密钥,每把密钥均绑定于运行该应用的特定移动设备。
用户可通过网页应用预先为每个密钥授予特定车辆的“锁定/解锁”权限。当应用向服务器发送解锁指令时,服务器会先验证发起设备具备相应权限,再将指令转发至车辆。Jones透露,测试阶段采用树莓派连接门锁继电器实现解锁机制。团队正扩展该系统以支持更多功能控制,其中暖通空调控制将率先实现。
小组攻关的第二项用例是远程数据采集。这项应用相对简单,仅涉及从车辆向RVI服务器发送数据包并存入数据库。示例实现采用现成的车载诊断(OBD-II)适配器捕捉状态信息,采集数据存储于Cassandra数据库。
与纯内部项目的门锁测试不同,数据记录功能已引发外部关注。Jones 表示,波特兰公共交通系统已联系小组,希望合作开发开源方案以收集公交系统数据。针对波特兰的解决方案仍在开发中,但项目近期已完成首次数据记录实地测试——从旧金山出租车队采集整月数据,并开发出能绘制历史数据曲线、实时监控车队状态的网页应用。泰勒现场演示了这两款网页应用。
团队攻关的最终用例是SOTA空中软件更新功能。Jones 指出该功能适用于多种更新场景:制造商可能需更新特定子系统,第三方开发者需要定期升级应用程序,汽车厂商可能需要发布关键安全补丁等。此外他强调,消费者已习惯定期升级电脑和手机操作系统,因此车主必然期待同等功能——当所有其他电子设备都能现场更新时,少有车主愿意继续使用十年未更新的车载系统。
目前团队已实现按软件包更新机制。RVI服务器向车载计算机推送更新通知,并发送可供下载更新的网络地址。车载系统在获得用户授权后下载新软件包,当前支持RPM与二进制差分两种封装格式。服务器发出的软件包会先通过每辆车独有的密钥对加密,防止中间人攻击。Jones 说明该框架同时支持软件密钥对与硬件安全模块。若车载计算机成功解密并验证软件包,即可执行安装并向RVI服务器回报成功;反之则反馈失败信息。
从客户端角度看,这个机制相当简单明了(与其他Linux系统的软件包更新方式差异不大)。然而RVI服务器端需要处理更复杂的管控事项:它能为多台车辆排队更新任务,设置更新系统的开放与关闭时间窗口,根据地理位置限制访问权限,按车辆识别码范围分批推送更新等。
目前系统将软件包更新存储于RVI服务器自身数据库,不过支持GitHub及其他软件源的插件正在开发中。Jones 指出服务器也可分发完整磁盘镜像,虽然这项功能尚未部署。
当前所有三个功能框架在范围上都较为简单,但随着项目推进会逐渐复杂化。系统已采用模块化设计:RVI服务器支持多种数据库后端,并能扩展附加服务。Jones 表示,尽管项目本身是开源的,但其架构设计允许专有插件接入,因为部分汽车制造商或软件开发商可能会有此需求。针对观众提问,他说明服务器主要采用Erlang编写,演示应用以Python为主,网页前端(如解锁权限管理应用)则基于Django构建。
安全性能自然是重要考量因素。Jones 指出RVI服务器与客户端均采用标准Linux安全模块,具体实施方案由集成方决定。例如Tizen IVI系统使用Smack进行访问控制,其客户端门锁支持功能就会通过Smack限制对门锁服务的访问权限,而其他系统可能采用完全不同的配置方案。
另一位观众询问解锁系统如何应对用户手机被盗的情况。Jones 回应称用户可通过网站远程注销手机授权——这相比实体车钥匙被盗反而更安全。随后有人追问若手机在"沙漠中无网络覆盖区域"失窃该如何处理,Jones 则幽默地表示这情形与在沙漠丢失实体钥匙并无二致。
长期以来,RVI概念始终让部分开发者群体感到不安,或许源于不时出现的现代汽车计算机系统安全漏洞新闻。但值得关注的是,这正是Linux与开源软件能够改善现状而非同流合污的领域。AGL专家组要构建成熟的RVI系统仍面临大量工作,但令人欣慰的是,项目从一开始就统筹考虑了多样化用例场景、不稳定网络接入条件及安全机制设计。
[作者感谢Linux基金会为其参加2015年汽车Linux峰会提供的差旅资助。]
Src
https://lwn.net/Articles/647753/