HiFive1でZephyr
HiFive1とは,SiFiveによって開発されたRISC-V搭載のArduino互換ボードである. 一方,Zephyrは,Linux Foundationにより開発が進められている組み込み向けOSである. upstreamのZephyrはHiFive1に対応している. ここでは,ZephyrをHiFive1向けにビルドしてみる.
ホスト環境はx86_64で
Distributor ID: Ubuntu
Description: Ubuntu 16.04.4 LTS
Release: 16.04
Codename: xenial
である.
RISC-V向けtoolchainのビルド
最初にRISC-V向けのtoolchainをビルドする.
基本的に以下のREADME通り.
$ git clone --recursive https://github.com/riscv/riscv-gnu-toolchain
$ sudo apt install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev
ここでは$HOME/rv32
以下にインストールすることとする.
ターゲットのHiFive1は32-bit RV32IMAC
である.
$ ./configure --prefix=$HOME/rv32 --with-arch=rv32imac --with-abi=ilp32d
$ make linux
Zephyrの取得と環境構築
以下の通り,必要となるパッケージをインストールする.
$ git clone https://github.com/zephyrproject-rtos/zephyr.git
$ sudo apt install git cmake ninja-build gperf ccache doxygen dfu-util device-tree-compiler python3-ply python3-pip python3-setuptools python3-wheel xz-utils file make gcc-multilib autoconf automake libtool
$ cd zephyr
$ pip3 install --user -r scripts/requirements.txt
Applicationのビルド
以下の通り,環境変数を与える.
$ cd hello/build
$ export ZEPHYR_BASE=~/src/zephyr
$ export BOARD="hifive1"
$ export ZEPHYR_TOOLCHAIN_VARIANT=riscv32
$ export GCCRISCV32_TOOLCHAIN_PATH=~/rv32
$ cmake "Unix Makefies" ..
$ make
これで,ビルドされbuild/zephyr/zephyr.elf
が生成される.