kade 是一个构建在 lyenv 之上的 Android 内核驱动自动化框架, 用于统一、可复现地完成 GKI / non-GKI 内核的构建、ABI 处理和产物导出。
该仓库通常配合以下项目使用:
- ✅ 支持 GKI / non-GKI 内核
- ✅ 单一配置文件(kadeflow.yaml)
- ✅ 原生支持 GitHub Actions
- ✅ 支持外置驱动 / in-tree 驱动
- ✅ 自动处理 ABI 上游与 ABI 列表
- ✅ 自动导出构建产物
- ✅ 支持构建后扩展命令
.
├── code/ # 驱动源码目录(推荐)
│ ├── Makefile
│ ├── mydriver.c
│ └── Kconfig # 可选
│
├── abi.symbols # ABI 符号定义(推荐)
├── kadeflow.yaml # 自动化主配置文件
│
├── .github/
│ └── workflows/
│ └── kade.yml
│
├── README.md
└── README_zh.md
当使用 外置驱动 时,kade 会将仓库中的某一个目录 视为驱动源码目录。
code/
配置方式:
gki:
driver:
in_tree: false
external_src_dir: "${GITHUB_WORKSPACE}/code"kade 只会复制该目录,其它文件不会进入内核源码树。
ABI 是接口契约,应该作为仓库内容进行管理。
创建文件:
abi.symbols
示例内容:
register_kprobe
unregister_kprobe
kallsyms_lookup_name
在 kadeflow.yaml 中引用:
abi:
upstream_patch: true
symbols_file: "${GITHUB_WORKSPACE}/abi.symbols"构建前将自动执行:
kade abi_upstream
kade abi --file abi.symbolskadeflow.yaml 是 CI 与本地构建的唯一配置入口。
kade:
config_overrides:
kernel:
flavor: "gki"
gki:
android_version: 13
kernel_version: "5.15"
target_arch: "aarch64"
driver:
project_name: "mydriver"
in_tree: false
external_src_dir: "${GITHUB_WORKSPACE}/code"
module_name: "mydriver.ko"启用 non-GKI:
kernel:
flavor: "non_gki"non_gki:
source:
type: "repo" # repo | local | zipZIP 示例:
non_gki:
source:
type: "zip"
zip_path: "${GITHUB_WORKSPACE}/kernel.zip"
zip_strip_root: truenon_gki:
build:
mode: "script"
script: "build.sh"
artifacts_dir: "out"non_gki:
build:
mode: "make"
make:
defconfig: "vendor_defconfig"
kernel_series: "4.9_plus"
toolchain_path_prefix: "/root/toolchain/clang/bin:/root/toolchain/gcc32/bin:/root/toolchain/gcc64/bin"non-GKI 不使用 Bazel。
kade 执行:
python3 gen_compile_commands.py -d <out_dir>可通过配置指定目录:
compile_commands:
non_gki_out_dir: "out/android13-5.15/common"GitHub Actions 默认执行:
kade preparekade depskade synckade abi_upstreamkade abi(若提供 symbols)kade buildkade export上传构建产物
执行:
eval "$(lyenv activate)"后,可在任意目录直接使用 kade。
kadeflow.yaml 中的路径支持:
${GITHUB_WORKSPACE}${LYENV_HOME}
在 CI 中会自动展开。
- 目录
code下所有文件为 GPL-2.0-only。 - 除
code目录的其他部分均为 Apache License 2.0。
- lyenv:https://github.com/systemnb/lyenv
- lyenv-plugin-center: https://github.com/systemnb/lyenv-plugin-center