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 でコンパイルできるので最低限は良しといった感じです。
参考