qemu-for-kernel-development について
QEMUを使ったカーネルとドライバー開発を案内するエージェント向けスキルです。カスタムカーネルの構築・起動、virtio、Buildrootやinitramfs、モジュールテスト、デバッグを扱います。
主な機能
- 01QEMUでのカスタムカーネル起動
- 02virtioブロックデバイスとネットワークの設定
- 03Buildrootによるルートファイルシステム構築
- 04ツリー外カーネルモジュールのテスト
- 05GDBによるカーネルデバッグ
活用シーン
- 01ベアメタルを使わないカーネルパッチのテスト
- 02virtioやエミュレート環境向けドライバー開発
- 03CIでのカーネル起動スモークテスト
- 049pによるホストソースツリーの共有
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mohitmishra786/ low-level-dev-skills --skill qemu-for-kernel-developmentインストール後、Claude Code で/qemu-for-kernel-developmentを入力して読み込まれたか確認します。
詳細
カーネル開発向け QEMU
目的
QEMU を用いたカーネルおよびドライバー開発のワークフロー(カスタムカーネルのビルドと起動、virtio ブロック/ネットワークデバイスの接続、Buildroot または最小限の initramfs の使用、高速なモジュールテストサイクル)をエージェント向けに説明します。一般的な skills/virtualization/qemu-kvm ではなく、カーネル開発に焦点を当てています。
使用する場面
- ベアメタル環境を使わずにカーネルパッチをテストする
- virtio またはエミュレートされた DT プラットフォーム向けのドライバーを開発する
- CI でカーネルの起動スモークテストを行う
- 高速な編集・コンパイル・テストのために NFS または 9p のルートファイルシステムを使用する
ワークフロー
1. 最小構成での直接カーネル起動(arm64 virt)
qemu-system-aarch64 \
-machine virt -cpu cortex-a57 -smp 4 -m 2G \
-kernel arch/arm64/boot/Image \
-append "console=ttyAMA0 root=/dev/vda rw" \
-drive if=virtio,file=rootfs.ext4,format=raw \
-netdev user,id=net0 -device virtio-net-device,netdev=net0 \
-nographic
x86_64:
qemu-system-x86_64 -enable-kvm -m 4G -smp 4 \
-kernel arch/x86/boot/bzImage \
-append "console=ttyS0 root=/dev/vda rw" \
-drive file=rootfs.img,format=raw,if=virtio \
-nographic
2. Buildroot ルートファイルシステムの反復
cd buildroot
make qemu_aarch64_virt_defconfig
make
# output/images/Image, rootfs.ext4
カスタムカーネルを統合するには、BR2_LINUX_KERNEL_CUSTOM_VERSION または外部ツリーを設定します。
3. ツリー外モジュールのテスト
# on host — cross build
make -C $KERNEL_SRC M=$PWD modules
# in guest or via initramfs
insmod mydriver.ko
dmesg | tail
9p でツリーを共有します:
-fsdev local,id=dev,path=$PWD,security_model=none \
-device virtio-9p-pci,fsdev=dev,mount_tag=hostshare
# guest: mount -t 9p -o trans=virtio hostshare /mnt
4. カーネル用 GDB スタブ
qemu-system-aarch64 ... -s -S
gdb vmlinux
(gdb) target remote :1234
(gdb) break start_kernel
起動後にカーネルをライブデバッグするには、CONFIG_KGDB を使用します。
5. デバイスツリーのオーバーライド
qemu-system-aarch64 -machine virt -dtb myboard.dtb ...
virt マシンは virtio デバイスを提供します。プラットフォームドライバーは QEMU の -device モデルを対象にできます。
6. エージェントの使用
/qemu-for-kernel-development Boot arm64 virt with custom Image and virtio rootfs for driver CI
よくある問題
| 症状 | 原因 | 対処方法 |
|---|---|---|
| ルートファイルシステムがなく、カーネルパニックが発生する | root= の指定が誤っている | virtio blk の場合は root=/dev/vda を指定する |
| コンソール出力がない | コマンドラインに console= がない | console=ttyAMA0 または ttyS0 を指定する |
| モジュールの vermagic エラー | 間違ったツリーを使ってビルドしている | 起動したイメージと同じ KERNEL_SRC を使用する |
| KVM なしでは遅い | TCG エミュレーションが使われている | x86 ホストでは -enable-kvm を指定する |
| DTB の不一致 | マシンの指定が誤っている | カーネルの make dtbs で生成した virt DTB を使用する |
関連スキル
skills/virtualization/qemu-kvm— KVM、VFIO、libvirtskills/qemu/qemu-embedded-simulation— ベアメタル MCU 向け QEMUskills/kernel/kernel-testing— KUnit、kselftestskills/kernel-dev/device-tree— virt/プラットフォーム向け DTskills/debuggers/gdb— リモート GDB の基礎
コメント
Markdown 対応