1.はじめに
前々回のブログ([RISC-V技術ブログ連載第14回] SiFive最新リリース HiFive Unmatchedボードのご紹介⑩ ~HiFive UnmatchedでFreeRTOSを動かす~)で、HiFive Unmatchedボード上でFreeRTOSを動かすまでの様子をお伝えしたところ、大変ご好評いただきました。そこで今回もRTOSをHiFive Unmatchedボード上で動かすまでをお伝えしたいと思います。Zephyr™Project(※1)によって開発、メンテナンスされているZephyrカーネルについてのご紹介やZephyrカーネルのビルド方法、HiFive Unmatchedボードで動かす様子をお伝えしていきます。
※1 2016年にLinux FoundationによりIoTデバイス向けのRTOS開発プロジェクトとして発足し、現在SiFiveもシルバーメンバーとして参画している。
2.Zephyrカーネルとは
Zephyrカーネルは、リソースに制約のある組込みシステムで使用するために設計された小さなフットプリントのカーネルに基づいており、シンプルな組込み環境センサーやLEDウェアラブルから、高度な組込みコントローラー、スマートウォッチ、IoTワイヤレスアプリケーションまで幅広く利用されています。また、こちらに示されるように多くのアーキテクチャをサポートしています。
ライセンスについては、世界的に利用されている主要なオープンソースライセンスの一つである、Apache License 2.0を採用しています。
3.Zephyrカーネルの主な特徴
Zephyrカーネルの主な特徴を以下に示します。
- 豊富なカーネルサービス群
開発現場でなじみのあるサービスを数多く提供 - 複数のスケジューリングアルゴリズム
スレッドスケジューリングの選択肢を包括的に提供 - クロスアーキテクチャ
さまざまなCPUアーキテクチャと開発者ツールを備えた多くのボードをサポート - 高度に構成可能で柔軟なモジュラー構造
必要な機能のみを必要に応じて組込み、その量とサイズを指定可能 - コンパイル時のリソース定義
コンパイル時にシステムリソースを定義することでコードサイズの削減ができ、リソースが制限されたシステムのパフォーマンスが向上 - デバイスツリーのサポート
デバイスツリーを使用してハードウェアを記述可能。デバイスツリーからの情報は、アプリケーションイメージを作成するために使用される - 複数のプロトコルをサポートするネイティブネットワークスタック
LwM2MおよびBSDソケット互換のサポートを含め、十分な機能を提供 - ネイティブPOSIXポート
さまざまなサブシステムとネットワークをサポートするLinuxアプリケーションとして動作するZephyrの実行をサポート
4.SiFiveによるZephyrカーネルサポート状況
以下にZephyrカーネルが動作するSiFive製ボードを示します。

5.環境構築
まず、Zephyrカーネルをビルドするための環境構築を公式の手順に沿って、”Install a Toolchain”まで行っていきます。OSはUbuntuを使います。主な注意点は以下の3点です。
- Ubuntuバージョン
CMakeなどの独自のUbuntuパッケージをホストするため、”kitware-archive.sh”というスクリプトを用います。このスクリプトに対応しているUbuntuバージョン(※2)である必要があります。今回はUbuntu 20.04.4 LTS版を使います。 - 仮想マシンのサイズ
VirtualBox等の仮想マシンにUbuntuをインストールして利用する場合、仮想マシンのサイズは20GBほど確保してください。10GBでは空き容量不足のため環境構築途中で失敗してしまいます。 - ツールのバージョン
以下のツールは公式の説明とは異なるバージョンとなっています。
cmake 3.22.2
Python 3.8.10
Dtc 1.5.0
※2 現在、x86ではUbuntu 16.04、18.04、および20.04がサポート対象です。
6.サンプルプログラムの動作デモ
6.1 概要
サンプルプログラムは、ソースコードに手を加えることなく動作確認ができることから、”drivers/uart/echo_bot”を動作させることにしました。ソースコードはこちらでご覧になれます。このサンプルプログラムは、ターミナルソフト上に入力される文字をバッファリングしていき、終端コード(’\r’または’\n’)が入力されたら、バッファリングされた文字列をエコーバックするもので、UARTの割り込みに応じたコールバック関数、メッセージキューの動作を確認することができます。
6.2 ビルド
ビルドを行う際にターゲットとなるボード名を”-b”の後に指定します。HiFive Unmatchedボードの場合は、”hifive_unmatched”を指定します。
$ cd ~/zephyrproject/zephyr
$ west build -p auto -b hifive_unmatched samples/drivers/uart/echo_bot
ビルドに成功すると、”zephyr/zephyr.elf”というファイルが出来ます。
6.3 動作環境
以下に動作環境を示します(※3)。

今回は、[RISC-V技術ブログ連載第14回] SiFive最新リリース HiFive Unmatchedボードのご紹介⑩ ~HiFive UnmatchedでFreeRTOSを動かす~で行ったのと同様に、WindowsでFreedom Studioを利用します。
※3 RISC-V技術ブログ連載第11回、RISC-V技術ブログ連載第12回でお伝えした内容も参考になります。
6.4 実行
Freedom Studio上のgdbコマンドを使ってzephyr.elfロード、実行します(※4)。その際、zephyr.elfの開始アドレスが0x8000_0000である点に注意します。
※4 Ubuntu上で作成したzephyr.elfは、あらかじめWindows上にコピーしておきます。
6.5 実行結果
ターミナルソフト上に”test”+改行,”good!!”+改行,”bye”+改行を入力します。すると、以下のように期待通りにエコーバックされました。

以下の画像をクリックすると、Zephyrサンプルプログラムが動作する様子をYouTube動画でご覧になれます。

7.まとめ
いかがでしたでしょうか。FreeRTOSだけでなくZephyrカーネルについても、とても簡単に動作させることがおわかりいただけたのではないでしょうか。商用のものでは、SYSGO社のPikeOS™というRTOSがHiFive Unmatchedボードをサポートするといったニュースも挙がっており、LinuxのようなハイエンドOSだけでなく、RTOSのサポートも今後増えていくことでしょう。さらには、LinuxとRTOSのハイブリット環境など、より実用的な事例も増えていくのではないでしょうか。弊社ではそのような環境の構築も得意としていますので、ご興味やご要望、お困りごとなどございましたら、ぜひご連絡いただけますと幸いです。
本ブログについてのより詳しい内容へのご質問等ございましたら、ぜひお気軽にお問合せください。
お問い合わせはこちら
info-lsi@dts-insight.co.jp
著作権および商標
Zephyrプロジェクトは、Zephyrカーネル、そのサブシステムとコアコンポーネント、およびそのツールチェーンと開発ツールを管理するために2015年に設立されたオープンソースプロジェクトです。プロジェクトに関しては、Zephyrカーネルと区別するために、「ZephyrProject」という名前全体を使用することをお勧めします。派生オペレーティングシステムには、独自の名前が付けられていることが期待されます。Zephyr™ProjectおよびZephyrProjectのロゴは、LinuxFoundationの商標です。他の名前やブランドは、他人の所有物として主張される場合があります。
FreeRTOS™は Amazon Web Services, Inc.の商標です。
その他、会社名や製品名は各社の登録商標または商標です。
■■DTSインサイトの「システムLSI設計ソリューションサービス」■■
DTSインサイトでは、システムLSI/FPGA設計の受託も行っています。
当社のノウハウを活かした、ソフトウェアの移行(マイグレーション)
サービスも提供しておりますので、お気軽にご相談ください。
システムLSI設計ソリューションサービス紹介は こちら