That's Done!

thatsdone's (mostly technical) memorandum

[ja] Zephyr qemu notes


Zephyr ESP32 notesを書いたので、次はqemuのメモをダンプしていきます。

対象は以下の2つです。

  • qemu-system-x86_64
  • qemu-system-aarch64

...が、そのうち増えるかもしれません(笑)

話の発端

まず、私は数年前から単純にCPUを使いまくるテスト用(というか教育用?)のプログラム(mpmt)を作っています。

ここにおいてあります。

https://github.com/thatsdone/mpmt

取り扱う言語が30を超えたくらいからネタ切れ感がでてきていたのと、 AGLに絡みはじめてから 同じLinux Foundation配下のRTOSにZephyrをAGLのSDV Reference PFで使おうよという話、 つまり SoDeV プロジェクトに首をつっこみはじめてから、 当時者としてZephyrに興味を持つようになりました。

それで、言語やそのランタイムだけではなく、RTOSでもmpmtを動かしてみるか…と思い至ったというのが発端です。

mpmtのZephyr版は このあたり を見てみてください。

さて、以下気づきのメモを列挙していきますが。他の記事と同様に随時更新していきます。

ターゲット...というかボード指定?のやりかた

west build する際に -b に何を指定するか?という話です。

  • x86_64の場合
    • qemu_x86_64
  • ARM64の場合
    • qemu_kvm_arm64

以下、マニュアル。

  • x86/x86_64 qemu target board
    • https://docs.zephyrproject.org/latest/boards/qemu/x86/doc/index.html
  • ARM64 qemu target board
    • https://docs.zephyrproject.org/latest/boards/qemu/kvm_arm64/doc/index.html

できあがるバイナリ

west build -t run ではなく、qemu-system-xxx から直接実行したい…とか、libvirtで制御できるようにしたいという場合には気にする必要があります。

x86_64の場合

x86_64の場合、buildディレクトリの中にバイナリが2つできあがります。

一方はZephyrのメインプログラムでもう一方はloaderになります。 mpmtのZephyr版のREADMEに書いておきましたがこういう感じです。

  • kernel: zephyr-qemu-locore.elf
  • loader: zephyr-qemu-main.elf

aarch64の場合

こちらは一般的な組み込み用のボードと同じで1つだけです。 buildディレクトリの中にzephyr.binができあがります。

KVMの仮想化支援機能を使いたい

使えます。 ただ、west からqemuに指定のパラメータを渡す方法があるのかもしれませんが、現状は未調査です。

続きます。