2. 车载系统基础

在智能座舱开发中,首先要厘清两个极易混淆的术语:Android Automotive OS(AAOS)与Android Auto。前者是运行在车载硬件上的完整操作系统,后者则是手机投屏的映射协议。理解二者的本质差异,是进入车载显示与HMI开发的第一道门槛。本章将从系统架构、硬件域划分、显示单元(IVI与Cluster)三个维度,建立车载系统的基础认知框架。

车载系统分层架构与显示域概念图 应用层 IVI应用(导航/媒体/设置) Cluster应用(仪表盘/ADAS警示) HMI框架(CarUI/AAOS SDK) 系统服务层 CarService(车辆属性/车门/空调) Vehicle HAL(VHAL) AudioService(音区/焦点) DisplayService(多屏管理) SystemUI(状态栏/通知) Launcher(桌面) 硬件抽象层(HAL) Camera HAL Audio HAL Display HAL Sensors HAL Vehicle HAL Network HAL Linux内核与硬件平台 SoC(高通8155/8295/英伟达Orin) GPU/DPU 显示接口(DSI/LVDS/DP) CAN/以太网 内存(DDR4/LPDDR5) 存储(eMMC/UFS) 电源管理(PMIC) 显示域划分 IVI(中控娱乐) Cluster(仪表) HUD(抬头显示) Android Auto(手机投屏) 手机端运行 通过USB/无线连接 车机仅作为显示终端 对比

2.1 Android Automotive OS与Android Auto的本质区别

核心原理

Android Automotive OS(AAOS)是Google为车载环境从零构建的完整操作系统,它直接运行在车机SoC上,拥有独立的Linux内核、系统服务、应用框架和HAL层。AAOS不依赖手机,可以独立完成导航、语音、媒体播放、车辆控制等功能。而Android Auto本质上是一个投屏协议,手机是计算主体,车机屏幕仅作为远程显示终端,通过USB或Wi-Fi将手机界面投射到车载屏幕上。

从开发视角看,AAOS应用是使用Android SDK开发的独立APK,运行在车机本地;Android Auto应用则是手机端应用的扩展,通过Auto SDK将界面适配到车载屏幕。两者的包结构、生命周期、权限模型完全不同。

判断方法

  • 运行载体:AAOS运行在车机硬件上;Android Auto运行在手机上。
  • 网络依赖:AAOS可完全离线运行(除在线服务外);Android Auto需要手机持续连接。
  • 系统更新:AAOS通过OTA升级车机系统;Android Auto通过手机应用商店更新。
  • 硬件访问:AAOS可直接访问车辆CAN总线、传感器、多屏输出;Android Auto只能访问手机自身硬件。
  • 应用生态:AAOS支持车机专用应用(如车辆设置、空调控制);Android Auto仅支持经过认证的媒体和通讯类应用。
对比维度 Android Automotive OS Android Auto
运行位置 车机SoC本地 手机端
系统独立性 完全独立,不依赖外部设备 依赖手机,车机仅显示
车辆控制能力 支持(通过CarService/VHAL) 不支持
多屏支持 原生支持IVI+Cluster+HUD 仅支持中控屏
应用来源 车机应用商店(如Google Play Automotive) 手机应用商店
典型代表 沃尔沃XC90、Polestar 2、理想L系列 几乎所有支持Android Auto的车型
经验提醒:在HMI设计时,AAOS需要为车机本地应用设计完整的交互逻辑(包括方向盘按键、旋钮、触摸屏),而Android Auto只需遵循Google的Auto UI模板,减少自定义空间。如果项目目标是深度定制座舱体验,必须选择AAOS。

2.2 车载系统架构分层详解

核心原理

现代车载系统普遍采用分层架构,从下至上依次为:硬件平台层、Linux内核层、硬件抽象层(HAL)、系统服务层、应用框架层和应用层。这种分层设计使得上层应用与底层硬件解耦,便于OEM和Tier1进行模块化开发和迭代。

在AAOS中,最关键的分层是Vehicle HAL(VHAL)。它定义了车辆属性(如车速、车门状态、空调温度)的标准接口,上层CarService通过VHAL读取和设置车辆状态。VHAL屏蔽了不同车型的CAN协议差异,使得应用开发者无需关心具体硬件实现。

各层职责与关键组件

  1. 硬件平台层:包括SoC(高通8155/8295、英伟达Orin)、GPU/DPU、显示接口(DSI/LVDS/DP)、内存、存储、电源管理IC。该层决定了系统性能上限。
  2. Linux内核层:提供进程调度、内存管理、设备驱动、网络协议栈。AAOS基于Linux 5.x内核,增加了车载相关驱动(如CAN、以太网AVB)。
  3. HAL层:将内核驱动封装为稳定的C++接口。关键HAL包括:Vehicle HAL、Audio HAL(支持多音区)、Display HAL(支持多屏独立渲染)、Camera HAL(用于DMS/AVM)。
  4. 系统服务层:运行在SystemServer进程中,包括CarService(车辆属性管理)、ActivityManager、WindowManager、AudioService、DisplayService等。CarService是AAOS特有的核心服务。
  5. 应用框架层:提供Android SDK API和Car API(如CarPropertyManager、CarAudioManager)。开发者通过Car API访问车辆数据。
  6. 应用层:包括系统应用(Launcher、SystemUI、设置)和第三方应用(导航、音乐、视频)。

案例拆解:VHAL在空调控制中的工作流程

假设用户通过中控屏调节空调温度,整个链路如下:

1. 用户点击温度+按钮
2. 应用层调用 CarPropertyManager.setProperty(
       VehiclePropertyIds.HVAC_TEMPERATURE_SET, 
       zoneId, value)
