1.はじめに
前回は、現在非常に注目度が高まっている言語であるRustと、そのRustで記述された組込み向けOSであるTockについて、概要や特徴などをご紹介しました。今回は引き続き、Tockを動作させるための環境構築方法をお伝えします。VirtualBoxのインストールから、Tockが動作するまでの一連の手順をまとめてみました。また最後に、RISC-V用に構築したQEMUにてTockの動作を確認するところまでをお伝えできればと思います。
2.環境構築
Tockの環境構築は、基本的にTock Getting Started Guideに書かれている情報を参考にします。ここには、NixOS、MacOS、Ubuntuの例が載っており、いずれかのOSを利用すると比較的簡単に構築できるようです。今回、Ubuntuを採用することにしますが、より手軽に確認できることを目的として、Windows 10で仮想環境VirtualBox(※1)を利用し、その上にUbuntuをインストールした上でTockの動作環境を構築していくことにします。
※1 RISC-V技術ブログ連載第17回でご紹介したWSL2上のUbuntuを利用したかったのですが、標準のWSL2環境ではUSBを認識できず、目標としているRISC-Vボードとの接続が難しいことから、今回はVirtualBoxを使うことにしました。
2.1.用意するもの
Tockを動作させるための環境構築を行う上で用意したものを以下に挙げます(※2)。
- ハードウェア
ノートPC(CPU:Core i7-1185G7, RAM:16GB, SSD:512GB(空き領域:150GB)) - ソフトウェア
Windows 10 Pro(バージョン:22H2, OSビルド:19045.2364)
VirtualBox 6.1.40 r154048
Ubuntu 22.04.1 LTS
※2 インターネット接続ができることを前提としており、そのための設備、環境についての説明は省きます。
2.2.Ubuntuのインストール
まず、VirtualBox上でUbuntu用の仮想マシンを作成します。仮想ハードディスクのストレージサイズが不足していると、環境構築途中でエラーが発生してしまうため、今回は50GB確保することにしました(※3)。
次に、Ubuntu 22.04.1 LTSのISOイメージをこちらからダウンロードし、先ほど作成したVirtualBox仮想マシンの仮想ハードディスクとして指定します。
仮想マシンを起動すると、Ubuntuのインストールが始まります。日本語環境としてインストールウィザードにてインストール作業を進めます。ここで、画面サイズが小さいために下図のように「続ける」ボタンが押せない現象が発生しました。

そこで、[Alt]+[F7]キーを押下し、カーソルキーまたはマウス操作で画面を移動することで、「続ける」ボタンが押せるようになりました。

