Android Automotive OS 架构

1,777 阅读9分钟

版权声明

凡未经作者授权,任何媒体、网站及个人不得转载、复制、重制、改动、展示或使用局部或全部的内容或服务。如果已转载,请自行删除。同时,我们保留进一步追究相关行为主体的法律责任的权利。

© 2023 小酥肉不加辣,All rights reserved.

如果你对 Android Automotive OS 还不不熟悉,不知道如何开始开发 Android 车机应用,请阅读我的文章 《如何开始在 Android Automotive OS 上开发应用》

本文主要从技术角度讲述 Android Automotive OS (AAOS)的功能和架构。

概述

为了了解操作系统的各个组成部分,首先对其结构做一个简单的概述。 aaos architecture

从图中可以看到,系统被分为四层:

  • 应用层(Application Framework)

    包括 Google 开发的系统应用(launcher、短信、电话、联系人等),OEM 开发的定制化应用和其他第三方开发的应用。

  • 服务层(Service Layer)

    Java 编写的 API,比如构建 UI、通知、生命周期管理等,应用层可以使用这些 API 构建 Android 应用程序。

  • 硬件抽象层(HAL)

    向服务层提供硬件设备访问 API。

  • 系统层(BSP)

    系统层级硬件驱动、线程管理、内存管理、电源管理等。

其中 Google 在 AOSP 中实现的跟汽车相关的应用或服务称为 Google Automotive Service(GAS),OEM 需要获取授权才能使用这些服务。服务包括:

  • Google 地图和导航:用于从 A 点到 B 点的导航,具有智能地址、路线、加油站和充电站搜索功能。
  • Google 助手:语音个人助理,用于控制各种车辆功能(可扩展)或向用户提供信息。
  • Google 应用商店:提供和管理第三方应用。
  • 设置引导:创建车辆用户资料账户和连接设置。
  • 汽车键盘:适合汽车操作的键盘,用于操作触摸屏并支持多种语言。

如果作为 OEM 或汽车制造商,你不需要整合具有 GAS 的平台版本,那么只需下载开源的 AOSP 源代码,并集成自己的应用程序和服务。例如,计划在中国市场推出搭载 AAOS 的智能汽车,因为无法使用 Google 服务,你需要开发和集成自己的汽车服务和应用。

Frameworks & Libraries

为了在汽车上创建一个人机界面(HMI),操作系统需要提供各种框架和库来开发和集成各种应用,并制定适用于汽车系统和用户场景的规则和限制。

UI Frameworks

SystemUI / CarSystemUI 管理中央屏幕的显示结构和布局。用户可以在必要时对其进行定制,改变界面上的元素和内容(如屏幕顶部的状态栏,主页面底部的导航栏,以及主要页面和 HVAC 控制条)。此外,还可以通过 SystemUI 管理系统主题(颜色、字体和样式)。

Google 将 SystemUI 定义为 "一个持久的进程,为系统提供 UI,但在 system_server 进程之外"。其中继承自 SystemUI 的 SystemUIApplication 定义了一组 UI 相关的服务,比如 SystemBarsPowerUI

Android Automotive 最重要的扩展之一是 DrivingUxRestrictions 框架。它已经被整合到 Google 提供的应用程序中。该框架使用 OEM 指定的配置文件,并防止驾驶人员在某些驾驶情况下的触摸操作,避免因驾驶人员分心而发生的交通事故。当然,OEM 可以扩展和定制这个框架。

Car-lib

除了为实现 HMI UI 框架外,Google 还提供了大量在其他层的功能。在这里重点介绍三个可以大量减少我们开发工作的服务。

  1. CarInfoManager 根据开发策略,OEM 可能希望用一个平台版本管理多个车辆版本。CarInfoManager 可以用来动态地调整 HMI。作为一个代理组件,它提供关于车辆模型、版本和其他相关车辆属性的静态信息。
  2. CarPowerManager 信息娱乐系统及其应用的行为主要取决于车辆的系统状态。基于通用的状态机模型,通过 CarPowerManager 与车辆 HAL 和车辆微控制器单元(VMCU)进行通信。应用可以在特定状态或状态变化时执行特定行为。
  3. CarProjectionManager 有效整合和处理不同的投屏技术是当今信息娱乐系统的一个关键要求。用户应该可以在 Android Auto、Apple CarPlay 或其他镜像技术之间自由选择。通过 CarProjectionManager 开发的应用,可以保证在建立连接、管理智能手机和关闭连接时与系统具有相同的行为。

Android Automotive OS 架构

Android 平台(AOSP)可以大致的分为下图中几个部分,包括:

  • 应用程序框架和应用程序(Application frameworks & applications)
  • Android 汽车系统服务和 Binder IPC
  • 硬件抽象层(HAL)
  • Linux 内核

AOSP architecture

Google 将 AOSP 扩展为

  • 汽车系统应用(Car system applications)
  • 汽车 API(Car API)
  • 汽车服务(Car Services)
  • 汽车硬件抽象层 (Vehicle Hardware Abstraction Layer)

