该工具用于分析 Linux 内核子系统的函数接口关系,基于 Clang LibTooling AST 提取:
- 函数定义 / 声明
- 调用关系(call graph)
- EXPORT_SYMBOL 接口
- internal / external interface 分类
工具链由两部分组成:
tu_indexerfunction_extractorcall_extractor
run_pipeline.pyexport_scanner.pymerge.pyclassify.py
- Linux
cmake,makeg++或clang++python3- LLVM + Clang 开发库(非常关键)
- Linux kernel 源码
compile_commands.json
必须安装 完整开发环境,否则会出现:
libclangBasic.a not found
sudo apt update
sudo apt install llvm-18-dev clang-18 libclang-18-dev clang-tools-18安装后应存在:
/usr/lib/llvm-18/lib/libclangBasic.aninjabear(生成 compile_commands.json)jq
必须安装 开发包,并确保存在:
/usr/lib/llvm-18/lib/cmake/llvm
/usr/lib/llvm-18/lib/cmake/clang
或:
/usr/lib/llvm-16/lib/cmake/llvm
/usr/lib/llvm-16/lib/cmake/clang
/home/user/
├── linux-6.1.y/
│ └── output-clang/
│ └── compile_commands.json
└── kernel-interface-analyzer/
├── src/
├── include/
├── scripts/
└── build/
/home/user/linux-6.1.y
/home/user/linux-6.1.y/output-clang/compile_commands.json
- 路径真实存在
- 与当前源码匹配
cd kernel-interface-analyzer
mkdir -p build
cd build
cmake .. \
-DLLVM_DIR=/usr/lib/llvm-18/lib/cmake/llvm \
-DClang_DIR=/usr/lib/llvm-18/lib/cmake/clang
make -j$(nproc)生成:
build/
├── tu_indexer
├── function_extractor
└── call_extractor
python3 scripts/run_pipeline.py \
--source-root /home/gs/linux-6.1.y \
--build-dir /home/gs/linux-6.1.y/output-clang \
--tool-build-dir /home/gs/kernel-iface-analyzer/build \
--subsystem init \
--out-dir /home/gs/kernel-iface-analyzer/analysis-init| 参数 | 说明 |
|---|---|
--source-root |
内核源码目录 |
--build-dir |
compile_commands.json 所在目录 |
--tool-build-dir |
C++ 工具路径 |
--subsystem |
子系统(init / fs / mm / kernel) |
--out-dir |
输出目录 |
输出目录示例:
analysis-init/
| 文件 | 作用 |
|---|---|
tu_list.json |
命中的 TU 列表 |
functions_raw/ |
原始函数信息 |
calls_raw/ |
原始调用关系 |
exports.json |
EXPORT_SYMBOL |
merged_call_graph.json |
合并后的调用图(核心) |
internal_by_file.json |
internal 接口 |
external_interfaces.json |
⭐ external 接口(重点) |
unresolved_calls.json |
未解析调用 |
stats.json |
统计信息 |
failed_tus.json |
失败 TU |