--------本文摘自google官方关于automotive架构讲解内容。转载请注明出处。---------
借助各种总线拓扑,很多汽车子系统都可以实现互连以及与车载信息娱乐 (IVI) 系统的连接。不同的制造商提供的确切总线类型和协议之间有很大差异(甚至同一品牌的不同车型之间也是如此),例如控制器区域网络 (CAN) 总线、局域互联网络 (LIN) 总线、面向媒体的系统传输 (MOST) 总线以及汽车级以太网和 TCP/IP 网络(如 BroadR-Reach)。
Android Automotive 的硬件抽象层 (HAL) 为 Android 框架提供了一致的接口(无需考虑物理传输层)。因此车载 HAL 是开发 Android Automotive 实现的接口。
系统集成商可以将特定于功能的平台 HAL 接口(如 HVAC)与特定于技术的网络接口(如 CAN 总线)连接,以实现车载 HAL 模块。典型的实现可能包括运行专有实时操作系统 (RTOS) 的专用微控制器单元 (MCU),以用于 CAN 总线访问或类似操作,该微控制器单元可通过串行链路连接到运行 Android Automotive 的 CPU。除了专用的 MCU,还可以将总线访问作为虚拟 CPU 来实现。只要实现符合车载 HAL 的接口要求,每个合作伙伴都可以选择适合硬件的架构。
架构
车载HAL是汽车与车辆网络服务之间的接口定义:
图1.车载HAL与Android Automotive架构如下是对相关类的解析:
-
Car API:包含 CarHvacManager 和 CarSensorManager 等 API。如需详细了解受支持的 API,请参阅 /platform/packages/services/Car/car-lib。
-
CarService:位于 /platform/packages/services/Car/。
-
VehicleNetworkService:通过内置安全机制控制车载 HAL。仅限访问系统组件(第三方应用等非系统组件需使用 Car API)。原始设备制造商 (OEM) 可以通过 vns_policy.xml 和 vendor_vns_policy.xml 控制访问权限。位于 /platform/packages/services/Car/vehicle_network_service/;要查看用于访问车辆网络的库,请参阅 /platform/packages/services/Car/libvehiclenetwork/。
-
车载 HAL:定义 OEM 可以实现的车辆属性的接口。包含属性元数据(例如,车辆属性是否为 int 以及允许使用哪些更改模式)。位于 hardware/libhardware/include/hardware/vehicle.h。要了解基本参考实现的相关信息,请参阅 hardware/libhardware/modules/vehicle/。
有关更多详情,请参阅车辆属性。
安全性
车载 HAL 支持 3 个级别的数据访问安全性:
-
仅限系统(由 vns_policy.xml 控制)
-
允许拥有权限的应用访问(通过汽车服务)
-
无需任何权限即可访问(通过汽车服务)
仅允许部分系统组件直接访问车辆属性,而车辆网络服务是把关程序。大多数应用需通过汽车服务的额外把关(例如,只有系统应用可以控制 HVAC,因为这需要仅授予系统应用的系统权限)。
验证
AOSP 包含开发过程中使用的以下测试资源:
-
hardware/libhardware/tests/vehicle/vehicle-hal-tool.c
加载车载 HAL 并执行简单操作的命令行原生工具。它有助于系统在开发的早期阶段启动并运行。 -
packages/services/Car/tests/carservice_test/
包含使用模拟车载 HAL 属性进行的汽车服务测试。每个属性的预期行为都会在测试中实现,这是了解预期行为的绝佳起点。 -
hardware/libhardware/modules/vehicle/
基本参考实现。
网友评论