blob: b68d91265c7d6ce27bb7ee922d060bf201724ba1 [file] [log] [blame]
<html devsite><head>
<title>汽车</title>
<meta name="project_path" value="/_project.yaml"/>
<meta name="book_path" value="/_book.yaml"/>
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<img style="float: right; margin: 0px 15px 15px 15px;" src="../images/ape_fwk_hal_vehicle.png" alt="Android 车载 HAL 图标"/>
<p>借助各种总线拓扑,很多汽车子系统都可以实现互连以及与车载信息娱乐 (IVI) 系统的连接。不同的制造商提供的确切总线类型和协议之间有很大差异(甚至同一品牌的不同车型之间也是如此),例如控制器区域网络 (CAN) 总线、局域互联网络 (LIN) 总线、面向媒体的系统传输 (MOST) 总线以及汽车级以太网和 TCP/IP 网络(如 BroadR-Reach)。
</p>
<p>Android Automotive 的硬件抽象层 (HAL) 为 Android 框架提供了一致的接口(无需考虑物理传输层)。此车载 HAL 是开发 Android Automotive 实现的接口。</p>
<p>系统集成商可以将特定于功能的平台 HAL 接口(如 HVAC)与特定于技术的网络接口(如 CAN 总线)连接,以实现车载 HAL 模块。典型的实现可能包括运行专有实时操作系统 (RTOS) 的专用微控制器单元 (MCU),以用于 CAN 总线访问或类似操作,该微控制器单元可通过串行链路连接到运行 Android Automotive 的 CPU。除了专用的 MCU,还可以将总线访问作为虚拟 CPU 来实现。只要实现符合车载 HAL 的接口要求,每个合作伙伴都可以选择适合硬件的架构。</p>
<h2 id="arch">架构</h2>
<p>车载 HAL 是汽车与车辆网络服务之间的接口定义:</p>
<img src="../images/vehicle_hal_arch.png" alt="Android 车载 HAL 架构"/>
<p class="img-caption"><strong>图 1</strong>. 车载 HAL 与 Android Automotive 架构</p>
<ul>
<li><strong>Car API</strong>:包含 CarHvacManager 和 CarSensorManager 等 API。如需详细了解受支持的 API,请参阅 <code>/platform/packages/services/Car/car-lib</code></li>
<li><strong>CarService</strong>:位于 <code>/platform/packages/services/Car/</code></li>
<li><strong>VehicleNetworkService</strong>:通过内置安全机制控制车载 HAL。仅限访问系统组件(第三方应用等非系统组件需使用 Car API)。原始设备制造商 (OEM) 可以通过 <code>vns_policy.xml</code><code>vendor_vns_policy.xml</code> 控制访问权限。位于 <code>/platform/packages/services/Car/vehicle_network_service/</code>;要查看用于访问车辆网络的库,请参阅 <code>/platform/packages/services/Car/libvehiclenetwork/</code></li>
<li><strong>车载 HAL</strong>:定义 OEM 可以实现的车辆属性的接口。包含属性元数据(例如,车辆属性是否为 int 以及允许使用哪些更改模式)。位于 <code>hardware/libhardware/include/hardware/vehicle.h</code>。要了解基本参考实现的相关信息,请参阅 <code>hardware/libhardware/modules/vehicle/</code></li>
</ul>
<p>有关更多详情,请参阅<a href="/devices/automotive/properties.html">车辆属性</a>
</p><h2 id="security">安全性</h2>
<p>车载 HAL 支持 3 个级别的数据访问安全性:</p>
<ul>
<li>仅限系统(由 <code>vns_policy.xml</code> 控制)</li>
<li>允许拥有权限的应用访问(通过汽车服务)</li>
<li>无需任何权限即可访问(通过汽车服务)</li>
</ul>
<p>仅允许部分系统组件直接访问车辆属性,而车辆网络服务是把关程序。大多数应用需通过汽车服务的额外把关(例如,只有系统应用可以控制 HVAC,因为这需要仅授予系统应用的系统权限)。</p>
<h2 id="validation">验证</h2>
<p>AOSP 包含开发过程中使用的以下测试资源:</p>
<ul>
<li><code>hardware/libhardware/tests/vehicle/vehicle-hal-tool.c</code><br />
加载车载 HAL 并执行简单操作的命令行原生工具。它有助于系统在开发的早期阶段启动并运行。</li>
<li><code>packages/services/Car/tests/carservice_test/</code><br />包含使用模拟车载 HAL 属性进行的汽车服务测试。每个属性的预期行为都会在测试中实现,这是了解预期行为的绝佳起点。</li>
<li><code>hardware/libhardware/modules/vehicle/</code><br />基本参考实现。</li>
</ul>
</body></html>