1
0
0

使用DDK 快速编译 安卓 LKM

2026-02-27

Ylarod/ddk: 内核驱动开发工具包 (Kernel Driver Development Kit)

DDK预编译了所有GKI版本的内核,并且封装为docker Image以便使用

下面介绍下DDK在本地使用的几种方法

使用ddk script

DDK提供了一个便携脚本ddk,封装了常用的docker命令

ddk build命令实际上是在容器内执行make,记得写好Makefile和Kbuild

安装(macOS/Linux):

# 将 ddk 安装到 /usr/local/bin 并赋予可执行权限
sudo curl -fsSL https://raw.githubusercontent.com/Ylarod/ddk/main/scripts/ddk -o /usr/local/bin/ddk
sudo chmod +x /usr/local/bin/ddk

用法示例:

# 拉取镜像
ddk pull android12-5.10

# 进入项目目录
cd /path/to/source

# 构建
ddk build --target android12-5.10

# 传递 make 参数
ddk build --target android12-5.10 -- CFLAGS=-O2

# 清理
ddk clean --target android12-5.10

# 交互式 shell
ddk shell --target android12-5.10

如果你不想在每次命令中传入 target,可以设置环境变量 DDK_TARGET

export DDK_TARGET=android12-5.10
ddk build   # 会使用 DDK_TARGET

使用 Dev Container 开发环境

Dev containers 是一种用于开发的容器化环境,通常用于在一致的开发环境中运行项目。它是通过 Docker 容器技术实现的,能够将开发所需的所有依赖(如工具、库、环境变量等)封装在一个容器中,从而保证不同开发者之间环境的一致性。

需要VSCode安装 Dev Container 插件

image

之后在打开包含.devcontainer/devcontainer.json的项目时就可以选择在容器中打开

image

对于这种方法,ddk自带了一个模板

Ylarod/ddk-module-template: DDK 内核模块开发模块

使用打包好的image

ddk自带的模板就是这种形式,只需要修改 .devcontainer/devcontainer.json 中的 android12-5.10 即可

这种情况下,所需的环境变量已经被内置,无需执行source envsetup.sh

{
  "name": "ddk-module-dev",
  "image": "ghcr.io/ylarod/ddk:android12-5.10",
  "remoteUser": "root",
  "postCreateCommand": "echo Devcontainer ready",
  "customizations": {
    "vscode": {
      "extensions": [
        "github.copilot",
        "github.copilot-chat",
        "github.vscode-github-actions",
        "llvm-vs-code-extensions.vscode-clangd",
        "ms-azuretools.vscode-containers",
        "ms-azuretools.vscode-docker",
        "ms-ceintl.vscode-language-pack-zh-hans"
      ]
    }
  }
}

使用 ddk-builder 自行组装镜像

注意:这种方法会在不同项目中重复构建镜像,相同的features在不同项目中使用会共用image但是使用不同tag

官方同样给了示例,在ddk/module_template at main · Ylarod/ddk 中使用的就是这个方式

我们需要修改 features 中的内容来组装镜像,可以添加多个版本的clang和内核src

两者均会被放到 /opt/ddk 目录下

{
  "name": "ddk-module-dev",
  "image": "docker.cnb.cool/ylarod/ddk/ddk-builder:latest",
  "features": {
    "ghcr.io/ylarod/ddk/features/ddk-clang:latest": {
      "clangVer": "clang-r416183b",
      "setDefault": true
    },
    "ghcr.io/ylarod/ddk/features/ddk-src:latest": {
      "androidVer": "android12-5.10",
      "withKdir": true,
      "setDefault": true
    }
  },
  "remoteUser": "root",
  "postCreateCommand": "echo Devcontainer ready",
  "customizations": {
    "vscode": {
      "extensions": [
        "github.copilot",
        "github.copilot-chat",
        "github.vscode-github-actions",
        "llvm-vs-code-extensions.vscode-clangd",
        "ms-azuretools.vscode-containers",
        "ms-azuretools.vscode-docker",
        "ms-ceintl.vscode-language-pack-zh-hans"
      ]
    }
  }
}

同时还需要修改 envsetup.sh 的内容,并且需要手动执行source envsetup.sh

export DDK_ROOT=/opt/ddk

export KDIR=$DDK_ROOT/kdir/android12-5.10
export CLANG_PATH=$DDK_ROOT/clang/clang-r416183b/bin

# export KDIR=$DDK_ROOT/kdir/android13-5.15
# export CLANG_PATH=$DDK_ROOT/clang/clang-r450784e/bin

# export KDIR=$DDK_ROOT/kdir/android14-6.1
# export CLANG_PATH=$DDK_ROOT/clang/clang-r487747c/bin

export PATH=$CLANG_PATH:$PATH
export CROSS_COMPILE=aarch64-linux-gnu-
export ARCH=arm64
export LLVM=1
export LLVM_IAS=1

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或者给予支持!

使用DDK 快速编译 安卓 LKM
/archives/ddk-android-lkm
作者
Britney
发布于
2026-02-27
许可协议
CC BY-NC-SA 4.0

评论