#1 Windows(Cygwin)版開発環境構築【後輩たちのためのEV3rt講座(改)】

# はじめに
この記事は元ロボコン出場者がクラブの後輩(中高生)向けに記している記事です。
又、[2019年に執筆したシリーズ](https://qiita.com/koushiro/items/4d18c877c93f823fc236)の改定版になります。
前シリーズよりわかりやすく、正確にお伝えしたいと思っております。
もしかすると大人にとっては表現が易しすぎる、もしくは生徒には難しすぎるといったことがあるかもしれませんが何卒ご了承ください🙏
それでは、本題に移ります。

# EV3rt とは？
まずはじめに、EV3rtを使うにあたりどのようなものか簡単に説明すると…
- TOPPERSが開発した、μITRON 組み込みOS
- LEGO Mindstorms EV3 で使うことが出来る。
- プログラミング言語としてCもしくはC++を用いる
- ETロボコンでは公式環境の一つとして提供されている

[TOPPERS/EV3RTとは？(EV3rtのHPより)](https://dev.toppers.jp/trac_user/ev3pf/wiki/WhatsEV3RT)

# 今回やること
EV3rtを使い始めるにあたってまず立ちはだかる壁が、開発環境構築です。
プログラミングをするための下準備というわけです。
今回はイチから環境構築の過程を説明したいと思います。
既に終わっている箇所があれば適宜読み飛ばしてください。

# 環境構築の方法
今回紹介するのはCygwinというツールを使う方法です。
私が現役の時はこの方法が使われていましたが、現在ではレガシーなもの(古い方法)となっております。
新しい方法(WSLを用いるもの)については[別の記事](準備中)で紹介しますので、自分にあった方法で環境構築を進めてください。

# EV3rtのバージョンについて
(この項目はわからなければ読み飛ばして頂いて構いません。)

EV3rtには2019年07月9日リリースの**β7.3版**まで「HRP2」というカーネルが使われていました。
一方、2020年4月15日リリースの**1.0版**からは「HRP3」という新しいカーネルが使われています。
このカーネルの変更に伴い、環境構築・プログラム方法に違いがあります。
今回は最新版である2021年6月25日リリースの**1.1版**、すなわち「HRP3」版を用いていきます。
[(β版を使用したい方はこちらの記事で)](https://qiita.com/koushiro/items/b19a9cce16d2a77e53d3)


# 環境構築スタート

## Step1 Cygwinのインストール
Windowsでプログラムを人間が読める言語から機械語に変換する(このことを**コンパイル**といいます)ときに必要なツールです。UNIX系OSにおける**ターミナル**の役割を担います。

### ダウンロード
まずは[Cygwinのサイト](https://www.cygwin.com/)からインストーラーをダウンロードします。
リンクを開いた先にある**Installing Cygwin**の項目にある`setup-x86_64.exe`というところをクリックするとダウンロードできます。

### インストールの開始
ダウンロードが完了したら、インストーラーを実行しましょう。
その際に以下のような警告が出てくるかと思います。
![20211205_075149708_iOS (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/58bbe0d0-388d-4deb-b498-1ef0a1a263fe.jpeg)
今回は問題ありませんので「はい」を選択してください。

起動すると以下のような画面になると思います。
![スクリーンショット 2021-12-05 170206.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/ab7fc180-b129-6b14-2b2b-de06d4f91745.png)
「次へ」を押して次に進みましょう。

![スクリーンショット 2021-12-05 170329.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/e9322fef-0708-97a7-5080-6bbf3f711edc.png)
この画面では、インストール方法を選択します。
デフォルト通り`Install from Internet`を選択した状態で「次へ」を押して次に進みます。

![スクリーンショット 2021-12-05 170531.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/ee93a59c-0c5c-e830-ef55-ac1cce38cb85.png)
インストールするディレクトリ(場所)を指定します。
特にこだわりがなければデフォルトのままにしておきます。

もし任意の場所にインストールする場合は、パスにスペースや全角文字が入らないように注意しましょう。(特にOnedrive下にあるドキュメントなどはNG)

確認できたら「次へ」を押して次に進みます。

![スクリーンショット 2021-12-05 170844.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/69c8e868-5eae-9418-9bb4-93c893d04fa1.png)

ダウンロードしたパッケージを置く場所を聞かれます。
先ほど同様、任意の場所に変更しても構いませんが、基本的にはデフォルトをお勧めします。
特に、スペースや全角文字が入るようなパスには置かないようにしましょう。

確認できたら「次へ」を押して次に進みます。

![スクリーンショット 2021-12-05 171336.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/a20a7db4-6118-ff32-d2bc-ee4fcb01fdfc.png)

インターネットの接続について聞かれます。
プロキシサーバ等を使用していない場合は`Direct Connection`を選択してください。

プロキシを使用している場合は`Use System Proxy Settings`を選択してPCの設定を利用するか、`Use HTTP/FTP Proxy:`を選択してプロキシの設定を行ってください。

確認できたら「次へ」を押して次に進みます。

![スクリーンショット 2021-12-05 171700.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/47b22ac4-9568-086b-5757-84c2b676f486.png)

ここではどのサーバーからダウンロードするかを選択します。
基本的にどのサーバーを選択しても大丈夫ですが、ドメインが日本のもの、すなわち`.jp`で終わるサーバーは日本のサーバーなので信頼度が高いといえます。
今回は`https://ftp.jaist.ac.jp`というサーバーを選択します。
(ちなみにこれは「北陸先端科学技術大学院大学」のサーバーです。)

確認できたら「次へ」を押して次に進みます。

![図2 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/3ce2ba24-b4ce-8d10-310c-61ed7cbd4346.png)

ここでダウンロードするパッケージを選択します。
上図のように検索ボックスに以下のパッケージ名を入力して探します。
EV3rtの環境に必要なものは以下の5つのパッケージです。

- gcc-core
- make
- diffutils
- perl
- ruby

#### gcc-coreの選択
![スクリーンショット 2021-12-05 173319.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/817d0575-1459-db09-cdf3-ed0d4c340e27.png)

説明書きも確認して、正しいものが選択できているか確認してください。
(gcc-coreの説明 : `GNU Compiler Collection (C, OpenMP)`)
Newの列のプルダウン(▼ボタン)を押すと、バージョンを選択することが出来ます。
基本的には最新のバージョンを選択すると良いと思います。

同様に残り4つも選択します。再度検索ボックスでパッケージ名を検索して探してください。

#### makeの選択

![スクリーンショット 2021-12-05 173859.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/7bb0d230-87da-90b0-31d9-0cda4bcbb56a.png)

(makeの説明 : `The GNU version of the 'make' utility`)

#### diffutilsの選択

![スクリーンショット 2021-12-05 174041.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/f92cf49b-f3ed-5edf-3592-94f6d140b143.png)

(diffutilsの説明 : `A GNU collection of diffutilities`)

#### perlの選択

![スクリーンショット 2021-12-05 174306.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/46859f5b-39f1-7e8d-bc92-77238bc16c84.png)

(perlの説明 : `Perl programming language interpreter`)

#### rubyの選択

![スクリーンショット 2021-12-05 174617.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/ce50ef4e-580b-60cc-63cc-f8731c261b8a.png)

(rubyの説明 : `Interpreted object-oriented scripting language`)

全て選択出来たら「次へ」を押して次に進みます。

![スクリーンショット 2021-12-05 174922.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/d920814f-f891-6b3f-03ef-0ecd7f1dc1b4.png)

ここも「次へ」を押して次に進みます。
するとダウンロードおよびインストールが始まります。

![スクリーンショット 2021-12-05 175939.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/75b2a120-8605-79c7-a71a-3920708d36f1.png)

インストールが完了すると、上のような画面になります。
「完了」を押してセットアップを終了しましょう。

## Step2 GCC ARM（GNU Tools for ARM Embedded Processors）のインストール
EV3のマイコンにはARM社のものが使用されています。
近年のスマートフォンなどにも多く使用されているあのARM社です。
このARM社のマイコン用のコンパイラをインストールしていきます。

### ダウンロード

以下のサイトにアクセスしてください。

https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads

すると過去にリリースされたバージョンが並んでいます。
ここで注意していただきたいのが、**バージョンによって動作しないものがあること**です。
現在確認できているもので最新のバージョンは`6-2017-q1-update`です。
よってこのバージョンのインストーラーをダウンロードしてください。
(ちなみにダウンロードに少し時間がかかります。)

![スクリーンショット 2021-12-05 181739.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/bb08b885-5317-a42e-22bf-ee8bad31472a.png)

### インストールの開始

ダウンロードできたらインストーラーを実行しましょう。
Cygwinの時と同様、警告が出てきますが「はい」を選択してください。

![スクリーンショット 2021-12-05 183710.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/56a2e87e-20ec-7820-a164-3e6d28d336db.png)

言語選択が出てきますので、そのままJapaneseを選択した状態で「OK」を押してください。

![スクリーンショット 2021-12-05 183806.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/877020a4-c9e1-1e95-43e5-ac590d237122.png)

こちらの画面も「次へ」を押して次へ進みましょう。

![スクリーンショット 2021-12-05 183850.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/decae1c3-43e2-b98f-969d-08a0b127e0d4.png)

ライセンス契約書が表示されますので、~~読まずに~~**しっかり読んで**「同意する」を押しましょう。
ちなみに全部英文です。(ｶﾞﾝﾊﾞﾚ)

![スクリーンショット 2021-12-05 184149.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/80049a5b-e087-029b-0430-9e8399ddedc3.png)

インストールする場所を選択します。
特にこだわりがなければデフォルトのままの状態で「インストール」を押してください。
するとインストールが始まります。

![スクリーンショット 2021-12-05 184619.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/e79344d4-dc1d-1b0b-870c-746a721c91ec.png)

インストールが完了すると、上のような画面になります。
ここで重要なのが、**必ず`Add path to environment variable`にチェックを入れること**です。
これを忘れると正しく動作しなくなります。
(ここでしていることは環境変数にパスを通すという作業です。)
チェックを入れた状態で「完了」を押してください。

### 動作チェック

ここまででCygwinとGNU Toolsのインストールが完了しましたが、正しくインストールできているか、確認してみましょう。
まずはCygwinを起動します。

![スクリーンショット 2021-12-05 185638.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/1dfa3e70-9a8f-f0c8-4813-d3abd19435f5.png)

このような画面が表示されます。ここに**UNIXコマンド**を打ち込んでいきます。
(UNIXコマンドについてはこの記事の一番最後に少し解説しています。)

ここに以下のコマンドを一行ずつ順番に入力していってください。
なお、コピペする際、Cygwinのペーストのショートカットキーは`Ctrl + V`ではなく`Shift + Insert`なのでご注意を。

```
$ gcc -v
$ make -v
$ diff -v
$ perl -v
$ ruby -v
$ arm-none-eabi-gcc -v
```

すると以下のようにそれぞれのバージョンが表示されるはずです。

![スクリーンショット 2021-12-05 211354.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/dfce6af8-27eb-5fe4-2810-9c740547e607.png)
![スクリーンショット 2021-12-05 211808.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/19a951be-2492-77db-63af-e7e56f3b8e35.png)
![スクリーンショット 2021-12-05 212101.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/10318cc9-ef0d-5d37-3a33-5e43ac027c0e.png)

それぞれ打ち込んだコマンドを青線、バージョンが書かれている部分を赤線で表しています。
全てのパッケージがインストールされていることを確認してください。
もしインストールされていなかった場合は上記の手順をもう一度行ってインストールをやり直してください。

## Step3 U-bootのmkimage
こちらはEV3が起動するときに必要なブートローダのファイルです。

### ダウンロード
mkimageのバイナリファイルをダウンロードします。
こちらのサイトにアクセスしてください。

https://www.mediawiki.compulab.com/w/index.php?title=U-Boot:_Images

(EV3rtのWikiにある ​http://www.trimslice.com/download/tools/Mkimage.tar.gz はリンクが切れていますのでご注意ください。)

![スクリーンショット 2021-12-06 023615.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/fab3c00f-a6c5-5fc6-51f0-658527d00c17.png)

サイトにアクセスした後、上の画像のように赤線の部分をクリックして`mkimage.tar.gz`という圧縮ファイルをダウンロードしてください。

### 解凍

ダウンロードした`Mkimage.tar.gz`というファイルの**プロパティ**を開いてください。
(ファイルの上で右クリックを押し、「プロパティ」を選択)
すると以下のようなウィンドウが表示されます。

![スクリーンショット 2021-12-06 024220.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/83a1bee9-07e3-fee4-5909-1117387a8c87.png)

この赤線で引かれた部分をコピーしてください。ここが、`Mkimage.tar.gz`が保存されている場所になります。

ここからはCygwinを使います。Cygwinを起動して、以下のコマンドを打ち込んでください。

```
$ cd C:/Users/■■■■■/Downloads
```
まず**cd**とは、指定した先のフォルダに移動するというコマンドです。
そしてその指定するフォルダというのが後ろの`C:/Users/■■■■■/Downloads`です。
つまりここに、先ほどコピーしたmkimageが保存されている場所に移動するということです。

**ただし!!** 貼り付けたときに**バックスラッシュ**が用いられているので**普通のスラッシュ(/)**に書き換えてください。バックスラッシュのままだとエラーが起きます。

下の画像の赤線で示したのがバックスラッシュ、青線で示したのが普通のスラッシュです。
正しく打ち込むことが出来れば長い赤線で示したように黄色の文字で場所が表示されるはずです。

![スクリーンショット 2021-12-06 024748.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/26b91528-ac86-f8b2-e27f-f6f2f50c7e64.png)


次に、解凍のコマンドを打ちます。

```
$ tar zxvf Mkimage.tar.gz
```

これで中身を解凍することが出来ました。

### ファイルのコピー
最後に、このファイルを「/usr/local/bin」にコピーします。
これもCygwinで行います。以下のコマンドを入力してください。

```
$ cp mkimage.exe /usr/local/bin
```

## Step4 EV3rtのファイルをダウンロード

TOPPERS/EV3rtのページから、EV3rtのファイルをダウンロードしましょう。
[EV3rt ダウンロードページ](https://dev.toppers.jp/trac_user/ev3pf/wiki/Download)
このページの一番上にある2021年6月25日リリースの**1.1版**のファイルをダウンロードしましょう。
(`ev3rt-1.1-release.zip`というzipファイル)

ダウンロードが出来たらzipファイルを解凍してください。

![スクリーンショット 2021-12-06 030811.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/ee5c002c-bb6f-b7d0-647c-7321012d7db5.png)

zipファイルを開いて、「すべて展開」を押すと解凍できます。

解凍すると`ev3rt-1.1-release`というフォルダが生成されます。
このフォルダ内に入り、その中の同じフォルダ名である`ev3rt-1.1-release`をコピーします。
その後、Cドライブ直下にペーストして移動してください。

#### Cドライブへのアクセス方法
![スクリーンショット 2021-12-06 031126.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/5dffad4c-c0b0-2127-3b94-332f3c8acd0f.png)
上の画像のように、赤線で囲った枠の部分に`C:\`と入力してEnterキーを押してください。
これでCドライブ直下に移動することが出来ます。

Cドライブ直下に移動出来たら先ほどコピーしたフォルダを貼り付けてください。

![スクリーンショット 2021-12-06 031919.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/36a3658d-e59f-743b-cd22-c29be213f875.png)

ここからはCygwinを使います。
起動したら以下のコマンドでCドライブ直下にある`ev3rt-1.1-release`に移動します。

```
$ cd c://ev3rt-1.1-release
```

続いてそのフォルダ内の`hrp3.tar.xz`を解凍します。

```
$ tar xvf hrp3.tar.xz
```

解凍されたファイルが一覧で表示され、コマンドが打てるようになったら完了です。

以上にて、環境構築完了です!!

# 動作確認

ここまでで全てのセットアップが完了したので、実際にプログラムをコンパイルすることが出来るか試してみましょう。

Cygwinを起動し、以下のコマンドを入力します。

```
$ cd C:/ev3rt-1.1-release/hrp3/sdk/workspace
```

移動した先のフォルダは今後のプログラミングでも用いるワークスペースフォルダです。
このフォルダ内にプログラム作成します。
ここでは既に用意されているサンプルプログラムをビルドしてみます。

以下のコマンドでコンパイルを行います。

```
$ make app=helloev3
```

今回は`workspace`内の`helloev3`というフォルダをビルドしました。
このサンプルプログラムはev3rtのチュートリアル的なプログラムになっています。
このコマンドを打ち込むことで`workspace`内に`app`というファイルが生成されていれば成功です。

これで動作確認も完了です!!

# 最後に
今回はCygwinを用いる方法でEV3rtの環境構築を進めました。
次回は冒頭にもご紹介したWSLを用いる方法で環境構築してみたいと思います。
当然ながら、今回ご紹介した方法で環境構築出来た場合は次回の作業は必要ありません。
次々回ご紹介するEV3での実行方法に進んでください。

# 【おまけ】UNIXコマンドについて
環境構築やプログラム作成の際に、Cygwinを用いるのですが、このときに使うのが**UNIXコマンド**です。
**cd**や**mv**、**mkdir**などといったよく使うコマンドについては理解しておきましょう。
「UNIXコマンド 〇〇」といった形でググるとすぐ出てくると思います。
また、Qiitaの中にもコマンド解説の記事は数多く存在します。

次回 : [#2 Windows(WSL)版開発環境構築](https://qiita.com/koushiro/items/a9cd60178e0981d27020)