Linux における Arm Mbed CLI と eclipse IDE 環境構築 (2020年版)

#はじめに
Linuxにおいては「Mbed CLI」と「IDE環境(eclipse)」を構築する為のインストーラは存在しないため、マニュアルインストールになる。そこで、2020年版の環境構築方法をまとめておく。
※デバッグの為の OCD 設定には 「pyOCD」 と 「Open OCD」 があるが、pyOCDを使った方法で記載する。

##前提条件・環境
1. ubuntu 18.04
2. ターゲットボード : NXP FRDM KL25Z
3. DAP Link 0242 (OpenSDAv2.2)　にターゲットボードOCD Firmware を更新済み。

##Mbed CLI のインストールの流れ
1. 「Mbed CLI」が必要とするツール類のインストール
2. 「Mbed CLI」のインストール
3. コンパイラー（GNU Arm Embedded Toolchain）のインストール
4. 確認（サンプルのビルド）

### 1.「Mbed CLI」が必要とするツール類のインストール
### Git

```
sudo apt install git
```
###  Mercurial

```
sudo apt install mercurial
```
 ※依存関係で python2.7 も 一緒にインストールされる

###  python pip

```
sudo apt install python-pip
```
### 2. 「Mbed CLI」のインストール

```
pip install mbed-cli
```
※mbed コマンドのパスを有効化する為ここで再起動
### 3.コンパイラー（GNU Arm Embedded Toolchain）のインストール
- 以下をダウンロード

GNU Arm Embedded Toolchain: 6-2017-q2-update June 28, 2017
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads

**gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2**

※2020年2月時点では、ツールチェーンバージョンは 6.0.0 以上 7.0.0 未満が推奨。
試しに、ツールチェーンバージョン 9.2.1で mbed compile を行った結果、 Warning で警告される。

```c
[Warning] @,: Compiler version mismatch: Have 9.2.1; expected version >= 6.0.0 and < 7.0.0
```
※この時の mbed ツールのバージョンは「mbed --version」だと "1.10.2"


- 適当なディレクトリを作成しコンパイラーを解凍する

```
mkdir -p ~/opt
tar -xvf ~/Downloads/gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2
```

- システムパスにコンパイラパスを通す

.bashrcの編集

```
vi .bashrc
```
一番最後の行に以下を追加

```
export PATH=$PATH:$HOME/opt/gcc-arm-none-eabi-6-2017-q2-update/bin
```

- パス設定の有効化

```
source .bashrc
```
※又は再起動

- パスが通っている事の確認

```
arm-none-eabi-gcc --help
```

### 4. 確認（サンプルのビルド）

- mbed-os-example-blinkyサンプルのダウンロード

```
mbed import https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-blinky
```

- コンパイル

```
cd mbed-os-example-blinky/
mbed compile -m KL25Z -t GCC_ARM --profile debug
```
コンパイルが終わると以下のような結果となり、バイナリ(elfとbin)が生成される。
![コメント2 2020-02-16 120836.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177092/aa8eb4c4-bf93-fdbc-cdab-32858319a835.png)

##eclipse IDE のインストールの流れ

1. JAVA ランタイムの導入
2. GNU MCU Eclipse IDEのダウンロード
3. サンプルのeclipse へのエクスポート（eclipse で GCC ARM でコンパイル実行する為の Makefileの作成）
4. サンプルのビルド確認
5. pyOCDのインストール
6. udev rulesの設定
7. pyOCDの動作確認
8. eclipseの起動
9. サンプルのインポート
10. Debug Configureation
11. Debugでのターゲット書き込みと起動

###1. JAVA ランタイムの導入

```
sudo apt install default-jre
```

###2. GNU MCU Eclipse IDEのダウンロード

- 以下をダウンロード

 GNU MCU Eclipse IDE for C/C++ Developers 2019-12 20200127
https://github.com/gnu-mcu-eclipse/org.eclipse.epp.packages/releases/
 20200127-1311-gnumcueclipse-4.7.2-2019-12-R-linux.gtk.x86_64.tar.gz

