1.はじめに
前回は、Rustで記述された組込み向けOSであるTockの構築方法、構築手順についてご紹介し、QEMUを使ってTockの上でサンプルプログラムが動作する様子までお伝えしました。今回はいよいよSiFive RISC-Vが搭載されたHiFive1 RevBボード上でTockを実際に動作させる様子をお伝えします。
2.環境構築
前回のRISC-V技術ブログ連載第24回でお伝えした開発環境を引き続き利用し、追加で必要となるハードウェアおよびソフトウェアを以下に示します。
2.1.用意するもの
Tockを動作させるための環境構築を行う上で新たに用意したものを以下に挙げます。
- ハードウェア
HiFive1 RevBボード
USBケーブル(Type-A – micro-B) - ソフトウェア
Seggar J-Link Software
Screen
2.2.J-Link Softwareのインストール
HiFive1 RevBボードには、プログラムのダウンロードやJTAGデバッグを行うためにJ-Link OBと呼ばれるデバッグ用のチップが搭載されています。このチップを使うために専用のソフトウェアをインストールします。具体的なインストール方法については、SiFive社サイト(https://www.sifive.com/boards/hifive1-rev-b)にある「Getting Started Guide」の「6.1 Seggar J-Link OB Debugger Configuration」が参考になります。こちらに記載されている情報を参考にして、必要なソフトウェアのインストールと環境設定を行います。
2.3.Screenのインストール
シリアルコンソール用に今回はScreenというツールを使います。以下のコマンドによりインストールします。
sudo apt-get screen
3.HiFive1 RevBボードによるTockの動作確認
前回のRISC-V技術ブログ連載第24回ですでにHiFive1 RevBボード用のTockのビルドを行っているので、今回はいよいよこのTockをダウンロード、実行させていきます。HiFive1 RevBボードとPCとをUSBケーブルで接続後、以下の画像に示すように、VirtualBoxでUSBデバイスを利用できるようにしておきます。

3.1.Tockのダウンロードと起動
以下のコマンドにより、Tockをダウンロードします。
cd $HOME/tock/board/hifive1
make flash-jlink
正常にダウンロードが完了すると、以下のようなメッセージが表示されます。

次に、先ほどダウンロードしたTockの起動を確認します。以下のコマンドを入力して、screen(シリアルターミナル)を起動します。
sudo screen /dev/ttyACM0 115200
HiFive1 RevBボード上のリセットボタンを押下し、screen上に以下のように表示されたらTockの起動は成功です。

前回の技術ブログでご紹介したように、TockにはC言語用ユーザーランドライブラリ(libtock-c)とRust用ユーザーランドライブラリ(libtock-rs)の2つがあり、それぞれにサンプルプログラムが用意されています。前回、QEMUを使ってlibtock-rsのサンプルプログラムを動作させたので、今回はlibtock-cのサンプルプログラムを動作させてみます。
3.2.サンプルプログラムのビルド
libtock-cのサンプルプログラムをビルドする際、デフォルトの動作としてArm用のビルドが行われるようです。そのため、Arm用のクロスコンパイラがないとエラーとなってしまいます。以下のようにしてArm用のクロスコンパイラをインストールします。
sudo apt install gcc-arm-none-eabi
さらに、RISC-V用にビルドを行う際は、サンプルプログラムのディレクトリで、”make RISCV=1”のように入力します。今回LEDが点滅するサンプルプログラム(blink)を動作させることとし、以下のように入力し、ビルドを行います。
cd $HOME/libtock-c/examples/blink
make RISCV=1
3.3.サンプルプログラムのダウンロードと実行
tockloaderツールを使い、ビルドが完了したblinkをHiFive1 RevBボードにダウンロード、実行します。以下のコマンドを入力します。
tockloader install ./build/blink.tab
サンプルプログラムのダウンロードが完了するまでしばらく待つと、以下のようにLEDが色を変えて点滅し始めます。

シリアルターミナルを使ってTock上のプロンプトで”list”コマンドを入力し、プロセスの状態を確認してみます。

このように、blinkが動作中であることが確認できました(※)。
※ screenを終了するには、[Ctrl]+[A]を押下後、[K]キーを押下、[Y]キーを押下します。
4.まとめ
いかがでしたでしょうか。今回は実際にRISC-Vが搭載されているSiFive社製HiFive1 RevBボードの上でRustで記述された組込み向けOSであるTockおよびサンプルプログラムを動作させる様子についてお伝えしました。Tockではまだサンプルプログラムのレパートリーや対応するボードのレパートリーも少ないようですが、開発は継続的に進められているようです。今後ますますRISC-Vのサポートが強化されることに期待したいところです。今回はご紹介できませんでしたが、FPGAボードであるArtyA7-100T用にSiFive社製RISC-VのE21コアを書き込み、その上でTockを動かすこともできるようです。機会があればその様子についても本技術ブログでご紹介できればと思います。
本ブログについてのより詳しい内容のご質問は、こちらまでお問合せください。
info-lsi@dts-insight.co.jp
著作権および商標
Linux は、Linus Torvalds の米国およびその他の国における登録商標です。
Ubuntuは、Canonical Ltd.の商標または登録商標です。
VirtualBox は、Oracle VM VirtualBox の略です。
Oracle VM VirtualBox は、Oracle Corporation の登録商標です。
QEMUはFabrice Bellard氏の登録商標です
その他、本ブログに記載する製品名は、一般に各開発メーカーの商標または登録商標です。
なお、本文中には™ および ® マークは表記していません。
■■DTSインサイトの「システムLSI設計ソリューションサービス」■■
DTSインサイトでは、システムLSI/FPGA設計の受託も行っています。
当社のノウハウを活かした、ソフトウェアの移行(マイグレーション)
サービスも提供しておりますので、お気軽にご相談ください。
システムLSI設計ソリューションサービス紹介は こちら