Skip to main content
独立(standalone)工作流让您无需构建完整的 Yocto 镜像即可编译、测试和部署内核更改。 所有必需的交叉编译和镜像打包工具都捆绑在 kmake-image Docker 容器中。

限制和注意事项

独立工作流仅构建和打包内核及模块。它不会生成根文件系统。若要构建或修改 依赖完整 Yocto BSP 的树外(out-of-tree)内核模块,请改用基于 Yocto 的 工作流。
  • 工具链:kmake-image Docker 镜像提供 aarch64 交叉工具链、 systemd ukify 以及镜像打包脚本。无需在主机上安装工具链。
  • DTB 打包:独立构建时,您必须使用来自 qcom-dtb-metadata 仓库的 静态 ITS 配置手动打包 DTB。Yocto 构建通过 meta-qcom 自动处理此步骤。
  • 源码修订版本:要匹配发布构建中使用的确切源码,请检查 meta-qcom/recipes-kernel/linux/linux-qcom_6.18.bb 中的 SRCREV 字段。

获取内核源码

直接克隆内核仓库:
表:内核分支

设置 Docker 工具链

克隆并构建 kmake-image 容器:
为方便起见,设置 shell 别名。将以下内容添加到您的 shell 配置文件中, 以便在多个会话间保持有效:

收集构建工件

创建一个 artifacts/ 目录,用于存放组装最终镜像所需的 ramdisk、启动 二进制文件和 DTB 元数据:
获取 initramfs ramdisk
获取 systemd-boot 二进制文件
获取 DTB 元数据 独立构建时,必须使用静态 ITS 配置手动打包 DTB。克隆 qcom-dtb-metadata 仓库以获取所需的 qcom-metadata.dts 和 qcom-next-fitimage.its 文件:

构建内核和模块

使用标准的 Qualcomm® 配置片段来配置并构建内核,然后将模块 安装到暂存目录中:
将构建好的内核模块(DLKM)打包进 ramdisk:

打包启动镜像

生成 efi.bin(ESP 分区) efi.bin 镜像包含 systemd-boot、内核(打包为 UKI type-2 镜像)以及 initramfs:
生成 dtb.bin(DTB 分区) 为所有支持设备树的目标构建基于 FIT 的 dtb.bin:
efi.bin 和 dtb.bin 都会被放置在 images/ 目录中,可直接烧写。

内核镜像构建脚本

上述构建和打包步骤已封装在 Docker 自带的 build.sh 脚本中,可自动 构建可启动的内核镜像并打包为 efi.bin、dtb.bin 和 boot.img。 要使用这个替代的 build.sh 脚本,请运行以下命令:
  • —dtb 参数是必需的。它指定要打包进内核镜像的设备树 Blob(Device Tree Blob)。 上述命令以 qcs6490-rb3gen2.dtb 为例。
  • 初始化 CMDLINE 以设置您的内核 cmdline 参数,否则将使用通用默认值。

烧写和启动

将设备置于 fastboot 模式,然后烧写两个镜像:
设备重启后,请按照 安装和启动内核 中所述验证正在运行的内核版本。