- 適当なディレクトリに 「GNU MCU Eclipse IDE」 を解凍する

```
cd opt
tar -xvf ~/Downloads/20200127-1311-gnumcueclipse-4.7.2-2019-12-R-linux.gtk.x86_64.tar.gz
```

###3. サンプルのeclipse へのエクスポート（eclipse で GCC ARM でコンパイル実行する為の Makefileの作成）

```
cd mbed-os-example-blinky/
mbed export -i eclipse_gcc_arm -m KL25Z --profile mbed-os/tools/profiles/debug.json
```

###4.サンプルのビルド確認

```
make clean
make -j
```
- コンパイルが開始する。
![コメントCompile 2020-02-17 003354.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177092/fc9aa72b-c9b2-f57a-6fab-5fbd5620b3eb.png)
- コンパイルが終わると以下のような結果となり、バイナリ(elfとbin)が生成される。
![コメントlink 2020-02-17 003354.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177092/53ee2bef-2d0a-c6eb-dfbe-2b28947fd194.png)

###5. pyOCDのインストール

```
pip install pyocd
```
###6. udev rulesの設定
※udev rules は既に pyOCD のリポジトリに有るサンプルを利用する。

```
cd ~/opt/
git clone https://github.com/mbedmicro/pyOCD.git
cd pyOCD/udev/
sudo cp *.rules /etc/udev/rules.d
```
- 再起動又は以下コマンドにてudev rulesの反映

```
sudo udevadm control --reload
sudo udevadm trigger
```

###7. pyOCDの動作確認
- ターゲットの接続
ホストPCとターゲットの「OpenSDA」のUSBコネクタを接続。

- GDB サーバの起動

```
pyocd-gdbserver
```
正しくターゲットに接続されていると以下のように GDB Server が起動する。
![コメントpyocd-gdbserver 2020-02-16 120836.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177092/d8733ed0-0c43-b9b6-a4ec-ef48f368c009.png)
※起動確認が終わったら ^C (Ctrl+C)で GDB Server を終了しておく。

###8. eclipseの起動
```
~/opt/eclipse/eclipse
```
Workspace は特に変更せず、 [Launch] する。
 
![コメント3 2020-02-16 120836.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177092/b04ab97f-f256-648a-379b-cc3129e3f5e3.png)

###9. サンプルのインポート
- 「Welcome」画面から[Import a project with a working Makefile] を選択
![コメント4 2020-02-16 120836.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177092/86dfae85-4ef4-df2d-2daa-6af8bfdcc8dc.png)
- [New Project]にてExisting Code Location の [Browse...]を押下
![コメント5 2020-02-16 120836.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177092/75b5416f-ee48-50e3-1a0e-161339f91c7b.png)
- エクスポートした Makefile のディレクトリを選択し[開く]を押下
![コメント6 2020-02-16 120836.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177092/20a63c67-b136-42c3-510a-72266a4eb4d8.png)
※「Toolchain for Indexer Settings」 は特に指定せず[Finish]を押下
![コメント7 2020-02-16 120836.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177092/0916144f-682f-5d7a-cdda-0379b05567e8.png)

※Wellcome 画面を閉じるとサンプルがProject Explorerにインポートされている。
![コメント8 2020-02-16 120836.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177092/591a003a-4ca7-49eb-49b2-c1f49b80e4d4.png)

###10. Debug Configureation
- 「RUN」メニュー＞「Debug Configureation」を選択する。
![コメント9 2020-02-16 120836.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177092/f48b720a-b570-0808-5524-929a61286b64.png)
- 「Debug Configureation」画面が開く。
![コメント10 2020-02-16 120836.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177092/29aed247-f8a6-1d62-b14b-72ae47b30927.png)
- [GDB PyOCD Debugging] から[KL25Z_mbed-os-example-blinky_debug]を選択する。 
![コメント11 2020-02-16 120836.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177092/a1f5dea6-0463-3eeb-6b37-f4bd95e82289.png)
- 「Debugger」タブを選択
![コメント12 2020-02-16 120836.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177092/2e6c9fa4-baf6-c2f3-241c-801a0738bae1.png)
- "to change it use the global or workspace preferences pages ..."から global のリンク文字をクリックする。（Prefarence の Global 設定を行う）
- 「Global pyOCD Path」を設定する。
![コメント17 2020-02-16 120836.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177092/cbd19421-66d4-977e-a7db-2a4c3fa54543.png)

