Zephyrとは、Linux Foundationのプロジェクトの一つでもあり、RTOS(Real Time Operating System)の一つだ。
このZephyr OSはRTOSとしてはかなりメジャー?のなOSであり、完全にオープンソース、そして組み込みデバイスなどの小さな機器に搭載するためのOSとして適している。例えば、IoTワイヤレスアプリケーションやスマートウォッチなどに使われる想定のOSだ。
そして、ZephyrはRISC-Vをサポートしており、現在以下のボードで動作することが確認されている。
- SiFive HiFive1
- Microsemi’s Mi-V soft CPU running on the M2GL025 development board
- soft Pulpino CPU running on a Zedboard
なるほど、これは面白そうだ。HiFive1も持っていることだし、Zephyrを動かして少し遊んでみよう。
QEMU上で簡易OSZephyrを動かしてみる
動作環境としては、Ubuntu 18.04 LTSをVirtua Box上にインストールし、そのうえで作業を行う。まずは、ZephyrのコンパイルとQEMUを動かすために必要なパッケージをインストールする。
sudo apt-get install --no-install-recommends git cmake ninja-build gperf \ ccache dfu-util device-tree-compiler wget \ python3-pip python3-setuptools python3-wheel xz-utils file make gcc \ gcc-multilib
次に、Zephyrのソースコードをダウンロードし、さらに必要な外部パッケージのダウンロードを行う。以下のようにタイプする。
git clone https://github.com/zephyrproject-rtos/zephyr cd zephyr sudo pip3 install --user -r scripts/requirements.txt export ZEPHYR_TOOLCHAIN_VARIANT=zephyr . ./zephyr-env.sh
次に、ZephyrのSDKのダウンロードとインストールを行う。<zephyr_sdk_install_dir>
には、SDKをインストールしたい場所を指定する。
# 資料には下記のように記述してあるが、SDK 0.9.5ではビルドできなかった。SDK 0.10.0を使用する必要がある。 # wget https://github.com/zephyrproject-rtos/meta-zephyr-sdk/releases/download/0.9.5/zephyr-sdk-0.9.5-setup.run # sh zephyr-sdk-0.9.5-setup.run wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.10.0/zephyr-sdk-0.10.0-setup.run sh zephyr-sdk-0.10.0-setup.run
SDKのビルドプロセスでは、riscv32
のターゲットでZephyrがビルドされていることが確認できる。
Verifying archive integrity... All good. Uncompressing SDK for Zephyr 100% Enter target directory for SDK (default: /opt/zephyr-sdk/): /home/msyksphinz/work/riscv/zephyr/zephyr_install_sdk Installing SDK to /home/msyksphinz/work/riscv/zephyr/zephyr_install_sdk Creating directory /home/msyksphinz/work/riscv/zephyr/zephyr_install_sdk Success [*] Installing x86 tools... [*] Installing arm tools... [*] Installing arc tools... [*] Installing iamcu tools... [*] Installing mips tools... [*] Installing nios2 tools... [*] Installing xtensa tools... [*] Installing riscv32 tools... [*] Installing additional host tools... Success installing SDK. SDK is ready to be used.
そして、SDKをインストールした場所を環境変数として登録する。
export ZEPHYR_SDK_INSTALL_DIR=<zephyr_sdk_install_dir> # ここでは、/home/msyksphinz/work/riscv/zephyr/zephyr_install_sdk を指定。
では、サンプルプログラムを動かす。ここでは、チュートリアルの通りにhello_world
プログラムをビルドして、QEMUで動作させる。
mkdir build-example cd build-example cmake -DBOARD=qemu_riscv32 /home/msyksphinz/work/riscv/zephyr/zephyr/samples/hello_world $ make -j $(nproc)
しばらくするとビルドが完了した。さっそくQEMU上で動作させてみる。
$ make run [ 1%] Built target kobj_types_h_target [ 2%] Built target syscall_macros_h_target [ 6%] Built target syscall_list_h_target [ 7%] Built target driver_validation_h_target [ 8%] Built target offsets [ 9%] Built target offsets_h [ 35%] Built target kernel [ 38%] Built target app [ 39%] Built target linker_script_target [ 73%] Built target zephyr [ 86%] Built target lib__libc__minimal [ 89%] Built target drivers__gpio [ 91%] Built target drivers__serial [ 93%] Built target zephyr_prebuilt [ 94%] Built target linker_pass_final_script_target [ 98%] Built target kernel_elf [100%] To exit from QEMU enter: 'CTRL+a, x' [QEMU] CPU: riscv32 ***** Booting Zephyr OS v1.14.0-rc3-246-g10327e59c622 ***** Hello World! qemu_riscv32
Hello worldプログラムが無事に動作したようだ。QEMUで、Zephyr OSを動作させ、最初のアプリケーションを動かすことができた。
注意 : チュートリアルの通りにZephyr SDK 0.9.5 をダウンロードしてビルドすると以下のようなエラーが出ました。どうやら、0.10.0を使用する必要があるようです。
Zephyr version: 1.14.0 -- Found PythonInterp: /usr/bin/python3 (found suitable version "3.6.7", minimum required is "3.4") -- Selected BOARD qemu_riscv32 CMake Error at /home/msyksphinz/work/riscv/zephyr/zephyr/cmake/toolchain/zephyr/host-tools.cmake:38 (message): The SDK version you are using is too old, please update your SDK. You need at least SDK version 0.10.0. You have version 0.9.5 (/home/msyksphinz/work/riscv/zephyr/zephyr_sdk). The new version of the SDK can be downloaded from: https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.10.0/zephyr-sdk-0.10.0-setup.run