ARM64 内核研究 (三)
2022-12-20
| 2023-1-9
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property
Jan 9, 2023 07:31 AM

获取设备信息

需要的设备信息有:
  1. 内核版本,如 android12 5.10.101
    1. 源系统boot的相关信息
      1. 需要关注的信息有:
        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

    开始编译

    注意:
    1. AVB_BOOT_PARTITION_SIZE=$((64*1024*1024)) 为 boot 分区实际大小, 此处为 64MB
    1. 如果编译设备内存不足,请添加 LTO=thin 以免在LTO阶段因内存不足而构建失败
    1. os_versionos_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编译(编译机器内存低必开)
  2. Kernel
  3. ArchLinux WakeOnLan 配置LLVM 使用 CLion 调试 Pass Plugin
    • Giscus
    目录