mcpField
K
kernel-testing

kernel-testing

github.com/mohitmishra786测试与质量269308 次安装18 周前更新
代码仓库

关于 kernel-testing

面向 Linux 内核测试的 Agent 技能,涵盖 KUnit、kselftest、syzkaller、LTP 与 KernelCI。适用于编写内核测试、进行系统调用模糊测试,以及验证补丁和回归问题。

主要功能

  1. 01使用 KUnit 编写内核单元测试
  2. 02通过 kselftest 测试用户可见行为
  3. 03使用 syzkaller 与 kcov 进行模糊测试和覆盖率引导
  4. 04通过 LTP 验证系统调用回归
  5. 05使用 KernelCI 执行补丁测试流程

适用场景

  1. 01为内核库或驱动辅助函数编写测试
  2. 02为系统调用或 ioctl 添加回归测试
  3. 03模糊测试系统调用与 ioctl 接口
  4. 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/KMSAN
  • skills/virtualization/qemu-kvm — 使用 QEMU 测试内核启动

评论

支持 Markdown