3. CarService接收请求,校验权限
4. CarService调用 VHAL 的 setProperty() 接口
5. VHAL将属性值转换为CAN信号(如0x1A2字节3)
6. CAN总线将信号发送至空调控制器(HVAC ECU)
7. HVAC ECU执行压缩机/风门动作
8. 状态回传:HVAC ECU通过CAN返回当前温度
9. VHAL上报属性变化,CarService广播回调
10. 应用层刷新UI显示

这个流程体现了分层架构的价值:应用层和HAL层完全解耦,即使更换空调硬件供应商,只要VHAL接口不变,应用代码无需修改。

风险提示:VHAL属性定义必须遵循Google的Vehicle HAL规范(如属性ID、数据类型、权限级别)。如果OEM自定义属性未正确注册,可能导致CarService崩溃或安全漏洞。建议在开发初期就建立属性清单评审机制。

2.3 IVI与Cluster概念解析

核心原理

IVI(In-Vehicle Infotainment)即车载信息娱乐系统,通常指中控台的大屏区域,承担导航、媒体、电话、车辆设置、空调控制等非驾驶关键功能。Cluster(仪表盘)则是驾驶员正前方的显示单元,显示车速、转速、油量/电量、警示灯、ADAS状态等驾驶关键信息。两者的核心区别在于安全等级:Cluster信息直接影响驾驶安全,因此对实时性、可靠性、抗干扰能力要求远高于IVI。

在AAOS架构中,IVI和Cluster可以运行在同一SoC的不同显示输出上,也可以由独立SoC驱动。前者称为单芯片多屏方案(如高通8155驱动IVI+Cluster),后者称为多芯片方案(如英伟达Orin驱动Cluster,高通8295驱动IVI)。

IVI与Cluster的显示特性对比

维度 IVI(中控) Cluster(仪表)
安全等级 ASIL-A(非安全关键) ASIL-B/C(安全关键)
刷新率要求 30-60fps 60fps以上,需低延迟
显示内容 导航、媒体、设置、应用 车速、转速、警示灯、ADAS
交互方式 触摸、旋钮、语音 方向盘按键、语音(少触摸)
操作系统 AAOS(Android) AAOS或QNX/RTOS
故障容忍度 可重启,允许短暂黑屏 不允许黑屏,需冗余设计

实战场景:单芯片双屏显示的实现要点

以高通8155为例,它支持3个Display Pipe,可同时驱动IVI(1080p)和Cluster(720p或1080p)。在AAOS中,通过VirtualDisplay或Multi-Display API实现双屏独立渲染。关键配置包括:

// 在device_config.xml中定义双屏
<display id="0" type="primary" width="1920" height="1080"/>
<display id="1" type="cluster" width="1280" height="480"/>

// 在SystemUI中为Cluster创建独立窗口
WindowManager.LayoutParams clusterParams = new WindowManager.LayoutParams(
    WindowManager.LayoutParams.MATCH_PARENT,
    WindowManager.LayoutParams.MATCH_PARENT,
    WindowManager.LayoutParams.TYPE_CLUSTER_ALERT,
    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
    PixelFormat.RGBA_8888);

实际开发中,Cluster应用通常使用SurfaceView或TextureView进行渲染,并采用硬件合成器(HWC)将Cluster图层直接合成到对应Display接口,避免经过GPU合成带来的延迟。

案例复盘:某车型在开发Cluster时,最初使用AAOS标准SurfaceFlinger合成,导致车速数字在急加速时出现轻微拖影。分析发现是SurfaceFlinger的合成帧率与Cluster刷新率(60Hz)不匹配。解决方案:为Cluster单独分配一个Display Pipe,并设置独立VSync信号,同时将Cluster应用标记为FLAG_HARDWARE_ACCELERATED且使用setFrameRate(60)强制帧率。修改后拖影消失,车速显示延迟从120ms降至40ms。

2.4 常见误区与总结复盘

误区一:将Android Auto当作AAOS的简化版

这是最普遍的认知错误。Android Auto是手机投屏,车机端没有运行任何Android应用;AAOS是完整的车载操作系统。如果产品需求是“车机必须支持CarPlay和Android Auto”,那么车机系统可以是AAOS,也可以是非Android系统(如QNX),因为Android Auto只是协议。

误区二:Cluster必须使用实时操作系统(RTOS)

虽然传统Cluster使用QNX或GreenHills,但现代AAOS通过Trusty TEE、安全启动、分区隔离等技术,已经可以满足ASIL-B要求。关键在于将Cluster应用放入独立的安全域(如Android的isolatedProcess),并限制其访问网络和外部存储。

误区三:IVI和Cluster必须使用同一套HMI框架

实际上,IVI可以使用AAOS的Jetpack Compose或CarUI,而Cluster为了性能和安全,往往使用更轻量的渲染方案(如Qt for MCU或自研OpenGL渲染器)。两者可以共存于同一SoC,但需要明确资源分配和优先级。

总结复盘

  • AAOS与Android Auto是“操作系统”与“投屏协议”的关系,开发模式完全不同。
  • 车载系统分层架构的核心是VHAL,它实现了车辆硬件与上层应用的解耦。
  • IVI与Cluster的安全等级差异决定了技术选型:IVI追求功能丰富,Cluster追求实时可靠。
  • 单芯片多屏方案是当前主流,但需要精细管理Display Pipe、VSync和内存带宽。
  • 在HMI设计时,必须考虑Cluster的驾驶安全约束(如最小字体高度、对比度、闪烁频率限制)。
学习建议:建议读者在AOSP源码中查看packages/services/Car目录下的CarService实现,以及hardware/interfaces/automotive/vehicle中的VHAL定义。动手编译一个AAOS模拟器镜像,通过adb shell dumpsys car_service观察车辆属性变化,是理解本章概念最有效的方式。