mcpField
Q
qemu-embedded-simulation

qemu-embedded-simulation

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

qemu-embedded-simulation について

ベアメタルや RTOS のファームウェア開発者向けの QEMU ガイドです。マシン選択、ファームウェアの読み込み、GDB デバッグ、セミホスティングに加え、STM32 周辺機器モデルの制限も説明します。

主な機能

  1. 01QEMU マシンモデルの選択
  2. 02ベアメタル ELF イメージの読み込み
  3. 03GDB スタブによるデバッグ
  4. 04セミホスティングの設定
  5. 05STM32 モデルの制限の把握

活用シーン

  1. 01ボードなしでの Cortex-M ファームウェアテスト
  2. 02CI でのリンクと起動のスモークテスト
  3. 03ハードウェアデバッグ前のステップ実行
  4. 04virt 上でのベアメタル RISC-V の立ち上げ

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill qemu-embedded-simulation

インストール後、Claude Code で/qemu-embedded-simulationを入力して読み込まれたか確認します。

詳細

QEMU 組み込みシミュレーション

目的

ベアメタルおよびRTOSファームウェア向けに、QEMUの使い方をエージェントに案内します。マシンの選択、ELFイメージの読み込み、セミホスティング、周辺機器モデル、GDBデバッグを扱います。Linuxに重点を置いた skills/virtualization/qemu-kvm および skills/kernel-dev/qemu-for-kernel-development とは異なります。

使用する場面

  • ボードなしでCortex-Mファームウェアをテストする
  • リンカースクリプトやスタートアップのCIスモークテストを行う
  • ハードウェアでOpenOCDを使う前にGDBでステップ実行する
  • virt マシンでRISC-Vの立ち上げを行う

ワークフロー

1. ARM Cortex-M(QEMU STM32ボード)

QEMUがモデル化するSTM32ボードは一部です(qemu.org STM32ドキュメントを参照)。

マシンMCUコア
stm32vldiscoverySTM32F100RBT6Cortex-M3
netduino2STM32F205RFT6Cortex-M3
netduinoplus2STM32F405RGT6Cortex-M4F
olimex-stm32-h405STM32F405RGT6Cortex-M4F
# stm32vldiscovery — Cortex-M3 (not F4); match -mcpu to the board
arm-none-eabi-gcc -mcpu=cortex-m3 -T linker.ld -o firmware.elf main.c startup.s
qemu-system-arm \
  -machine stm32vldiscovery \
  -kernel firmware.elf \
  -nographic \
  -serial mon:stdio

QEMU STM32の起動オプションに従い、-kernel firmware.bin または .elf で起動します。

マシンの一覧:qemu-system-arm -machine help。現在のQEMU STM32マシンでは、GPIO、DMA、I2Cはモデル化されていません。USART/SPI/ADC/タイマーは部分的にサポートされています。

2. 汎用ARM virt(Cortex-Aテスト)
qemu-system-aarch64 -machine virt -cpu cortex-a53 -m 128M \
  -kernel firmware.elf -nographic
3. RISC-Vベアメタル
qemu-system-riscv32 -machine virt -nographic \
  -bios none \
  -kernel firmware.elf

-bios none を指定すると、OpenSBIなしでリセットベクターから開始します。

4. GDBスタブ
qemu-system-arm -machine stm32vldiscovery -kernel firmware.elf \
  -S -gdb tcp::3333 -nographic

arm-none-eabi-gdb firmware.elf
(gdb) target remote :3333
(gdb) monitor reset halt
(gdb) load

ターゲット上でのワークフローには skills/embedded/openocd-jtag を組み合わせてください。

5. セミホスティング(サポートされている場合)
qemu-system-arm ... -semihosting-config enable=on,target=native

セミホスティングのシステムコール経由で printf を使用できます。ツールチェーンはセミホスティングをサポートするようにビルドする必要があります。

6. 制限事項(上流ドキュメントに記載されたQEMU STM32の制限)
注意点実情
QEMU STM32にGPIOがないGPIOコントローラーは実装されていません。LED点滅テストには、ハードウェアまたは別のマシンが必要です
DMA/I2CがないSTM32のQEMUモデルにはDMAとI2Cがありません
RCCは部分的F4ではRCCのリセット/有効化のみで、クロックツリー全体には対応していません
MCUの想定違いstm32vldiscovery はF407ではなくF100 M3です。CPUフラグとリンカーメモリーを一致させてください
タイミング実際のシリコンに対するサイクル精度はありません

本番リリースの承認前に、ハードウェアで検証してください。

7. エージェントの使用方法
/qemu-embedded-simulation Run STM32VL discovery firmware in QEMU with GDB on port 3333

よくある問題

症状原因修正方法
QEMUがすぐに終了するmain が戻った末尾にループまたは WFI を追加する
エントリーアドレスが違うELFがモデル向けにリンクされていないreadelf -h のエントリーを確認する
シリアル出力がないUARTモデルのアドレスが違うマシン固有のマップまたはセミホスティングを使う
GDBが接続できない-S を忘れている-S -gdb tcp::3333 を追加する
QEMUでHardFaultが発生するスタック/ベクターが無効スタートアップを修正する。baremetal-startupを参照

関連スキル

  • skills/baremetal/baremetal-startup — ベクターとリンカースクリプト
  • skills/baremetal/stm32-baremetal — STM32のレイアウト
  • skills/embedded/openocd-jtag — ハードウェアデバッグ
  • skills/kernel-dev/qemu-for-kernel-development — QEMU上のLinuxカーネル
  • skills/platform/riscv-privileged — RISC-Vのリセットとvirt

コメント