| <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> |