前回は、HiFive1を使ったアプリケーション開発の最初のステップを紹介しました。前回はArduinoの環境を使ってHiFive1を動作させました。
前回はArduinoの開発環境を使ったわけですが、HiFive1を使ったアプリケーション開発には、様々な方法があります。Arduino IDEを使ってプログラムを書き込む方法をはじめ、EclipseベースのGUI環境であるFreedom Studioを使うとGUI環境でプログラムを開発することが出来ます。その一方で、GUIを使うのは面倒だし、Linuxなどを使っていればコマンドラインからすべて操作したいという人はたくさんいると思います。
HiFive1のチップ自体はFreedom SoCというプラットフォームなのですが、Freedomプラットフォームのための開発環境はSiFive社がGitHubに公開しています。32-bit版と64-bit版で分かれており、
- 32-bit版:freedom-e-sdk
- 64-bit版:freedom-u-sdk
32-bit版はHiFive1などの32‐bit版のための開発環境、64-bit版はHiFive Unleashedなどの64‐bit版のための開発環境となっています。
今回はfreedom-e-sdkを使ってプログラムを開発してみましょう。開発環境の構築方法から、プログラムのコンパイル、HiFive1へのアップロード方法などを見ていきます。
目次
Freedom SDK環境のセットアップ
freedom-e-sdkは、テストプログラム・デバッグ環境・コンパイラなどの環境をすべて含んでいます。GitHubからすべてダウンロードすると結構な量なのですが、今回はとりあえずすべて入手して、環境を構築してみましょう。freedom-e-sdkはgitコマンドで以下のようにしてダウンロードできます。
git clone https://github.com/sifive/freedom-e-sdk.git --recurse-submodules
RISC-V GCCなどのコンパイラツール群もすべてダウンロードするため、かなりの時間がかかります。使い方を見るためには、とりあえずリポジトリのルートディレクトリでmake help
と入力してみましょう。
$ make help SiFive Freedom E Software Development Kit Makefile targets: tools [BOARD = freedom-e300-hifive1]: Install compilation & debugging tools to target your desired board. toolchain-clean: Removes the installed toolchain. openocd-clean: Removes the locally built instance of OpenOCD. uninstall: Uninstall the compilation & debugging tools. software [PROGRAM=demo_gpio BOARD=freedom-e300-hifive1]: Build a software program to load with the debugger. clean [PROGRAM=demo_gpio BOARD=freedom-e300-hifive1]: Clean compiled objects for a specified software program. upload [PROGRAM=demo_gpio BOARD=freedom-e300-hifive1]: Launch OpenOCD to flash your program to the on-board Flash. run_openocd [BOARD=freedom-e300-hifive1]: run_gdb [PROGRAM=demo_gpio BOARD=freedom-e300-hifive1]: Launch OpenOCD or GDB seperately. Allows Ctrl-C to halt running programs. dasm [PROGRAM=demo_gpio]: Generates the dissassembly output of 'objdump -D' to stdout. For more information, visit dev.sifive.com
ツールのセットアップ
まずは、make tools
と入力して、RISC-Vコンパイラ群をセットアップしましょう。これは一からツールのコンパイルが始まるので、数時間必要です。
freedom-e-sdkの構成
このリポジトリの構成を以下に示します。RISC-V向けプログラムのコンパイル環境を提供しており、ベンチマークプログラムのDhrystoneやCoremarkをコンパイルして動作させるまでのフローも公開してあります。これを実行してみましょう。
サンプルプログラムをコンパイルしてHiFive1で動作させてみよう
まずは、led_fade
プログラムをコンパイルしてHiFive1にアップロードしてみましょう。led_fade
のソースコードは、freedom-e-sdk/software/led_fade/led_fade.c
に格納されています。
このプログラムは、HiFive1に乗っているLEDを制御するプログラムです。さっそくコンパイルしてみましょう。コンパイルするためには、make software PROGRAM=[プログラム名]
と入力します。
$ make software PROGRAM=led_fade
問題なくコンパイルできました。このプログラムをHiFive1にアップロードするためには、make upload PROGRAM=[プログラム名]
と入力します(デバイスにアクセスするために先頭にsudo
を付ける必要がある場合があります)。
$ sudo make upload BOARD=freedom-e300-hifive1 PROGRAM=led_fade ... Start address 0x20400000, load size 3202 Transfer rate: 1 KB/sec, 457 bytes/write. halted at 0x20400004 due to step halted at 0x20400004 due to step shutdown command invoked shutdown command invoked A debugging session is active. Inferior 1 [Remote target] will be detached. Quit anyway? (y or n) [answered Y; input not from terminal] Warn : Flash driver of onboard_spi_flash does not support free_driver_priv() Remote connection closed Successfully uploaded 'led_fade' to freedom-e300-hifive1.
ちょっと分かりにくいですが、ボードの下部についているLEDがゆっくりと色を変えています。また、シリアルコンソールを確認するとled_fadeが出力したメッセージが表示されているので、動作が確認できると思います。
ベンチマークプログラム「Coremark」をコンパイルして、HiFive1で動作させる
Coremarkはプロセッサの標準的なベンチマークプログラムです。Coremarkはfreedom-e-sdkリポジトリをダウンロードしただけではコンパイルできず、Coremark本体をダウンロードしてディレクトリに配置する必要があります。あとはSDKの提供するMakefileを実行するだけで、コンパイルとボードへの書き込みを行うことが出来ます。
Coremarkのソースコードは、GitHubに公開されています。こちらをダウンロードしてディレクトリに置いてみます。
$ cd software/coremark/ $ git clone https://github.com/eembc/coremark.git coremark_origin $ for f in `ls -1 coremark_origin/*.h`; do ln -s ${f}; done $ for f in `ls -1 coremark_origin/*.c`; do ln -s ${f}; done $ cd -
次に、ベンチマークプログラムをビルドして、HiFive1にアップロードしてみましょう。ベンチマークプログラムのコンパイルは、freedom-e-sdkリポジトリのルートディレクトリでmake software
を実行します。ここで、PROGRAM=[program名]
変数を設定することで、software/[program名]
ディレクトリに格納されているプログラムがビルドされます。
$ make software PROGRAM=coremark
これでsoftware/coremark/
にバイナリが作成されました。これをHiFive1にアップロードするためには、make upload
とタイプします。ここでも、PROGRAM=[program名]
変数を設定することで、software/[program名]
ディレクトリに格納されているバイナリをアップロードします。
$ make upload PROGRAM=coremark
このときプログラムの出力結果はシリアルコンソールに出力されるのですが、このUARTの速度は115200に設定しておきます。HiFive1のシリアルポートと通信するために、ここではscreenコマンドを利用します。UARTを受信できるのならどのようなプログラムや環境を使ってもかまいません。ただし、UARTの速度は115200bpsとなるように設定してください。
コマンドライン上から以下のように入力して、シリアルコンソールを表示します。
$ screen /dev/ttyUSB1 115200
すると、以下のような出力がシリアルコンソールから得られました。ただしく動作することが確認できました。
終わりに
今回は、freedom-e-sdk環境を使ってHiFive1を動かしてみました。freedom-e-sdkを使うと、C言語を使って簡単にプログラムを作ることができます。自分のCプログラムを動かしたい場合は、freedom-e-sdk環境は非常に便利な環境だと思います。
こちらも是非
“もっと見る” RISC-V編
GUIの開発環境を使ってRISC-Vを動かしてみよう
Arduino IDEは他のArduinoプラットフォームとの親和性が良く、Arduinoチップとして楽しむならば十分な環境です。また、Freedom-E-SDKはコンソールを使ってプログラムのコンパイルやアップロードを行う環境で、初心者にはややハードルが高いですが、柔軟なプログラムを開発することができます。
Arduino互換RISC-Vプロセッサ“HiFive1”を使ってみる
RISC-Vを使うにはいろんな手段があります。ASICチップが乗っているボードを買ってくることもできますし、FPGAにデザインを焼いて動作させることができます。特にFPGAを使う場合は、自分で簡単にカスタマイズすることもできますので独自のRISC-V環境を作ることもできます。
RISC-Vの実装
RISC-Vを使うにはいろんな手段があります。ASICチップが乗っているボードを買ってくることもできますし、FPGAにデザインを焼いて動作させることができます。特にFPGAを使う場合は、自分で簡単にカスタマイズすることもできますので独自のRISC-V環境を作ることもできます。