AOSP Android 10 中的内核配置在哪里?
Where is the kernel config in AOSP Android 10?
我在 kernel/configs/q
中找到了各种内核配置。
当我更改它们时,运行 mm
在 kernel/msm-4.14
中内核不会重建。
我在哪里编辑内核配置,以便在 mm
为 运行 时强制重建内核?
内核首先与Android平台分开构建。然后 Android 平台构建系统指向内核映像所在的位置,使用 TARGET_PREBUILT_KERNEL
环境变量。
以下是我通常如何配置和构建的概述。对于 Android 9 和 10,我已经为不同的供应商这样做了。文档 here 中提到了我使用的方案。 Non-Google 内核通常不附带版本控制 (repo),我不知道你在处理什么,所以我会涵盖两者。
配置内核
对于 repo-checkout 内核,您在 build/build.config
中进行配置。基本上,以 defconfig 为基础后,您使用 ${KERNEL_DIR}/scripts/config
工具更改配置。这通常如下所示:
POST_DEFCONFIG_CMDS="check_defconfig && update_config"
function update_config() {
${KERNEL_DIR}/scripts/config --file ${OUT_DIR}/.config \
-d CONFIG_SOMETHING_I_DISABLE \
-e CONFIG_SOMETHING_I_ENABLE \
--set-val CONFIG_FOO = 123
}
如果您没有 repo-checkout 内核,位置和细节可能会有所不同,但基本思想通常是相同的:Find/Create 启动构建的脚本,并添加调用制作 defconfig
.
后的 config
工具
运行 config
工具本身可以查看完整选项和有关其用法的更多信息,但通常您只需要以上内容。当心:如果您进行 syntactically-correct 无效更改(例如,启用不满足依赖关系的符号),构建系统将不会抱怨并静默忽略这些更改。如果您遇到这种情况,例如使用 menuconfig
找出问题所在,因为它显示了依赖关系。
构建 AOSP/制作 boot.img
构建内核后,您将在 out/.../dist
中得到 Image.lz4
(或 out/.../private/msm-google/arch/arm64/boot
中得到 Image.gz
)。你转到你的 Android 源,除了通常的东西(source build/envsetup.sh
,lunch
)你将构建系统指向你构建的图像,例如export TARGET_PREBUILT_KERNEL=/path/to/Image.lz4
。然后正常启动构建,例如make bootimage
或 m droid
.
请注意,对于 Android 10 至少在某些情况下,您还必须从 out/.../dist
复制内核模块,因为新内核无法加载旧内核。对于这一部分,目前 I am having problems myself。我认为必须将它们复制到 device/VENDOR/DEVICE
(例如 google/coral-kernel
),顺便说一句,您也可以将内核映像复制到那里,因为默认情况下原始预构建的也在那里。问题是至少在我的例子中,新的内核模块毕竟没有复制到设备。
我在 kernel/configs/q
中找到了各种内核配置。
当我更改它们时,运行 mm
在 kernel/msm-4.14
中内核不会重建。
我在哪里编辑内核配置,以便在 mm
为 运行 时强制重建内核?
内核首先与Android平台分开构建。然后 Android 平台构建系统指向内核映像所在的位置,使用 TARGET_PREBUILT_KERNEL
环境变量。
以下是我通常如何配置和构建的概述。对于 Android 9 和 10,我已经为不同的供应商这样做了。文档 here 中提到了我使用的方案。 Non-Google 内核通常不附带版本控制 (repo),我不知道你在处理什么,所以我会涵盖两者。
配置内核
对于 repo-checkout 内核,您在 build/build.config
中进行配置。基本上,以 defconfig 为基础后,您使用 ${KERNEL_DIR}/scripts/config
工具更改配置。这通常如下所示:
POST_DEFCONFIG_CMDS="check_defconfig && update_config"
function update_config() {
${KERNEL_DIR}/scripts/config --file ${OUT_DIR}/.config \
-d CONFIG_SOMETHING_I_DISABLE \
-e CONFIG_SOMETHING_I_ENABLE \
--set-val CONFIG_FOO = 123
}
如果您没有 repo-checkout 内核,位置和细节可能会有所不同,但基本思想通常是相同的:Find/Create 启动构建的脚本,并添加调用制作 defconfig
.
config
工具
运行 config
工具本身可以查看完整选项和有关其用法的更多信息,但通常您只需要以上内容。当心:如果您进行 syntactically-correct 无效更改(例如,启用不满足依赖关系的符号),构建系统将不会抱怨并静默忽略这些更改。如果您遇到这种情况,例如使用 menuconfig
找出问题所在,因为它显示了依赖关系。
构建 AOSP/制作 boot.img
构建内核后,您将在 out/.../dist
中得到 Image.lz4
(或 out/.../private/msm-google/arch/arm64/boot
中得到 Image.gz
)。你转到你的 Android 源,除了通常的东西(source build/envsetup.sh
,lunch
)你将构建系统指向你构建的图像,例如export TARGET_PREBUILT_KERNEL=/path/to/Image.lz4
。然后正常启动构建,例如make bootimage
或 m droid
.
请注意,对于 Android 10 至少在某些情况下,您还必须从 out/.../dist
复制内核模块,因为新内核无法加载旧内核。对于这一部分,目前 I am having problems myself。我认为必须将它们复制到 device/VENDOR/DEVICE
(例如 google/coral-kernel
),顺便说一句,您也可以将内核映像复制到那里,因为默认情况下原始预构建的也在那里。问题是至少在我的例子中,新的内核模块毕竟没有复制到设备。