以提供一个全功能的车载信息娱乐操作系统。IVI的源代码分布一般包括

OEM 和第三方应用程序 一系列 Android 应用程序,包括 HMI 和应用程序后台服务。 AOSP 包括所有的系统应用、应用程序框架、系统服务和 HAL 接口。 BSP 包括Linux内核镜像和特定硬件的 HAL 实现。

OEM 可以在现有的源代码的基础上来扩展更多的汽车或非汽车应用和服务,例如平视显示器(HUD)管理、轮胎压力监测、充电程序管理和其他应用,以扩展其信息娱乐系统的功能。

由于在 Project Treble 中进行的架构改变和可用分区的扩展,不仅 HMI 层,而且 Android 框架层、BSP 和硬件都可以在未来被替换。

以下部分概述各层的职责和任务:

  • Application Framework 通常被称为 "HMI 层",应用框架包含了系统和用户的应用程序。我们的建议是,在设计应用程序时,它们只负责显示和小型的计算逻辑,以避免阻塞主线程,并将核心业务逻辑放到服务层的系统服务。这种设计的好处是在未来的更新更容易,且可以为不同的汽车品牌实现不同的人机界面设计。

  • Service Layer 系统服务包含在服务层中,由 SystemServer 启动。它们以系统进程的形式运行,这使它们拥有普通 Android 服务所不具备的额外权限。OEM 厂商可以利用这些服务开发其他应用程序,而不需要编写重复的代码。此外,OEM 也可以将服务作为一个额外的安全层,以避免应用程序和硬件抽象层之间的直接通信。

  • Vehicle HAL VHAL 的作用是向系统服务层公开通用的汽车接口,且接口可扩展、与特定车辆型号无关。这些接口包括

    • 访问&发送车辆 ECU 的信号
    • 访问从车辆 ECU 到 IVI 操作系统产生的信号
    • 访问车辆网络上的面向服务的功能(例如 SOME-IP

上述各层是平台的核心要素,负责应用程序和车辆 ECU 之间的数据交换。下图显示了一个更详细的架构。

architecture

总结

Android 汽车操作系统(AAOS)由 Google 持续开发,并在 android.googlesource.com 上公开提供。除了基本功能、框架和库之外,主要解释了分层架构,并描述了该系统如何被 OEM 扩展。

Android 汽车操作系统(AAOS)是一个很高效的平台。对于连接信息娱乐系统来说,在此平台基础上开发IVI系统,只需要较低的开发、集成和维护成本。此系统可以完全定制和扩展,当然如果修改原始源代码会增加 OEM 的开发和维护工作。不过好处是 Google 会定期发布补丁和升级,增加特性、扩展功能和其他改进。

参考

Android Source Automotive

An Introduction to Android Automotive OS

Android Automotive Embedded OS Whitepaper

名词解释

  • AOSP

Android Open Source Project,一个负责持续发展 Android 操作系统的开源项目。基于此开源项目,全球的开发者可以开发第三方 Android 操作系统来延长和扩展Android 的功能和性能。

  • OEM

Original equipment manufacturer,原始设备制造商或代工生产,又称委托制造。

  • AIDL

Android Interface Definition Language,可以利用 AIDL 定义客户端与服务均认可的编程接口,以便二者使用进程间通信 (IPC) 进行相互通信。

  • HAL

Hardware Abstraction Layer, 硬件抽象层。HAL的目的是为了把 Android framework 与 Linux kernel 隔开,让 Android 不至过度依赖 Linux kernel。

  • HIDL

HAL Interface Definition Language,用于指定 HAL 和其用户之间的接口的一种接口描述语言 (IDL)。从 Android 10 开始,HIDL 已废弃,Android 将在所有位置改用 AIDL。

  • BSP

Board Support Package,板级支持包,用作初始化与执行操作系统并用于评估板 (Evaluation Board) 的简易代码。它通常包含了以基础支持代码来加载操作系统的引导程序(bootloader),以及主板上所有设备的驱动程序。

  • AAOS

Android Automotive OS,是 Google 开发的 Android 系统的一个变体,专门为汽车仪表盘设计而开发。

  • GAS

Google Automotive Service,Google 开发的一系列运行在 AAOS 上的应用和服务。

  • HMI

Human Machine Interface,人机界面是系统和用户之间进行交互和信息交换的相关软件页面。

  • HVAC

Heating, Ventilation, Air Conditioning 暖通空调是暖气、通风、空气调节的简称。

  • VMCU

Vehicle Microcontroller Unit 车辆微控制单元,MCU又称单片机(Single-chip microcomputer),是把CPU、存储器、输入输出接口等集成到一块集成电路芯片上的微型计算机。

  • IPC

Inter-applicaiton Communication 进程间通信。

  • IVI

In-Vehicle Infotainment System 车载信息娱乐系统。

Head-up Display 抬头显示又叫做平视显示系统,是指以车辆驾驶员为中心、盲操作、多功能仪表盘。