Ubuntuのインストールが無事終わったら、VirtualBox用に用意されているGuest Additionsをインストールします。これにより、Windows (ホストOS)とUbuntu(ゲストOS)間でのクリップボードの共有や、任意の画面サイズでUbuntuを利用できるようになるため、必ず行っておきます。
※3 もし容量不足のエラーが発生してしまったら、後から仮想ハードディスクのサイズを拡張をすることもできます。”VirtualBox 仮想ハードディスク拡張”といったキーワードで調べると、具体的な情報を得ることができます。
2.3.RISC-V用ツールチェーンのインストール
ここまででUbuntuが利用できるようになりました。ここからは具体的に開発用のソフトをインストールしていきます。まず、以下のように入力してRISC-V用ツールチェーンのインストールを行います。
export RISCV=$HOME/riscv/tools
export PATH=$RISCV/bin:$PATH
sudo apt -y update
sudo apt -y install git autoconf automake autotools-dev curl python3-pip python3 libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev git
git clone --recursive https://github.com/riscv-collab/riscv-gnu-toolchain.git
cd riscv-gnu-toolchain && \
mkdir build && cd build && \
../configure --prefix=$RISCV
make -j$(nproc)
2.4.Rustのインストール
以下のように入力しRust用インストーラであるrustupをインストールします。
sudo apt -y install curl
curl https://sh.rustup.rs -sSf | sh
以下のようなプロンプトが表示されたら、デフォルトの’1’を入力します。
1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>1
rustupコマンドによってインストールする対象はTock Getting Started Guideに習って”nightly-2022-10-09”とします。
source "$HOME/.cargo/env"
rustup install nightly-2022-10-09
2.5.Tockのインストール
最初に、Tockを開発ボードにプログラミングするためのツールであるTockloaderをインストールします。TockloaderはPythonアプリケーションであり、Pythonパッケージ マネージャー(pip) を使用してインストールします。
pip3 install --upgrade tockloader --user
grep -q dialout <(groups $(whoami)) || sudo usermod -a -G dialout $(whoami) # Note, will need to reboot if prompted for password
source $HOME/.cargo/env
export PATH=$HOME/.local/bin:$PATH #tockloader path
次に、Tock一式をGitHubから取得します。
git clone https://github.com/tock/tock.git
無事Tockが取得ができたら、HiFive1 RevBボード用のビルドを行います。
cd tock/boards/hifive1
make
2.6.Tock用ユーザーランドのインストール
TockはC言語またはRustのいずれかでユーザーランドアプリケーションを作成することができます。それぞれのために、以下に示すユーザーランドライブラリが用意されています。
- libtock-c
C言語用ユーザーランドライブラリ - libtock-rs
Rust用ユーザーランドライブラリ
それぞれのユーザランドライブラリを以下のようにしてインストールします。
cd $HOME
git clone https://github.com/tock/libtock-c.git
git clone --recursive https://github.com/tock/libtock-rs
3.QEMUによる動作確認
こちらの説明によると、HiFive1 RevBボード用のアプリケーションをQEMUを使って動作させることができそうです。QEMU上でlibtock-rsに含まれるサンプルプログラムを動作させることで、Tockの動作確認を行っていきます。
3.1.QEMUのインストール
まず、QEMUをインストールします。今回は、こちらの説明にあるようにTock内に用意されている仕組みを利用してQEMUを構築することにします。以下のようにQEMUのビルドに必要となるパッケージをインストールします。
sudo apt-get update -y
sudo apt install -y meson libpixman-1-dev pkg-config libglib2.0-dev qemu-system-misc
次に、libtock-rsディレクトリで”make setup”を行うことで、libtock-rsのビルド環境構築とQEMUのビルドが合わせて行われます。QEMUのビルドは少々時間がかかるためしばらく待ちます。
cd libtock-rs
make setup
最後に、今回ビルドしたQEMUを利用できるようにします。
cd tock/tools/qemu
sudo make install
export PATH=/usr/local/bin:$PATH
3.2.サンプルプログラムのビルド
libtock-rsに含まれる、Rustで書かれたサンプルプログラム”console”(※4)をビルドします。
cd $HOME/libtock-rs
make hifive1 EXAMPLE=console
tar xf target/riscv32imac-unknown-none-elf/release/examples/console.tab
※4 こちらの手順ではサンプルプログラムとして”hello_world”が示されていましたが、現在同等のサンプルプログラムは”console”に置き換わっているようです。
3.3.サンプルプログラムの実行
QEMUを使ってサンプルプログラムを実行します。
cd $TOCK_ROOT/boards/hifive1
make APP=~/libtock-rs/riscv32imac.tbf qemu-app
以下に実行結果を示します。

このように、”Hello World”という文字列が出力されることを確認できました(※5)。
※5 QEMUを終了するには、[Ctrl]+[A]を押下後、[X]キーを押下します。
4.まとめ
いかがでしたでしょうか。今回はRustで記述された組込み向けOSであるTockの構築方法、構築手順についてご紹介しました。そして、QEMUを使ってRISC-V用に構築したTockを動かし、さらにその上でRustで書かれたサンプルプログラムが動作する様子までお伝えしました。次回はいよいよ、SiFive RISC-Vが搭載されたボード上で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設計ソリューションサービス紹介は こちら