blob: 4a41cc8ec9b2c82c4c9333a93ed0aaa9c4af2e9b [file] [log] [blame]
<html devsite><head>
<title>目录、规则和 sepolicy</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.
-->
<p>本页面将介绍运行 Android 8.0 或更高版本系统的设备的目录布局,以及 VNDK 规则和关联的 sepolicy。</p>
<h2 id="directory">目录布局</h2>
<p><em></em>退化目录布局由以下目录组成:</p>
<ul>
<li><code>/system/lib[64]</code> 包含所有框架共享库,具体包括 LL-NDK、VNDK 和框架专用库(包括 LL-NDK-Private 和一些与 VNDK-SP 中的库同名的库)。</li>
<li><code>/system/lib[64]/vndk-sp</code> 包含适用于 Same-Process HAL 的 VNDK-SP 库。</li>
<li><code>/vendor/lib[64]</code> 包含扩展后的 VNDK 库(DXUA 或 DXUX VNDK 库)、Same-Process HAL 实现和其他供应商共享库。</li>
<li><code>/vendor/lib[64]/vndk-sp</code> 可能会包含 VNDK-SP 库所使用的其他库。</li>
</ul>
<p>供应商模块从 <code>/system/lib[64]</code> 中加载 VNDK 库。</p>
<h2 id="rules">VNDK 规则</h2>
<p>本部分提供了完整的 VNDK 规则列表。</p>
<ul>
<li>框架进程不得从供应商分区加载非 SP-HAL 共享库(Android O 中并未严格地强制实施此规则,但未来版本中会这么做)。
</li>
<li>供应商进程不得从系统分区加载非 LL-NDK 库、非 VNDK-SP 库和非 VNDK 库(Android O 中并未严格地强制实施此规则,但未来版本中会这么做)。</li>
<aside class="note"><strong>注意</strong>:要想从未来版本(比 Android 8.0 更高的版本)仅针对框架的 OTA 中受益,就不得在搭载 Android 8.0 出厂的设备中违反此规则。</aside>
<li>已安装的 VNDK 库必须是由 Google 定义的合格 VNDK 库的子集。</li>
<li>SP-HAL 和 SP-HAL-Dep 的外部依赖项必须仅限于 LL-NDK 库或由 Google 定义的 VNDK-SP 库。
<ul>
<li>SP-HAL 共享库的依赖项必须仅限于 LL-NDK 库、由 Google 定义的 VNDK-SP 库、其他 SP-HAL 库和/或可标记为 SP-HAL-Dep 库的其他供应商共享库。</li>
<li>只有当供应商共享库不是 AOSP 库,且其依赖项仅限于 LL-NDK 库、由 Google 定义的 VNDK-SP 库、SP-HAL 库和/或其他 SP-HAL-Dep 库时,才可标记为 SP-HAL-Dep 库。</li>
</ul>
</li>
<li>VNDK-SP 必须保持独立。在 Android 8.0 中,系统以一种特殊方式处理 <code>libRS_internal.so</code>,但在未来版本中,其处理方式会被重新考虑。</li>
<li>不得通过非 HIDL 接口(包括但不限于 Binder、套接字、共享内存、文件等)进行框架-供应商通信。</li>
<li>系统分区必须足够大,以便容纳所有符合条件的 VNDK 库的两个副本,以及不符合条件的框架共享库的一个副本。</li>
</ul>
<h2 id="sepolicy">sepolicy</h2>
<p>本部分中介绍的框架进程对应于 sepolicy 中的 <code>coredomain</code>,而供应商进程对应于 <code>non-coredomain</code>。例如,<code>/dev/binder</code> 只能在 <code>coredomain</code> 中被访问,而 <code>/dev/vndbinder</code> 只能在非 <code>coredomain</code> 中被访问。</p>
<p>类似政策会限制对系统分区和供应商分区上的共享库的访问。下表列出了访问不同类别的共享库时所需的权限:</p>
<table>
<tbody><tr>
<th style="width:35%">类别</th>
<th>分区</th>
<th>是否可从<br /> coredomain 访问</th>
<th>是否可从<br />非 coredomain 访问</th>
</tr>
<tr>
<td>LL-NDK</td>
<td>系统</td>
<td></td>
<td></td>
</tr>
<tr>
<td>LL-NDK-Private</td>
<td>系统</td>
<td></td>
<td></td>
</tr>
<tr>
<td>VNDK-SP/VNDK-SP-Private</td>
<td>系统</td>
<td></td>
<td></td>
</tr>
<tr>
<td>VNDK-SP-Ext</td>
<td>供应商</td>
<td></td>
<td></td>
</tr>
<tr>
<td>VNDK</td>
<td>系统</td>
<td></td>
<td></td>
</tr>
<tr>
<td>VNDK-Ext</td>
<td>供应商</td>
<td></td>
<td></td>
</tr>
<tr>
<td>FWK-ONLY</td>
<td>系统</td>
<td></td>
<td></td>
</tr>
<tr>
<td>FWK-ONLY-RS</td>
<td>系统</td>
<td></td>
<td></td>
</tr>
<tr>
<td>SP-HAL</td>
<td>供应商</td>
<td></td>
<td></td>
</tr>
<tr>
<td>SP-HAL-Dep</td>
<td>供应商</td>
<td></td>
<td></td>
</tr>
<tr>
<td>VND-ONLY</td>
<td>供应商</td>
<td></td>
<td></td>
</tr>
</tbody></table>
<p>LL-NDK-Private 和 VNDK-SP-Private 必须从这两个域中都可访问,因为非 <code>coredomain</code> 会间接访问这些库。同样,SP-HAL-Dep 必须可从 <code>coredomain</code> 访问,因为 SP-HAL 依赖该域。</p>
</body></html>