※pyocd-gdbserverのインストールパスは以下で調べておく。
![which pyocd 2020-02-17 234806.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177092/d3670493-89e1-3f40-2a3b-76ff848873c7.png)

- 「Global pyOCD Path」のFolderを指定する為[Browse]を押下


※隠し属性"."のファイルを表示指定するには、Ctrl+hを押下する。
![コメント18 2020-02-16 120836.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177092/7ab0b1db-58ca-50ea-be42-3ccb2db388bf.png)

- pyocd-gdbserver が存在するディレクトリを指定し、[開く] を押下。
すると、"folder:"に設定される。
![コメント19 2020-02-16 120836.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177092/bcfc4adf-462b-3e49-027b-7d138a741595.png)

- 続いて「Global ARM Toolchain Paths」にて、Toolchain の実行ファイルのパスを指定する。
[Browse]を押下する。
![コメント21 2020-02-16 120836.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177092/5aa1f5ac-22ff-64b3-f74f-28f25bd8bf59.png)
- arm-none-eabi-gdb が存在するディレクトリを選択し [開く] で確定する。
![コメント22 2020-02-16 120836.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177092/0a2fc87e-2c3e-a180-8cf4-5b4b448890fd.png)

###11. Debugでのターゲット書き込みと起動
- ホストPCとターゲットの「OpenSDA」のUSBコネクタを接続している事を確認する。
- 「Debug Configureation」で先ほど設定した ターゲットのサンプルプログラムの「GDB pyOCD Debuging」 から[Debug]を押下。
![DebugConfigurations 2020-02-17 234806.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177092/c842d04b-5eee-b19a-4193-50d609feb146.png)
- ターゲットに pyOCD GDB 経由でプログラムのロードが始まる。
Debugのパースペクティブに切り替えをする為に [Switch]を押下。
![コメント24 2020-02-16 120836.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177092/cd3d9d4f-8366-d75a-e2f2-db29b8ab5e8c.png)
- Debug パースペクティブが開くとターゲット上のサンプルプログラムが Temporary Breakpoint で停止している。キーボードの[F8]又は Resume アイコンでターゲットを実行する。
![コメント26 2020-02-16 120836.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177092/9ad31b64-a582-b134-22b4-cb07facfe2ca.png)

以上で終わり。

##参考リンク

GNU Arm Embedded Toolchain
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm

GNU Arm Embedded version 9 (9-2019-q4-major).
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2

GNU Arm Embedded Toolchain: 6-2017-q2-update June 28, 2017
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2

Docs :  Tools :  Developing: Mbed CLI
https://os.mbed.com/docs/mbed-os/v5.15/tools/developing-mbed-cli.html
Docs :  Tools :  Overview
https://os.mbed.com/docs/mbed-os/v5.15/tools/index.html#compiler-versions

Docs :  Tools :  Developing: Mbed CLI :  Installation and setup :  Manual installation
https://os.mbed.com/docs/mbed-os/v5.15/tools/manual-installation.html

Arm Mbed DAPLink
https://armmbed.github.io/DAPLink/

Arm Mbed DAPLinkInterface firmware updates
https://os.mbed.com/blog/entry/DAPLink-bootloader-update/

OPENSDA: OpenSDA Serial and Debug Adapter
https://www.nxp.com/design/microcontrollers-developer-resources/ides-for-kinetis-mcus/opensda-serial-and-debug-adapter:OPENSDA

pyOCD
https://github.com/mbedmicro/pyOCD
https://github.com/mbedmicro/pyOCD/tree/master/udev