[Zephyr] Zephyr on QEMU cortex-a

QEMU 上で Zephyr を立ち上げてみることを思い立ったので、その手順を追ってみます。公式ドキュメントに沿って進めれば hello_world まではたどり着けますが、環境の違いなどもあるので自分用のメモも兼ねて記録します。

環境構築(初回のみ)

ここでは Ubuntu をベースにしてビルドする環境を準備します。

Ubuntu で必要なパッケージをインストール

sudo apt install cmake python3 device-tree-compiler
sudo apt install python3-venv
pip install --upgrade pip

Python の仮想環境 "venv" を準備します。ローカルにインストールするので、切り替えるだけで元に戻すことができます。

mkdir ~/work
cd ~/work
python3 -m venv .venv
source .venv/bin/activate

最後の行の activate をすれば、いつでもこの環境に移ることができます。環境を抜けるには shell を終了します。

次に、Zephyr の meta ビルドツール "west" が動作する環境を初期化します。

pip install west
west init ~/work
cd ~/work
west update
west package pip --install

Zephyr SDK をインストールします。全てのサポートアーキテクチャのツールチェーンを導入するため、ダウンロードに少し時間がかかります。

cd ~/work
west sdk install -b .

SDK インストール時に SSL 証明書のエラーが出ることがあります。これは仮想環境 venv を利用している場合、独自の証明書を使って検証するためのようです。
OS の証明書を指定することで回避できます。

export REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt

サンプルソースのビルドと実行

前項で初期化した python 仮想環境(venv) を有効にします。

cd ~/work
source .venv/bin/activate

この例では QEMU の Cortex-A53 Virt 仮想マシンモデルをターゲットにビルドを進めます。

Zephyr ソースツリーにはサンプルソースがたくさんあります。
ここでは "synchronization" をビルドしてみます。

cd ~/work
west build -p always -b qemu_cortex_a53 zephyr/samples/synchronization
west build -t run

ビルドが成功し、最後の行で QEMU を起動してコンソール上に動作結果が出力されます。Crtl-C か Ctrl-A x で終了します。

-- west build: running target run
[0/1] To exit from QEMU enter: 'CTRL+a, x']QEMU CPU: cortex-a53
*** Booting Zephr OS build v4.1.0-5940-gc4ed1c01eb54 ***
thread_a: Helo world from cpu0 in qemu_cortex_a53!
thread_b: Helo world from cpu0 in qemu_cortex_a53!
thread_a: Helo world from cpu0 in qemu_cortex_a53!
thread_b: Helo world from cpu0 in qemu_cortex_a53!
thread_a: Helo world from cpu0 in qemu_cortex_a53!
thread_b: Helo world from cpu0 in qemu_cortex_a53!
qemu-system-aarch64: terminating on signal 2

-p always は常に defconfig/clean ビルドを行う指示です。つけないと前回のビルド結果を元に実行されます。

QEMU での実行

west を介して QEMU を実行しましたが、QEMU で直接実行するには以下のようにします。

qemu-system-aarch64 \
    -M virt,secure=on,gic-version=3 \
    -cpu cortex-a53 \
    -nographic \
    -kernel ~/work/zephyr/build/zephyr.elf

コメント

タイトルとURLをコピーしました