mbed ローカルビルド環境 (Ubuntu15.04)

だいぶ前に買ったまま放置していた mbed があったことを思いだし、mbed の勉強を始めました。

mbed はネット環境があれば Web ブラウザから開発できますが、コードは Emacs で書きたいのでローカルでビルドする方法を調べました。

まあデベロッパーサイト の Handbook に書いてあったのですが、gcc-arm-none-eabi を入るだけで良いとのことなので、以下のコマンドで最新版の gcc-arm-none-eabi をインストールしました。
OS は Ubuntu15.04 64bit です。

sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded
sudo apt-get update
sudo apt-get install gcc-arm-none-eabi

私はこれで最新版がインストールできましたが、環境によっては古いバージョンがインストールされることもあるようなので、その場合は以下のようにしてインストールします。

sudo apt-get remove gcc-arm-none-eabi
sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded
sudo apt-get update
sudo apt-get install gcc-arm-none-eabi=4.9.3.2015q2-1vivid1

コンパイルできるか確認するため、サイトから適当なプログラムをエクスポートしてきます。
エクスポートには Repository toolbox の Export to desktop IDE をクリックし、Choose toolchain に GccArm を選択して Export ボタンをクリックします。

この際、最初に目に付いた HelloWorld をエクスポートしてきたのですが、コンパイルすると以下のようなエラーが起きました。

arm-none-eabi-gcc --specs=nosys.specs -mcpu=cortex-m3 -mthumb  -Wl,--gc-sections --specs=nano.specs -u _printf_float -u _scanf_float -Wl,--wrap,main -Wl,-Map=HelloWorld.map,--cref -T./mbed/LPC1768/GCC_ARM/LPC1768.ld -L./mbed/LPC1768/GCC_ARM  -o HelloWorld.elf main.o mbed/LPC1768/GCC_ARM/core_cm3.o mbed/LPC1768/GCC_ARM/startup_LPC17xx.o mbed/LPC1768/GCC_ARM/cmsis_nvic.o mbed/LPC1768/GCC_ARM/system_LPC17xx.o -lmbed -lcapi  -lstdc++ -lsupc++ -lm -lc -lgcc -lnosys -lmbed -lcapi  -lstdc++ -lsupc++ -lm -lc -lgcc -lnosys
/usr/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7-m/crt0.o: In function `_start':
(.text+0x4a): undefined reference to `__wrap_main'
collect2: error: ld returned 1 exit status
Makefile:59: recipe for target 'HelloWorld.elf' failed
make: *** [HelloWorld.elf] Error 1

これはどうもバグなのかエクスポートされたフォルダ構成が間違ってる(古い?)のが原因のようでした。

HellowWorld のフォルダ構成

HelloWorld
└ LPC1768
   └ GCC_ARM

それで良くサイトを見たら ここ に SDK の説明があり、mbed_blinky という例題がちゃんとありました。
mbed_blinky をエクスポートし、make してみると今度は問題なくコンパイルされました。
Handbook と Cookbook はちゃんと読まなきゃダメですね。

mbed_blinky のフォルダ構成

mbed_blinky
└ mbed
   └ TARGET_LPC1768
      ├ TAGET_NXP
      │ └ TARGET_LPC176X
      │    └ TARGET_MBED_LPC1768
      └ TOOLCHAIN_GCC_ARM

後は生成された .bin ファイルを mbed にコピーするだけで OK です。
これで Emacs からコードを書き、M-x smart-compile でコンパイルできるので最低限は良しといった感じです。

参考

コメント

Comments powered by Disqus
書籍更新情報
2016-10-21
Pythonによる科学技術計算 基礎編
PDF版の販売を開始しました。
販売ページはこちら

2016-09-09
Pythonによる科学技術計算 基礎編
1.2版への更新が可能になりました。
サポートページはこちら
電子書籍
Pythonによる科学技術計算 基礎編
Kindle ストア、Leanpubで販売中です
Pythonによる科学技術計算 基礎編
PDF版の販売はこちら
同人誌
技術書典(2016/6/25)
Emacs/org-modeのPDF作成術
電子版をBOOTHで販売中です
Emacs/org-modeのPDF作成術
Share