--------本文摘自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是汽車與車輛網絡服務之間的接口定義:
如下是對相關類的解析:
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/
基本參考實現。