我正试图将Android 11移植到我的板(odroid-n2)上,我对如何构建特定于板的内核模块和ramdisk感到困惑。能帮我个忙吗?
最近,为了解决内核碎片问题,AOSP似乎正在将内核分成两个不同的块。
(1) GKI(通用核图像)
(2)供应商专用核
对于GKI,我想我可以使用来自ci.android.com的图像。
对于供应商特定部分(与vendor_boot分区相关),
*)对于android文档,我指的是以下内容。
https://source.android.com/setup/build/building-kernels https://source.android.com/devices/architecture/kernel/generic-kernel-image
发布于 2021-04-21 10:01:30
实际上,使用GKI (),通用部件和供应商部件是分开的。到目前为止,这种区别是非常清楚的:vmlinux
是GKI,任何模块(*.ko
)都是供应商。如果GKI模块显示出有用的话,这种情况在将来可能会发生变化。然后可能出现GKI (Kernel+Modules) +供应商模块。
整个构建过程也是非常新的,并且随着Android内核的开发方式发生了根本性的变化,这一过程仍在不断发展。历史上,设备内核和模块是在一个逻辑步骤中构建的,并且通过组合构建确保了兼容性。现在,我们正在转向这样一个世界:我们可以干净地构建内核和模块,完全分开,不存在重叠。将来构建供应商模块可能会变得容易得多,而不必同时构建太多的GKI内核。然而,按照当前的构建方式,设置起来就更容易了。
Android11 介绍的概念是“遵从”基于GKI的内核。这意味着附带的内核与GKI内核兼容ABI。从理论上讲,这意味着您可以真正地交换您拥有的内核,并将其替换为来自ci.android.com的构建。注意,兼容内核可以具有GKI没有的重要(ABI兼容)补丁。因此,虽然兼容,但可能不会带来相同的体验。
安卓12的使设备将与包含GKI内核的签名引导映像一起启动。自Kernel<>Module ABI of those kernels is kept stable以来,这还允许对GKI内核和供应商模块进行独立更新。
当您提到db845c构建配置时,是的,这看起来有点混乱。这是一个完整的配置,构建确实会产生一个(ABI兼容的!)内核和厂商特定的模块。可以将该片段视为gki_defconfig
的修补程序,因为它不会更改核心内核,而是启用所需的模块。在最后一个版本中,来自此构建的内核映像将被GKI内核映像替换。但是对于开发来说,这个构建所产生的内核是完全可以使用的。
在实践中,它帮助下游项目同时开发核心内核特性和模块,尽管模块和内核的更改需要进入不同的存储库(db845c是一个例外,这里是一个参考板)。
为了回答您关于如何构建db845c内核的问题,ci.android.com还提供了构建日志以及要下载的构件。对于雄激素12-5.10分支和目标kernel_db845c
,可以找到最近构建的这里。build.log
在开始时声明了复制以下内容的指令:
$ BUILD_CONFIG=common/build.config.db845c build/build.sh
这是基于对source.android.com -构建内核的一般说明的相关步骤。
https://stackoverflow.com/questions/65415511
复制相似问题