homebrew
mbed

Homebrewでmbedローカルビルド環境作成

More than 3 years have passed since last update.

mbedに入門してローカルビルドしてみたので、メモ。

開梱〜Lチカまで

mbedを始めましょう!のページを見れば解決するので省略。

ローカルビルド環境を作る

基本的にmbedはオンラインコンパライラを使い、バイナリがサーバーから降ってくるという形で開発を進めます。なので、現場でトラブルが起こり、かつネット接続ができない場合などは切腹するしかないので、ローカルビルド環境をHomebrewでサクっと作ろうと思います。

HomebrewでGCC-ARM ToolChainを入れる

今回はGCCでビルドすることにして、下記Formulaを入れます。

% brew tap nitsky/stm32
% brew install arm-none-eabi-gcc

mbed SDKをクローンしてくる

とりあえずhomeでやります。このリポジトリをクローンします。

% cd ~
% git clone https://github.com/mbedmicro/mbed.git

各種プラットフォーム用ライブラリをビルドする

mbed SDKでは、自分の使用するmbed用ライブラリを事前にビルドする必要があります。
まずはクローンしてきたSDKにユーザ設定ファイルを追加。

% cd mbed
% touch workspace_tools/private_settings.py

このコマンドで、対応しているプラットフォーム+αを確認できます。

% python workspace_tools/build.py -h

例えば、LPC1768のライブラリを作成する場合はこんな感じ。

% python workspace_tools/build.py -m LPC1768 -t GCC_ARM

これでバイナリを作成する環境が整ったので、次はテストプログラムをビルドしてみます。

サンプルプログラムのビルド

まずは、SDKに同梱されているサンプルプログラムのリストを表示してみます。

% python workspace_tools/make.py -L
[  0] MBED_A1: Basic
[  1] MBED_A2: Semihost file system
[  2] MBED_A3: C++ STL
[  3] MBED_A4: I2C TMP102
[  4] MBED_A5: DigitalIn DigitalOut
[  5] MBED_A6: DigitalInOut
[  6] MBED_A7: InterruptIn
[  7] MBED_A8: Analog
[  8] MBED_A9: Serial Echo at 115200
[  9] MBED_A10: PortOut PortIn
[ 10] MBED_A11: PortInOut
.
.

このような形で120個くらいのサンプルプログラムが羅列されます。
次のようなオプションを指定して、0番目のBasicをビルド。

  • -m ターゲット = LPC1768
  • -t ビルド環境 = GCC_ARM
  • -p ソースコード = 0 (番号で指定)
  • -d binの生成ディレクトリ = ~/mbed/bin
% mkdir ~/mbed/bin
% python workspace_tools/make.py -m LPC1768 -t GCC_ARM -p 0 -d ~/mbed/bin

これで、指定した~/mbed/binbasic.binが生成されるはず。
あとはいつもどおり、このbasic.binをmbedに書き込み、リセットをかませばOKです。

自分のプロジェクトのビルド

最後に、自分のプロジェクトをオンラインコンパイラからエクスポートしてきて、ビルドします。この場合、プロジェクト内にターゲットのライブラリが同梱されているので、GCCのToolchainさえ入っていれば、上記のライブラリのビルドはしなくてもOKなんだろうな、たぶん(未確認)。

  • mbed Compiler を開く
  • Program WorkSpace (左のプロジェクトツリー) の所望のプロジェクトを右クリック
  • Export Program
  • ターゲットとToolchainを選択してExport

ダウンロードされたプロジェクトを解凍し、任意の場所に置く。そして、

% cd your_project_path
% make

これでOK。your_project_path直下にyour_project.hexが生成されます。

注意:Yosemiteではbinを書き込めないターゲットあり

こちらのフォーラムにある通り、現時点では、Yosemiteでmbedにプログラムを書き込めません。これに対処すべく、こちらで対策スクリプトを書いてくださっています。ありがとうございます!

最近は、別の解決方法も提案されているようです。daemonを走らせて、通常通りmbedにドラッグ&ドロップ出来るようにする方法のようです(未確認)。

一度やってしまったのでメモ。mbedをつないでいないときにmbed-on-Yosemite.appを使ってしまうと、/Volumes/MBEDなるファイルができてしまい、mbedをつないでもプログラムが書き込めなくなる。/Volumes/MBEDを消せば元通り書けるようになります。

@tedd_okano さんが修正版を作成してくれております。ありがとうございます!

ちなみに

Google先生に聞くと、gcc-arm toolchainは下記のリポジトリがたくさん出てきます。

% brew tap darconeous/embedded
% brew install arm-none-eabi-gcc

しかしながら、2014/12/11時点では、このformulaではビルドがうまくいかない…。

[ERROR] arm-none-eabi-gcc: error: nano.specs: No such file or directory

どうやらこれはUbuntu版のものらしく、かつ、そいつにバグがあるとか。
gcc-4.8.2以降でこうなってしまった、とのこと。
上記リポジトリで参照しているToolChainのバージョンを4.7.4〜4.9.0まで試してみましたが、ダメでした。ググりすぎて参考ページをメモしていないので、詳細は省きます。

参考