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/ddksudo 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
# 交互式 shellddk shell --target android12-5.10如果你不想在每次命令中传入 target,可以设置环境变量 DDK_TARGET:
export DDK_TARGET=android12-5.10ddk build # 会使用 DDK_TARGET使用 Dev Container 开发环境
Dev containers 是一种用于开发的容器化环境,通常用于在一致的开发环境中运行项目。它是通过 Docker 容器技术实现的,能够将开发所需的所有依赖(如工具、库、环境变量等)封装在一个容器中,从而保证不同开发者之间环境的一致性。
需要VSCode安装 Dev Container 插件

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

对于这种方法,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.10export 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:$PATHexport CROSS_COMPILE=aarch64-linux-gnu-export ARCH=arm64export LLVM=1export LLVM_IAS=1
部分信息可能已经过时



