type
status
date
slug
summary
tags
category
icon
password
Property
Jan 9, 2023 07:31 AM
获取设备信息
需要的设备信息有:
- 内核版本,如 android12 5.10.101
- 源系统boot的相关信息
需要关注的信息有:
KERNEL_FMT raw 为裸Image,无压缩
开始构建
以 android12 5.10.101 为例子
在 kernel/common 中找到对应 OS_PATCH_LEVEL 的分支的 Makefile 查看其内核版本号是否与自己的内核相同,如果相同,就选择当前分支,如果不同,则向前寻找,直到内核版本号匹配
例子的分支为:android12-5.10-2022-05
同步源码
Patch 编译配置
修改 build.config.gki.aarch64 将编译格式改为自己 boot 中的压缩格式
获取 gki ramdisk
遵循 https://source.android.com/docs/setup/build/building-kernels#id-bootimage-no-init-boot
获取预构建的 ramdisk
开始编译
注意:
-
AVB_BOOT_PARTITION_SIZE=$((64*1024*1024))
为 boot 分区实际大小, 此处为 64MB
- 如果编译设备内存不足,请添加
LTO=thin
以免在LTO阶段因内存不足而构建失败
os_version
与os_patch_level
需要与源boot镜像匹配
获取产物
上述命令完成后,会打印出 boot.img 的位置,下载刷入即可
压缩内核方式
分析
out/android12-5.10/common/arch/arm64/boot/
文件夹下 .Image.*.cmd
即可得知从 Image 构建 boot.img
使用 010 editor 分析 boot.img
使用下面的模板即可在 010 editor 中显示 boot.img 的结构
Justfile 脚本
使用这个可以方便快捷的构建内核,使用前需要修改上面的变量
变量 | 说明 |
tag | common内核分支 |
os_version | 安卓系统版本 |
os_patch_level | 补丁版本,与tag保持一致 |
boot_size | boot分区大小,一般为64M,传递10进制整数 |
enable_thin_lto | 启用thin-lto编译(编译机器内存低必开) |