QEMU 上で Zephyr を立ち上げてみることを思い立ったので、その手順を追ってみます。公式ドキュメントに沿って進めれば hello_world まではたどり着けますが、環境の違いなどもあるので自分用のメモも兼ねて記録します。
- 公式ドキュメント
- Getting Started Guide
環境構築(初回のみ)
ここでは 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
コメント