Mbed OS 2のサポートがいつ終わっても良いようにローカル環境を構築する方法【改訂版】


この記事は、こちらの改訂版です。

はじめに

最初のバージョンのMbed OS 5 がリリースされてから約3年が経ちました。Mbed OS 5 では、四半期ごとに比較的大きな機能を追加するFeature releaseと、二週間ごとに新しいボードの追加やバグフィックスが含まれるPatch releaseを行っています。

一方で、Mbed OS 2 (Mbed classic)は既にメンテナンスリリースが終了しています。

主要なライブラリやサンプルコードはMbed OS 5 への移行がほぼ終了していますが、個人での開発や古いソフトウェア資産の継続利用の目的で、Mbed OS 2 を使い続けなければならないケースもあるかもしれません。

ここでは、オンラインコンパイラではなくローカルPCにMbed OS 2のビルド環境を構築し、Mbed 開発サイトの状態になるべく依存しない閉じた環境での運用方法を説明します。古いプロジェクトもローカル環境で保守することが出来ます。

Mbed対応ボードは、スイッチサイエンス製のmbed LPC1114FN28を使用します。

事前準備

Mbed 2のビルド環境は、python 2のみサポートされているので、python 3との共存も考えてpyenvを導入します。インストール方法は解説記事が色々とありますので、そちらを参考にしてください。python のバージョンは、2.7.15を使用しました。

pyenv導入後は、(python 2なので)virtualenvをインストールします。

pip install virtualenv
python -m virtualenv .venv2
.venv2\Script\activate

必要なモジュールをインストールします。

pip install mbed-cli==1.10.1 pyelftools jsonschema

GNU Arm Embedded Toolchainをインストールします(Mbed 2の場合は、gcc-arm-none-eabi-6-2017-q2-updateが推奨されています)。

Mercurial SCMをインストールします。
https://www.mercurial-scm.org/downloads

Git SCMをインストールします。
https://git-scm.com/downloads

プロジェクトの作成

プロジェクトディレクトリを作成し、移動します。

mkdir my_project
cd my_project

以下のコマンドで、ビルド用のツールをtoolsディレクトリにダウンロードします。

hg clone https://os.mbed.com/users/mbed_official/code/mbed-sdk-tools/ tools

必要なモジュールをインストールします。

pip install -r .\tools\requirements.txt

以下のリンクをクリックして、Mbed 2ライブラリ(プリビルドアーカイブ)をダウンロードします。
https://dl.dropboxusercontent.com/s/p3pygps0uqfc5hq/mbed-e95d10626187.zip

zipファイルを展開し、先ほどのプロジェクトディレクトリにコピーします。

動作確認用に以下のようなmain.cpp を作成し、プロジェクトディレクトリに保存します。

#include "mbed.h"

DigitalOut led(LED1);

int main()
{
    printf("hello, Mbed.\n");
    while (1) {
        led = !led;
        wait(0.5);
    }
}

この時点で、プロジェクトディレクトリは以下のような構成になっています。

    ディレクトリ: D:\work\myprog


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2020/04/04     10:50                mbed-e95d10626187
d-----       2020/04/04     10:45                tools
-a----       2020/04/04     10:52            160 main.cpp

mbed compile コマンドでコンパイルします。-mでターゲットボード、-tでツールチェインを指定します。

mbed compile -m lpc1114 -t gcc_arm

[mbed] Working path "D:\work\myprog" (program)
Using targets from D:\work\myprog\mbed-e95d10626187\targets.json
[Error] @,: Compiler version mismatch: Have 9.2.1; expected version >= 6.0.0 and < 7.0.0
Building project myprog (LPC1114, GCC_ARM)
Scan: myprog
Compile [100.0%]: main.cpp
Link: myprog
Elf2Bin: myprog
| Module                           |         .text |     .data |      .bss |
|----------------------------------|---------------|-----------|-----------|
| BUILD\LPC1114                    |     235(+235) |     4(+4) |   16(+16) |
| [fill]                           |     210(+210) |     0(+0) |   12(+12) |
| [lib]\c_nano.a                   |   5166(+5166) | 100(+100) |   21(+21) |
| [lib]\gcc.a                      |   1696(+1696) |     0(+0) |     0(+0) |
| [lib]\mbed.a                     |   2937(+2937) |     4(+4) | 183(+183) |
| [lib]\misc                       |     220(+220) |   12(+12) |   28(+28) |
| mbed-e95d10626187\TARGET_LPC1114 |   4161(+4161) | 264(+264) |   32(+32) |
| Subtotals                        | 14625(+14625) | 384(+384) | 292(+292) |
Total Static RAM memory (data + bss): 676(+676) bytes
Total Flash memory (text + data): 15009(+15009) bytes

Image: .\BUILD\LPC1114\GCC_ARM\myprog.bin

最後に表示されたイメージファイルをターゲットボードに書き込みます。

copy .\BUILD\LPC1114\GCC_ARM\myprog.bin e:

ターゲットにバイナリを直接書き込みたい場合には、ターゲットボードを接続した状態で-fオプションをつけます。

mbed compile -m lpc1114 -t gcc_arm -f

Mbed 2ライブラリのソースからビルドする場合

先ほどの手順と同様にプロジェクトディレクトリを作成して、ビルドツールをダウンロードします。

mkdir myprog_source
cd myprog_source
hg clone https://os.mbed.com/users/mbed_official/code/mbed-sdk-tools/ tools

GitHubに公開されているMbed 2ライブラリのソースコードをダウンロードします。

git clone https://github.com/ARMmbed/mbed-dev

先ほどの手順と同じようにmain.cpp を作成し、プロジェクトディレクトリに保存します。
この時点で、プロジェクトディレクトリは以下のような構成になっています。

    ディレクトリ: D:\work\myprog_source


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2020/04/04     11:07                mbed-dev
d-----       2020/04/04     11:06                tools
-a----       2020/04/04     10:52            160 main.cpp

コンパイル手順は先ほどのコマンド同じです。ターゲットにバイナリを直接書き込みたい場合には、ターゲットボードを接続した状態で-fオプションをつけます。

mbed compile -m lpc1114 -t gcc_arm -f

オンラインIDE上の古いプロジェクトをローカル環境で使用する方法

オンラインIDEのプログラムワークスペースから使用したいプロジェクトを選び、右クリックします。ポップアップメニューから、[プログラムのエクスポート]を選択します。

Export Programダイアログが表示されるので、Export ToolchainからZIP Archiveを選択し、[Export]ボタンを押します(Export Targetは何を選択しても構いません)。

ダウンロードされたZIPアーカイブを展開します。この中から以下を除外したファイルを全てローカル環境のプロジェクトディレクトリにコピーしてください。

mbed(ディレクトリ)
mbed.bld

以下の例を参考にしてください(水色で選択されたファイルをローカル環境に構築したプロジェクトディレクトリにコピーします)。

コンパイルの手順は先ほどと同じです。

以上です。