关于 kernel-testing
面向 Linux 内核测试的 Agent 技能,涵盖 KUnit、kselftest、syzkaller、LTP 与 KernelCI。适用于编写内核测试、进行系统调用模糊测试,以及验证补丁和回归问题。
主要功能
- 01使用 KUnit 编写内核单元测试
- 02通过 kselftest 测试用户可见行为
- 03使用 syzkaller 与 kcov 进行模糊测试和覆盖率引导
- 04通过 LTP 验证系统调用回归
- 05使用 KernelCI 执行补丁测试流程
适用场景
- 01为内核库或驱动辅助函数编写测试
- 02为系统调用或 ioctl 添加回归测试
- 03模糊测试系统调用与 ioctl 接口
- 04验证补丁的构建、启动与测试结果
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mohitmishra786/ low-level-dev-skills --skill kernel-testing安装后在 Claude Code 中输入/kernel-testing确认已加载。
详细介绍
内核测试
目的
指导 Agent 测试 Linux 内核:使用 KUnit 进行内核单元测试,使用 kselftest 测试框架,使用 syzkaller 配合 kcov 覆盖率进行模糊测试,使用 Linux Test Project (LTP) 进行系统调用回归测试,以及集成 KernelCI 以开展持续测试。
适用场景
- 为内核库代码或驱动辅助函数编写单元测试
- 在
tools/testing/selftests/中添加回归测试 - 使用 syzkaller 对系统调用和 ioctl 接口进行模糊测试
- 使用 kcov 测量内核代码覆盖率
- 运行 LTP 验证系统调用兼容性
- 为内核补丁设置 CI
工作流
1. KUnit — 内核单元测试
// test_example.c
#include <kunit/test.h>
static void example_test(struct kunit *test)
{
KUNIT_EXPECT_EQ(test, 1 + 1, 2);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, kmalloc(16, GFP_KERNEL));
}
static struct kunit_case example_test_cases[] = {
KUNIT_CASE(example_test),
{}
};
static struct kunit_suite example_suite = {
.name = "example",
.test_cases = example_test_cases,
};
kunit_test_suite(example_suite);
MODULE_LICENSE("GPL");
# Makefile
obj-$(CONFIG_KUNIT) += test_example.o
# Run KUnit (in-tree)
./tools/testing/kunit/kunit.py run
# Run specific test
./tools/testing/kunit/kunit.py run --filter example
# With cross-compilation
./tools/testing/kunit/kunit.py run --cross_compile aarch64-linux-gnu- \
--arch arm64
KUnit 在内核上下文中运行(UMH 或专用 kunit 内核)。测试分配内存时请使用 kunit_kmalloc。
2. kselftest 测试框架
# Build all selftests
cd tools/testing/selftests
make -j$(nproc)
# Run all
make run_tests
# Run specific test
./memfd/memfd_test
./mount/run_unprivileged_remount.sh
添加新的自测:
tools/testing/selftests/mytest/
├── Makefile
├── mytest.c
└── config # optional kconfig requirements
# tools/testing/selftests/mytest/Makefile
CFLAGS += -Wall
TEST_GEN_FILES := mytest
TEST_PROGS := mytest
include ../lib.mk
# Run from top-level
make -C tools/testing/selftests/mytest run_tests
3. syzkaller 模糊测试
# Install syzkaller
git clone https://github.com/google/syzkaller
cd syzkaller && make
# Manager config (manager.cfg)
{
"target": "linux/amd64",
"http": "127.0.0.1:56741",
"workdir": "/tmp/syzkaller",
"kernel_obj": "/path/to/kernel/build",
"syzkaller": "/path/to/syzkaller",
"procs": 8,
"type": "qemu",
"vm": {
"count": 4,
"kernel": "/path/to/bzImage",
"cpu": 2,
"mem": 2048
}
}
# Start manager
./bin/syz-manager -config manager.cfg
# Reproduce a crash
./bin/syz-repro -config manager.cfg crash-report.txt
内核要求:CONFIG_KCOV、CONFIG_DEBUG_FS、CONFIG_KASAN(建议启用)。
4. kcov — 内核覆盖率
# Enable kcov on instrumented kernel
# CONFIG_KCOV=y in kernel config
# syzkaller uses kcov automatically
# Manual coverage via debugfs
ls /sys/kernel/debug/kcov/
覆盖率信息可引导 syzkaller 探索尚未覆盖的内核路径。
5. Linux Test Project (LTP)
# Build LTP
git clone https://github.com/linux-test-project/ltp
cd ltp
make autotools
./configure
make -j$(nproc)
make install
# Run syscall tests
cd /opt/ltp
./runltp -f syscalls
# Run specific test
./runltp -f syscalls -s pipe01
LTP 类别:系统调用、文件系统、网络、IPC、控制器、安全。
6. KernelCI
# Local kernel build test (simplified workflow)
# KernelCI tests patches against multiple defconfigs
# Submit build to KernelCI (project-specific tokens)
# See https://kernelci.org/docs/
# Check boot and kselftest results in KernelCI dashboard
典型 CI 流水线:
Patch → build (allmodconfig) → boot test (QEMU) → kselftest → LTP subset
7. 测试决策树
What to test?
├── Pure kernel function logic → KUnit
├── Userspace-visible behavior (syscall, ioctl) → kselftest
├── Security/crash finding → syzkaller + KASAN
├── Regression across distros → LTP
└── Upstream patch CI → KernelCI
8. 便于调试的测试内核配置
CONFIG_KUNIT=y
CONFIG_KCOV=y
CONFIG_KASAN=y
CONFIG_DEBUG_INFO_DWARF5=y
CONFIG_FRAME_POINTER=y
CONFIG_FTRACE=y
make kvm_guest.config # reasonable test config base
scripts/config --enable KUNIT KCOV KASAN
make olddefconfig
常见问题
| 症状 | 原因 | 修复方法 |
|---|---|---|
| 未找到 KUnit 测试 | CONFIG_KUNIT 已禁用 | 在 .config 中启用;重新构建 |
| kselftest 跳过 | 缺少内核功能 | 检查 config 文件中的要求 |
| syzkaller 未发现崩溃 | 虚拟机配置错误 | 确认 QEMU 能启动;检查内核命令行 |
| kcov 覆盖率为零 | CONFIG_KCOV 已关闭 | 启用 kcov 并重新构建内核 |
| LTP 大量失败 | 环境不正确 | 以 root 身份运行;检查 README 中的先决条件 |
| kunit.py 挂起 | UML 与硬件不匹配 | 指定 --arch 并进行交叉编译 |
相关技能
skills/low-level-programming/linux-kernel-modules— 被测模块skills/kernel/device-drivers— 要进行单元测试的驱动逻辑skills/kernel/kernel-debugging— 调试测试发现的故障skills/runtimes/fuzzing— 用户空间模糊测试概念(libFuzzer)skills/runtimes/sanitizers— 用于内核的 KASAN/KMSANskills/virtualization/qemu-kvm— 使用 QEMU 测试内核启动
评论
支持 Markdown