blob: ea17b20e03def3830f33788345618945d4c5dd8a [file] [log] [blame]
<html devsite><head>
<title>Android 通用内核</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><a href="https://android.googlesource.com/kernel/common/" class="external">AOSP 通用内核</a>是长期支持 (LTS) 内核的下游,包含与 Android 社区相关但尚未合并到 LTS 的补丁程序。这些补丁程序可能包括:</p>
<ul>
<li>针对 Android 需求定制的功能(例如交互式 <code>cpufreq</code> 调节器)。</li>
<li>由于实现方面的问题而被上游拒绝的功能(例如 MTP/PTP、Paranoid Networking)。</li>
<li>可供 Android 设备使用但仍处于开发上游阶段的功能(例如 Energy Aware Scheduling/EAS)。</li>
<li>对其他方有用的供应商/OEM 功能(例如 <code>sdcardfs</code>)。
</li>
</ul>
<h2 id="list-of-kernels">通用内核列表</h2>
<p>要查看 Android 通用内核列表,请访问 <a href="https://android.googlesource.com/kernel/common/" class="external">https://android.googlesource.com/kernel/common/</a>(如下所示)。</p>
<p><img src="../images/android-diffs.png"/></p>
<p class="img-caption"><strong>图 1. </strong> Android 通用内核列表</p>
<h3 id="differences-lts">与 LTS 的区别</h3>
<p>与 LTS (4.14.0) 相比,Android 通用内核更改了 355 行,插入了 32266 行,并删除了 1546 行(截至 2018 年 2 月)。</p>
<p><img src="../images/kernel_lts_diff.png"/></p>
<p class="img-caption"><strong>图 2. </strong> 各个版本的 Android 特定代码</p>
<p>最大的特性包括:</p>
<ul>
<li>19.8% Energy Aware Scheduling (kernel/sched)</li>
<li>13.8% 网络 (net/netfilter)</li>
<li>13.5% Sdcardfs (fs/sdcardfs)</li>
<li>9.4% USB (drivers/usb)</li>
<li>7.2% SoC (arch/arm64, arch/x86)</li>
<li>6.2% f2fs(fs/f2fs - 从上游向后移植)</li>
<li>6.1% 输入 (drivers/input/misc)</li>
<li>5.4% FIQ 调试程序 (drivers/staging/android/fiq_debugger)</li>
<li>3.6% Goldfish 模拟器 (drivers/platform/goldfish)</li>
<li>3.4% Verity (drivers/md)</li>
<li>11.6% 其他</li>
</ul>
<h2 id="requirements">要求</h2>
<p>所有 AOSP 通用内核必须提供以下各项:</p>
<ul>
<li>用于下游合作伙伴及时获取最新更新(包括所有 LTS 补丁程序)的方法。</li>
<li>用于确保新功能开发不会影响从 AOSP 通用内核合并的机制(即使之前的 Android 版本也不受影响)。</li>
<li>用于下游合作伙伴轻松识别属于 <a href="/security/bulletin/">Android 安全公告 (ASB)</a> 范围内的安全补丁程序的方法。如果 OEM 尝试包含公告中未列出的补丁程序,则满足运营商有关全面重新认证的要求。</li>
</ul>
<p>此外,必须在 AOSP 通用内核上定期执行测试,并且在分支通过测试时对其进行标记。</p>
<h3 id="lts-merges">LTS 合并</h3>
<p>为确保下游合作伙伴能够及时获取最新更新(包括所有 LTS 补丁程序),android-<var>X</var>.<var>Y</var> 将从 LTS 获取定期合并,并通过自动 VTS、CTS 和编译/启动测试进行验证。</p>
<h3 id="android-dessert-branches">Android-dessert 版本分支</h3>
<p>为确保新功能开发不会影响从 AOSP 通用内核合并(即使之前的 Android 版本也不受影响),android-<var>X</var>.<var>Y</var>-<var>androidRel</var> 是从 Android-dessert 最初版本之前的 android-<var>X</var>.<var>Y</var> 克隆的,它会从 LTS 获取定期合并,并基于相关的 Android 版本进行测试。例如,android-4.4-n 分支从 LTS 4.4.y 分支获取合并。</p>
<h3 id="android-release-branches">Android-release 版本分支</h3>
<p>为确保下游合作伙伴能够轻松识别属于 ASB 范围内的安全补丁程序,android-<var>X</var>.<var>Y</var>-<var>androidRel</var>-<var>type</var> 是从 Android 版本发布时的 android-<var>X</var>.<var>Y</var>-<var>androidRel</var> 克隆的,并且只能获取公告中列出的补丁程序。</p>
<p>在确认与公告相关的补丁程序合并到版本分支之后,相应分支将用 ASB 级别进行标记。例如,标记 <strong>ASB-2017-10-05</strong> 表示相应版本分支包含 2017 年 10 月 5 日发布的 Android 安全公告中的补丁程序。父分支包含这些安全补丁程序,因此,如果 android-4.4-o-release 分支标记为 <strong>ASB-2017-10-01</strong>,则 android-4.4-o 和 android-4.4 也是用相应公告中的补丁程序进行更新的最新版本。例如:</p>
<ul>
<li>在发布 Android N MR1 之前,<strong>android-4.4-n-mr1</strong> 是从 <strong>android-4.4-n</strong> 克隆的。</li>
<li>只有 ASB 中列出的补丁程序才会进行合并,允许 OEM(运营商对其有严格的要求,旨在避免对安全更新进行全面重新认证)查找公告中列出的补丁程序。</li>
<li><strong>android-4.4-n-mr2</strong> 将由 <strong>android-4.4-n-mr1</strong> 以及这两个版本之间合并的 LTS 补丁程序构成。</li>
<li>每个月 ASB 公开发布时,相应版本分支都会使用公告中提及的所有上游补丁程序进行更新(公告中提及的设备特定补丁程序不会应用于通用内核)。</li>
</ul>
<h3 id="regular-testing">定期测试</h3>
<p>所有 AOSP 通用内核都会定期接受测试,并且测试结果将公开发布。具体而言:</p>
<ul>
<li>在 LTS 更新或其他补丁程序合并之后,将会运行 VTS 以及一部分 CTS,相关结果将在 <a href="https://qa-reports.linaro.org/lkft" class="external">https://qa-reports.linaro.org/lkft</a> 上公布。</li>
<li>为持续测试各种架构和版本中的编译/启动中断,将会运行 <code>kernelci</code>,相关结果将在 <a href="https://kernelci.org/job/android/" class="external">https://kernelci.org/job/android</a> 上公布。
</li>
</ul>
<h3 id="branch-hierarchy">分支层次结构 (android-4.4)</h3>
<p>android-4.4 内核的分支层次结构使用了以下结构:</p>
<p><img src="../images/kernel_branch_hierarchy_44.png"/></p>
<p class="img-caption"><strong>图 3.</strong> android-4.4 内核的分支层次结构。</p>
<h2 id="guidelines">准则</h2>
<p>Android 实现应使用以下内核准则:</p>
<ul>
<li>将新的 AOSP 通用内核用作上游合并源。<ul>
<li>要从 LTS 获取补丁程序,需从 android-<var>X</var>.<var>Y</var> 合并。<ul>
<li>在开发阶段定期合并。</li>
<li>将设备更新至新的 Android 版本时,需从 android-<var>X</var>.<var>Y</var> 分支或目标版本的版本分支合并(例如,要更新至 Nougat MR2,需从 android-4.4-n-mr2 分支合并)。</li>
</ul>
</li><li>如果运营商对安全更新补丁程序有限制,则需从版本分支合并,以便进行安全更新。</li>
</ul>
</li><li>将修复程序发送至上游主线内核、LTS 内核或 AOSP 通用内核。</li>
</ul>
</body></html>