2025年libxml2编译(libpng编译)

libxml2编译(libpng编译)本页详细介绍了为 Android 设备构建自定义内核的流程 以下说明会逐步指导您如何选择正确的源代码 构建内核 以及将结果嵌入到根据 Android 开源项目 AOSP 构建的系统映像中 您可以使用 Repo 获取最新的内核源代码 通过在源代码检出的根目录下运行 可构建这些内核源代码 而无需更多配置 对于最新的内核 可以使用 下载源代码 工具链和构建脚本 一些内核 例如 Pixel

大家好,我是讯享网,很高兴认识大家。



本页详细介绍了为 Android 设备构建自定义内核的流程。以下说明会逐步指导您如何选择正确的源代码,构建内核,以及将结果嵌入到根据 Android 开源项目 (AOSP) 构建的系统映像中。

您可以使用 Repo 获取最新的内核源代码;通过在源代码检出的根目录下运行 可构建这些内核源代码,而无需更多配置。

对于最新的内核,可以使用 下载源代码、工具链和构建脚本。一些内核(例如 Pixel 3 内核)需要从多个 git 仓库获取源代码,而其他内核(如通用内核)只需要一份源代码。使用 方法可确保源目录设置正确。

下载相应分支的源代码:

如需查看可与之前的“repo init”命令搭配使用的 repo 分支 (BRANCH) 列表,请参阅内核分支及其构建系统。

如需详细了解如何为 Pixel 设备下载和编译内核,请参阅构建 Pixel 内核。

Android 13 引入了使用 Bazel 构建内核的功能。

如需为 aarch64 架构构建 GKI 内核,请查看不低于 Android 13 的 Android 通用内核分支,然后运行以下命令:

如需创建分发版本,请运行以下命令:

之后,内核二进制文件、模块和相应的映像会置于 目录中。如果未指定 ,请参阅该命令的输出以了解工件的位置。如需了解详情,请参阅 AOSP 文档。

对于 Android 12 或更低版本的分支,或者不使用 Kleaf 的分支:

内核二进制文件、模块和相应的映像位于 目录下。

Android 13 引入了使用 Bazel (Kleaf) 构建内核的功能,以取代 。

如需构建 的模块,请运行以下命令:

如需创建分发版本,请运行以下命令:

如需详细了解如何使用 Bazel 构建 Android 内核,请参阅:Kleaf - 使用 Bazel 构建 Android 内核。

如需详细了解对各个架构的 Kleaf 支持,请参阅对设备和内核的 Kleaf 支持。

在 Android 12 中,Cuttlefish 和 Goldfish 融合,因此它们共享同一个内核:。如需构建该内核的模块,请使用以下 build 配置:

Android 11 引入了 GKI,用于将内核拆分为由 Google 维护的内核映像和由供应商维护的模块,二者分别单独构建。

以下示例展示了内核映像配置:

以下示例展示了模块配置(Cuttlefish 和模拟器):

您可以通过多种方式运行以自定义方式构建的内核。下面介绍了几种适合各种开发场景的已知方法。

将 复制到 AOSP 树中相应的内核二进制文件位置,然后重新构建启动映像。

或者,您也可以在使用 (或用于构建启动映像的任何其他 命令行)时定义 变量。所有设备均支持该变量,因为它是通过 进行设置的。例如:

最新的设备具有引导加载程序扩展,可以简化生成和启动启动映像的过程。

要启动内核而不刷新,请运行以下命令:

使用此方法时,内核实际上并未刷新,因此不会在重新启动时保留。

您可以在 Cuttlefish 设备上以所选的架构运行内核。

如需启动包含一组特定内核工件的 Cuttlefish 设备,请使用目标内核工件作为参数运行 命令。以下示例命令使用 内核清单中的 arm64 目标的内核工件。


讯享网

如需了解详情,请参阅在 Cuttlefish 上开发内核。

如需为 Kleaf build 自定义内核 build,请参阅 Kleaf 文档。

对于 ,构建流程和结果可能会受环境变量的影响。它们中的大多数是可选的,并且每个内核分支都应该具有适当的默认配置。此处列出了最常用的变量。如需完整(且最新)的列表,请参阅 。

 <tbody><tr> <th width="20%">环境变量</th> <th width="40%">说明</th> <th width="40%">示例</th> </tr> <tr> <td></td> <td>用于初始化构建环境的 build 配置文件。必须相对于 Repo 根目录定义其具体位置。默认为 。<br /> <b>必须为通用内核指定此变量。</b></td> <td></td> </tr> <tr> <td></td> <td>替换要使用的编译器。回退至 定义的默认编译器。</td> <td></td> </tr> <tr> <td></td> <td>内核分发版本的基本输出目录。</td> <td></td> </tr> <tr> <td></td> <td>内核 build 的基本输出目录。</td> <td></td> </tr> <tr> <td></td> <td>跳过 </td> <td></td> </tr> <tr> <td></td> <td>跳过 </td> <td></td> </tr> 

讯享网

在 Android 14 及更高版本中,您或许可使用 defconfig fragment 自定义内核配置。请参阅关于 defconfig fragment 的 Kleaf 文档。

在 Android 13 及更低版本中,请参阅以下内容。

如果您需要定期切换内核配置选项(例如在开发某项功能时),或者需要设置一个用于开发的选项,可以通过维护 build 配置的本地修改或副本来实现这种灵活性。

POST_DEFCONFIG_CMDS 变量设为一个在常规 步骤完成后立即接受评估的语句。由于 文件源于构建环境,因此 中定义的函数可以作为 post-defconfig 命令的一部分进行调用。

一个常见示例是在开发期间针对 crosshatch 内核停用链接时优化 (LTO)。虽然 LTO 对已发布的内核有益,但构建时产生的开销可能巨大。添加到本地 的以下代码段将在使用 时永久停用 LTO。

您可以通过以下两个来源确定要构建的正确版本:AOSP 树和系统映像。

AOSP 树包含预构建的内核版本。git 日志会在提交消息中显示正确的版本:

如果内核版本未在 git 日志中列出,请从系统映像中获取,如下所述。

如需确定系统映像中使用的内核版本,请对内核文件运行以下命令:

对于 文件,请运行以下命令:

可以使用内核构建环境构建启动映像。

对于具有 分区的设备,启动映像会与内核一起构建。 映像未嵌入到启动映像中。

例如,使用 Kleaf,您或许可使用以下代码构建 GKI 启动映像:

借助 (旧版),您或许可使用以下代码构建 GKI 启动映像:

GKI 启动映像位于 $DIST_DIR 中。

对于没有 分区的设备来说,您需要一个 ramdisk 二进制文件,该二进制文件可以通过下载 GKI 启动映像后解压缩来获取。关联的 Android 版本中的任何 GKI 启动映像都可以使用。

目标文件夹是内核树的顶级目录(当前的工作目录)。

如果您使用 AOSP main 进行开发,则可以从 ci.android.com 上的 aosp_arm64 build 中下载 build 工件,并将其用作 ramdisk 二进制文件。

当您拥有 ramdisk 二进制文件并将其复制到内核 build 的根目录中的 时,可以通过执行以下命令来生成启动映像:

讯享网如果您使用的是基于 x86 的架构,请将 替换为 ,将 替换为 :</p> 

该文件位于工件目录 中。

启动映像位于 。


小讯
上一篇 2025-04-16 15:52
下一篇 2025-05-25 09:18

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/156883.html