Mbed ローカルコンパイルバトル
概要
Mbedのローカルコンパイルに関しては公式でドキュメントがあるように見せかけて、書いてある通りにやっても上手く行かなかったりする。
そもそも現行のMbedはMbed OS 5がメインストリームで開発されており、LPC11u35含む一部マイコンはこの系列に対応していない。
これら旧式のMbedライブラリは所謂Mbed OS 2系としてサポ終みたいな扱いになっており、何かと不遇である。
色々手こずったので備忘録を残す。
手順
Mbed CLIを入れる
開幕いきなり、Mbed OS 2はMbed CLIの古いバージョンであるCLI 1を入れないといけない。
こいつがPythonなので、環境変数云々でトラブったりするかもしれないが、よしなになんとかしよう。
Windows向けならインストーラがあるので、こいつを叩けばOK。…Python 2.7系かよ!勘弁してくれや。
https://os.mbed.com/docs/mbed-os/v6.9/build-tools/install-and-set-up.html
コマンドが通るようになったらOKだ。
> C:\Users\Roor>mbed --version
1.8.3
プロジェクト立ち上げ
適当なディレクトリでmbed newコマンドを叩くわけだが、この時Mbed OS 2系向けにプロジェクトを作る場合は–mbedlibオプションが要る。
> mbed new your-project-name --mbedlib
[mbed] Working path "D:\[略]" (directory)
[mbed] Program path "D:\[略]"
[mbed] Creating new program "mbedcli-11u35" (git)
[mbed] Adding library "mbed" from "https://mbed.org/users/mbed_official/code/mbed/builds" at branch/tag "tip"
[mbed] Downloading library build "65be27845400" (might take a while)
[mbed] Unpacking library build "65be27845400" in "D:\[略]\your-project-name\mbed"
[mbed] Unpacking library build "65be27845400" in "D:\[略]\your-project-name\mbed"
[mbed] Updating reference "mbed" -> "https://mbed.org/users/mbed_official/code/mbed/builds/65be27845400"
[mbed] Couldn't find build tools in your program. Downloading the mbed 2.0 SDK tools...
この時にょろっとMbedのライブラリをぶちこんでるが、こいつがえらい容量あってもう既にげんなりする。
プロジェクトが上がったらそのディレクトリに移動して、試しに対応しているプラットフォーム一覧を出してみよう。
> cd your-project-name
> mbed compile --supported
この時問題なくターゲットモジュールがどかっと出てきたらOK。
もしここで、何かしらのPythonモジュールが足りねぇと怒られたら、随時pip installすれば良い。
例えば今回はpyelftoolsが無いと怒られたのでそのまんま叩く。
https://os.mbed.com/docs/mbed-os/v6.9/build-tools/troubleshoot.html
> pip install pyelftools
ライブラリを修正する
どういうわけだか落ちてくるMbed OS 2ライブラリは不完全で、一部のファイル・フォルダが抜けている。
リポジトリには載ってるんだが、実際に落としてくるZIPの中には入っていない。嘘だろお前!?
https://os.mbed.com/users/mbed_official/code/mbed/
で、何故か抜けているフォルダを直接指定するとファイルが落とせるので、手動でそいつらを落として足してやる。
drivers、hal、platformの3つのフォルダと、ルートディレクトリにあるmbed.h、targets.jsonの5つだ。
https://os.mbed.com/users/mbed_official/code/mbed//raw-file/65be27845400/targets.json
https://os.mbed.com/users/mbed_official/code/mbed//raw-file/65be27845400/mbed.h
https://os.mbed.com/users/mbed_official/code/mbed//archive/65be27845400.zip/drivers/
https://os.mbed.com/users/mbed_official/code/mbed//archive/65be27845400.zip/hal/
https://os.mbed.com/users/mbed_official/code/mbed//archive/65be27845400.zip/platform/
プロジェクトのディレクトリから見て、./mbed/65be27845400/
の位置に上記5ファイルをコピー。
これでようやく下準備が終わる。
たのしいビルド
main.cppをプロジェクトのルートディレクトリに置く。
今回はLPC11u35の例なので、11u35向けにビルドしてみた。
ちなみに11u35は_401と_501の二種類があるが、何が違うのかさっぱりわからん。
> mbed compile -m LPC11U35_501 -t GCC_ARM
(中略)
Image: .\BUILD\LPC11U35_501\GCC_ARM\mbed_blinky.bin
ようやくbinが出来た。あとはこのbinファイルを書き込めば良い。