nxtOSECの開発環境構築 for Mac OS X

先週末、ETロボコン技術研修会に向けてLinuxでの開発環境構築を試みた。
nxtOSEKの開発環境を構築
nxtOSEKの開発環境を構築 その2
結果は惨敗。
ARM系のCPU向けコンパイルまでは無事成功したものの、NXTへの転送がうまくいかなかった。
(おそらくNXT側を別PCでファームウェア変更していたので、それが原因かも。後日追記予定)
2013.3.21追記: Linuxでも転送確認できました。ファームウェアを標準のものから変更していたのが原因でした。

さて、ここからが本題。
先のLInuxにおける開発環境構築は、実はMacでのそれの布石でした。
Macは研究室で支給されたものなので、壊したくないw
Linuxで問題となっていた、NXTへの転送問題も、MacならREGOが直々にドライバを用意してくれているので安心。
そこで今回は、「nxtOSECの開発環境構築 for Mac OS X」を記しておきます。

0.アウトライン

  1. GNU ARM Toolchainのインストール
    ARM系CPU向けのコンパイラなど。プログラムの開発環境。
  2. nxtOSEKの開発環境を整備
    「nxtOSEK is an open source platform for LEGO MINDSTORMS NXT」との記述がある。自分の認識ではNXTのOS...?
  3. NXT Driverのインストール
    NXTのドライバ。プログラム転送の基盤。
  4. NeXTTool(転送ツール)のインストール
    NXTへプログラムを転送するためのツール。NXT Driverを先にインストールしておくこと。

1.GNU ARM Toolchainのインストール

build_am_toolchain.shを用いてgcc, binutils, nrelibをインストールします
build_am_toolchain.sh: http://lejos-osek.sourceforge.net/installation_linux.htm
事前にXCodeXcode Developer Toolsをインストールしておく。全てGUIなので簡単に済むはず。

以降の操作は、MacPortsを使うと簡単にインストールできます。
参考: http://oda.gr/archives/tag/nxtosek

まずはXCodeに付属しているIntel系CPUのgccのバージョンを確認し、これにしたがってbuild_am_toolchain.shを一部変更
変更箇所はbuild_am_toolchain.shにコメントアウトで丁寧に書いてありあました。
build_am_toolchain.shを実行すると必要なファイル群がダウンロード、コンパイルされる。
同階層にsrcディレクトリが生成されるので、念のため、中にgcc, binutils, nrelibが揃っているか確認。
なければダウンロードの時点で、何かエラーが起きているはずなので、手動でダウンロードして、src内に配置、スクリプトを再実行。
自分の場合は、まずbinutilsがダウンロード失敗していたので手動で配置。
しかしコンパイルでも、以下のエラーが出てきて失敗

configure: error: Building GCC requires GMP 4.1+ and MPFR 2.3.2+

要求されたパッケージをインストールする

brew install GMP
brew install MPFR

MPFRがGMPに依存しているため、一度にbrew install GMP MPFRとすると、エラーが出るかも。というかエラーがでた。分けてやるとスムーズ。
インストールできたらbuild_am_toolchain.shを再実行。なんとか完了。

2.nxtOSEKの開発環境を整備

nxtOSEKをダウンロード、解凍、配置
nxtOSEK: http://sourceforge.net/projects/lejos-osek/files/nxtOSEK/
配布サーバーのポリシーにより、sg.exeが含まれていないのでosek_os-1.1.lzhからコピー
sg.exeは、nxtOSEKにおけるタスク管理のoilファイルパーサーとして動作している...らしい。必須。
osek_os-1.1.lzh: http://www.toppers.jp/osek-download.html

nxtOSEK/ecrobot/tool_gcc.makを編集して、gnuarmのパスを設定
具体的にはbuild_am_toolchain.shの親ディレクトリのパスを指定すればOK
変更箇所はファイルにコメントで書いてあります。

sg.exeはwindows用のバイナリなのでWineBotterを導入する必要がある。
WineBotter: http://winebottler.kronenberg.org/
単にインストールするだけではなく、さらに今回はWineBotterを使うためにパスを通す必要がある。
以下のコマンドは一時的に環境変数を変更しているだけなので、.zshrcなりシェル設定ファイルにパスを通す処理を追記しておくと便利。

export PATH=$PATH:/Applications/Wine.app/Contents/Resources/bin

また、本来Wineを使う部分をWineBottlerで代用しているので、再びtool_gcc.makを編集してWineの設定部分を修正。
ただし、WineBottlerはバージョンアップに伴ってstartwineが削除され、Wine consoleに変更されたので注意。
参考: http://www.aribeiro.info/content/nxtosek-mac-osx-106-snow-leopard?page=32
参考URLは英語ですが簡単なので多分分かるはず。要望があれば設定変更箇所もアップします。
make allが通れば成功

3.NXT Driverのインストール

LEGOが用意してくれています。GUIなのでササッと済ませて次へ。
FantomDriver: http://mindstorms.lego.com/en-us/support/files/Driver.aspx

4.NeXTTool(転送ツール)のインストール

NeXTTool: http://bricxcc.sourceforge.net/utilities.html
NeXT Toolsではないので注意
NeXTToolはコマンドラインでプログラム転送を可能とするもの。
.rxeファイルをfxeflashで一発転送可能なので便利。
NeXT Toolsでも転送できるが、GUI操作なので無駄が多い。

もう一度tool_gcc.makを編集しNeXTTool系の設定をする

#NEXTTOOL_ROOT = /cygdrive/C/cygwin/nexttool
NEXTTOOL_ROOT = path/to/nexttool
#NEXTTOOL = NeXTTool.exe
NEXTTOOL = nexttool

5.確認

以上で環境構築はすべて終了。
確認のため、nxtOSEK/sample_c/helloworldでmake allして、./rxeflash.shを実行してみる。
もちろんNXTを接続することを忘れずに。