基于Bazel为Pixel 9a创建自定义内核编译目标以指定配置参数
解决Pixel 9a(tegu)自定义内核配置+Boot.img编译问题(Bazel)
核心思路
绕开预构建GKI依赖,直接基于自定义编译的内核Image、平台DTB,搭配官方ramdisk生成可刷入的boot.img。
步骤1:生成tegu平台专属DTB文件
无需单独寻找预构建dtb.img,可通过Bazel编译内核时同步生成:
- 在
kernel_build目标中添加dtb = True参数,编译时会自动生成对应平台的DTB文件,路径为bazel-out/aarch64-fastbuild/bin/arch/arm64/boot/dts/google/tegu.dtb
步骤2:创建独立的自定义内核编译目标
在BUILD.bazel中新增不依赖预构建GKI的目标,替代默认的kernel_images:
# 自定义内核编译目标:带16KB分页、KUNIT等配置 kernel_build( name = "kernel_tegu_custom", srcs = glob(["**"]), arch = "arm64", defconfig = "arch/arm64/configs/gki_defconfig", defconfig_fragments = [ "path/to/your/custom_config.fragment", # 存放自定义配置的片段文件 ], dtb = True, # 开启DTB编译 extra_cflags = ["-DANDROID_GKI"], ) # 生成可刷入的boot.img kernel_images( name = "boot_img_tegu_custom", arch = "arm64", kernel = ":kernel_tegu_custom", dtb = ":kernel_tegu_custom.dtb", # 指定编译生成的DTB ramdisk = "@aosp_ramdisk_tegu//:ramdisk.img", # 使用适配tegu的官方ramdisk cmdline = "console=ttyMSM0,115200n8 androidboot.hardware=tegu androidboot.console=ttyMSM0", base_address = "0x00000000", page_size = "16384", # 开启16KB分页后需设置为16384,默认4096 )
步骤3:编写自定义配置片段
创建custom_config.fragment文件,添加需要开启的配置项:
CONFIG_ARM64_16K_PAGES=y CONFIG_KUNIT=y CONFIG_KUNIT_TEST=y # 其他你需要的条件编译选项
步骤4:编译并刷入设备
执行编译命令:
bazel build //:boot_img_tegu_custom --config=fastbuild
编译完成后,boot.img路径为bazel-out/aarch64-fastbuild/bin/boot_img_tegu_custom.img,用fastboot刷入:
fastboot flash boot bazel-out/aarch64-fastbuild/bin/boot_img_tegu_custom.img
关键注意事项
- 确保
@aosp_ramdisk_tegu//:ramdisk.img是适配Pixel 9a的官方ramdisk,可从对应版本AOSP源码中提取 - 若未开启16KB分页,
page_size需改回4096,否则设备无法正常启动 - 遇到依赖问题时,可通过
bazel query查看目标依赖链,逐步排查
内容的提问来源于stack exchange,提问作者samallen985
相关产品推荐
相关产品推荐

