mcpField
K
kernel-testing

kernel-testing

github.com/mohitmishra786テスト・品質269308 回インストール18 週間前に更新
リポジトリ

kernel-testing について

Linux カーネルのテストを案内するエージェントスキルです。KUnit、kselftest、syzkaller、LTP、KernelCI を扱い、テスト作成やシステムコールのファジング、パッチと回帰の検証に役立ちます。

主な機能

  1. 01KUnit によるカーネル単体テスト
  2. 02kselftest によるユーザー向け動作のテスト
  3. 03syzkaller と kcov によるファジングとカバレッジ誘導
  4. 04LTP によるシステムコール回帰の確認
  5. 05KernelCI によるパッチテストの実行

活用シーン

  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を入力して読み込まれたか確認します。

詳細

カーネルのテスト

目的

Linux カーネルのテストをエージェントに案内します。KUnit によるカーネル内ユニットテスト、kselftest ハーネス、kcov カバレッジを利用した syzkaller ファジング、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 のカテゴリ:システムコール、FS、ネットワーク、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 が SKIP になるカーネル機能が不足しているconfig ファイルの要件を確認する
syzkaller でクラッシュが起きないVM の設定が正しくない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

コメント