FM3用TOPPERS/ASPをMacでビルドする

エミュレータが確保できたので、続いてビルド環境を用意します。

Macでarm開発をするにはいろいろやり方があるようです。Eclipseでも最近ではCDTとかGNU ARM Eclipse Plug-inといった気の利いたものもあって便利そうですが、相変わらずEmacsで暮らしている私はそういう近代的な環境のことはよくわからないので、まずはターミナルからコマンドラインでビルドできるようにします。

yagartoのインストール

そもそもarmのクロスコンパラからしていろいろあるようですが、yagarto(http://www.yagarto.de/)は必要なコマンドをまとめてダウンロードできて便利そうなので、これを使います。

ダウンロードしたdmgファイルをダブルクリックすると、「yagarto-4.6.2.app」などと書かれたファイルが入ったフォルダが見つかります。この.appファイルがyagartoのもろもろを固めたもので、これをインストールしたいディレクトリにコピーし、実行します。

yagarto同梱のドキュメントでは「~/yagarto/」というディレクトリを作ってそこに.appファイルを置いてるようなので、これを真似します。そうすると、「~/yagarto/yagarto-4.6.2/」というディレクトリができます。その下のbin/にあるのが実行ファイルになるので、そこにpathを通します。

export PATH="$PATH:$HOME/yagarto/yagarto-4.6.2/bin"
export PATH="$PATH:$HOME/yagarto/yagarto-4.6.2/tools"

↑この辺りを.bash_profileなりなんなりに記述しておいてください。

無事インストールできたか、試してみます。

$ arm-none-eabi-gcc --version
arm-none-eabi-gcc (GCC) 4.6.2
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

動いてるようですね。これでarm-none-eabi-gccなどが使えるようになりました。おめでとうございます。

TOPPERS/ASPの入手とビルド

FM3用のTOPPERS/ASPのソースはまとまったファイルとしては(まだ)取得できるようになっていません。以下の2つを合わせて利用します。

TOPPERS/ASPカーネル簡易パッケージのダウンロード http://www.toppers.jp/asp-e-download.html より:

  • STBEE(Strawberry Linux)簡易パッケージ(開発環境: GCC) asp_stbee_gcc-20120310.tar.gz

Interface7月号 DVDより:

  • asp_cqbbel_mp3.zip

この2つのファイルをどこか同じディレクトリに置いてから、以下を実行します。

## それぞれのファイルを展開
$ tar xvfz asp_stbee_gcc-20120310.tar.gz 
$ unzip asp_cqbbel_mp3.zip
## asp_cqbbel_mp3内のaspのターゲットファイルをコピー 
$ cp -r asp_cqbbel_mp3/asp/target/cq_frk_fm3_gcc asp/target asp/
## aspのコンフィグレータのディレクトリに移動
$ cd asp/cfg
## コンフィグレータをビルド
$ ./configure
$ make
## 元に戻ってaspビルド用のディレクトリを作成
$ cd ..
$ mkdir OBJ
## aspビルド用のディレクトリに移動
$ cd OBJ
## configure; make denend; makeを実行
$ ../configure -T cq_frk_fm3_gcc
$ make depend
$ make

ちょっと長いですが、これを一通り実行すると、OBJ/のディレクトリ直下にaspというファイルができます。これがFM3向けの実行ファイルになります。

先ほどのエミュレータで試してみましょう。aspファイルをQEMU_FM3ディレクトリの直下にコピーします。先ほど試したLEDsample.outと同じディレクトリ階層です。

$ cp asp 【適当なパス】/QEMU_FM3/

さらにQEMU_FM3ディレクトリ直下のLEDsample.shを作ったところに、QEMUFM3_IMAGE_FILEの値だけ変えた以下の様なファイルasp.shを作ります。

#!/bin/sh

java -jar FM3_CPU.jar &

QEMUFM3_PORT_MONITOR="1200"
QEMUFM3_PORT_GPIO="1201"
QEMUFM3_PORT_UART0="1202"
QEMUFM3_PORT_UART3="1203"
QEMUFM3_PORT_UART4="1204"

QEMUFM3_MACHINE_NAME="cq-frk-fm3"
##QEMUFM3_MACHINE_NAME=cq-frk-fm3-ex

QEMUFM3_IMAGE_FILE="asp"

#QEMUFM3_

./qemu-system-arm \
        -S -M $QEMUFM3_MACHINE_NAME \
        -kernel $QEMUFM3_IMAGE_FILE \
        -nographic \
        -chardev socket,server,host=0.0.0.0,port=$QEMUFM3_PORT_GPIO,id=fm3gpio,nowait \
        -device fm3-gpio-control,chardev=fm3gpio \
        -monitor telnet:0.0.0.0:$QEMUFM3_PORT_MONITOR,server,nowait \
        -serial telnet:0.0.0.0:$QEMUFM3_PORT_UART0,server,nowait \
        -serial telnet:0.0.0.0:$QEMUFM3_PORT_UART3,server,nowait \
        -serial telnet:0.0.0.0:$QEMUFM3_PORT_UART4,server,nowait

これで準備はできました。実行してみます。

$ chmod 755 asp.sh
$ ./asp.sh

ポートはそのままOKを押しておきます。今回はLEDは光りません。

ちゃんと動いているかどうかを確認するには、1204番ポートにtelnetでつないでみます。

$ telnet localhost 1204
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
task1 is running (015).   |
task1 is running (016).   |
task1 is running (017).   |
task1 is running (018).   |
task1 is running (019).   |
task1 is running (020).   |
task1 is running (021).   |
task1 is running (022).   |
task1 is running (023).   |
task1 is running (024).   |
task1 is running (025).   |

いつものsample1の出力が流れてきます。
「r」キーを押すとちゃんとローテートしてくれます。

task1 is running (146).   |
task1 is running (147).   |
task1 is running (148).   |
#rot_rdq(three priorities)
task2 is running (001).     +
task2 is running (002).     +
task2 is running (003).     +
task2 is running (004).     +
task2 is running (005).     +
#rot_rdq(three priorities)
task3 is running (001).       *
task3 is running (002).       *
task3 is running (003).       *
#rot_rdq(three priorities)
task1 is running (149).   |
task1 is running (150).   |
task1 is running (151).   |
task1 is running (152).   |
#rot_rdq(three priorities)
task2 is running (006).     +
task2 is running (007).     +

こんな感じで、Mac上でも無事にビルドからエミュレータでの実行までが一通りできるようになりました。