Mac OSX + Ubuntu + EclipseCDT + Raspberry Pi 3 リモートデバッグ

Raspberry Piでの開発環境を整えるにあたって。
Raspbianでコンパイルするのもいいけど、やっぱりコンパイルが遅いと思ったのでまとめてみました。

#1. Mac上に仮想環境を立ち上げる

私が使っているのがParallels Desktop ですが VirtualBoxでも変わりません。

環境
-  **Host** : macOS Sierra
-  **VM** : Ubuntu Gnome 16.0.4 LTS **32bit**
-  **仮想化アプリ** : Parallels Desktop

Ubuntuのダウンロードは[こちら](https://ubuntugnome.org/download/)

それから、イメージを放ります
<img width="500" alt="スクリーンショット 2017-04-22 16.35.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/173356/f2cd9cef-547f-bdee-4685-4f78a5bd0244.png">

今回の構成はこんな感じ
<img width="500" alt="スクリーンショット 2017-04-22 16.36.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/173356/2a145b00-5060-badd-bce0-b75bcedbad6c.png">

後はインストールウィザードに従ってインストール
仮想環境で日本語を入力することがないので、私はいつも英語設定にしています。

完了
<img width="500" alt="スクリーンショット 2017-04-22 16.50.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/173356/43392b32-e54a-61cf-5384-8e2c7ee91f8d.png">

#2. Eclipse インストール
Eclipse をインストール

apt では、3.8がインストールされるのでマニュアルでインストールします。

aptバージョンでもいいのですが初期状態でRemoteSystemを選択できず、
プラグインを別途入れる必要があります。

まず JRE をインストールします。

``` ruby:terminal
sudo apt-get install default-jre
```

eclipse ダウンロード neonを選択

``` ruby:terminal
wget http://eclipse.stu.edu.tw/technology/epp/downloads/release/neon/3/eclipse-cpp-neon-3-linux-gtk.tar.gz
```

そして解凍

``` ruby:terminal
tar -xf eclipse-cpp-neon-3-linux-gtk.tar.gz
```

eclipse の起動

``` ruby:terminal
cd eclipse
./eclipse
```

デスクトップ環境を整えた人はデスクトップにショートカットをはっつけると良いかと思います。

#3. クロスコンパイルの環境を整える

まずは必要なツールをセッティングします


ARMコアで開発するために、ARMコア用のクロスコンパイラをインストールします。
C言語で開発する方はこちら

``` ruby:terminal
sudo apt-get install gcc-arm-linux-gnueabihf
```

C++ で開発する方はこちら

``` ruby:terminal
sudo apt-get install g++-arm-linux-gnueabihf
```

ARM用の gdb は用意されていない(?)ので、
自分でBuildするか、メンドイひとはLinaroを使用します。
私はメンドイ派なのでらくらくダウンロードしました

``` ruby:terminal
wget https://releases.linaro.org/components/toolchain/binaries/latest/arm-linux-gnueabihf/gcc-linaro-6.3.1-2017.02-i686_arm-linux-gnueabihf.tar.xz
tar -xf gcc-linaro-6.3.1-2017.02-i686_arm-linux-gnueabihf.tar.xz
```

この解凍したフォルダは自分の好きな名前に変更すると便利と思います。

次にeclipseの新しいプロジェクトを立ち上げます。
File -> New -> C/C++ Project
プロジェクトは安直にtestとしました。
<img width="500" alt="スクリーンショット 2017-04-22 17.29.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/173356/e5b605d9-17a1-7fd4-6a0d-533c6acddcfd.png">

次にクロスコンパイルを選択します。
<img width="500" alt="スクリーンショット 2017-04-22 18.03.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/173356/bcdac171-a2b3-025a-80ec-e53663e0f930.png">

ここでAdvanced Settings を選択しコンパイラを設定します 
<img width="500" alt="スクリーンショット 2017-04-22 18.05.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/173356/1d18494f-0328-bd01-2158-f33745bd5917.png">

Prefixを設定。**arm-linux-gnueabihf-**
Defaultではg++がBuild時に呼び出されますが、Prefixを入れることでarm-linux-gnueabihf-g++が呼び出されます

<img width="500" alt="スクリーンショット 2017-04-22 18.07.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/173356/8c908de5-24d7-6a94-f356-30a50e3aca66.png">

そのままプロジェクトの設定完了させます。

#4. リモートデバッグの環境を整える

次にリモートデバッグの設定をします。
DebugでもRunでもどちらでも構いません。お好きな方で。
とりあえずDebugから進みましょう

Debug → Debug Configurations
<img width="417" alt="スクリーンショット 2017-04-22 18.23.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/173356/e347fa09-61d9-d05c-6fb6-5d85c071429e.png">

C/C++ Remote Debug → New を選択します
<img width="500" alt="スクリーンショット 2017-04-22 18.27.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/173356/7ae601aa-5860-226c-e117-e9fc0505a6ae.png">

MainのTabする項目は
- LocalhostをRaspberryPiに変更すること。ここではhomepiという名前にしています
- Remote Absolute File Path の設定。RaspberryPiの設定したフォルダを選択します。今回は/home/pi/remote/test です
- Commands to execute の設定。 chmod a+x /home/... としてます
<img width="500" alt="スクリーンショット 2017-04-22 18.24.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/173356/682288b5-5f41-4659-3783-b207cdb3eb04.png">

「homepi」の設定はこんな感じです
New → ssh Only → そのまま選択OKして下さい。
<img width="500" alt="スクリーンショット 2017-04-22 18.25.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/173356/2e3fa8ef-4f22-971e-89d7-13413682b238.png">


後はデバッグ時のgdbの設定です。
今回はLinaroをダウンロードしてきたので、
bin/arm-linux-gnueabhf-gdb
のパスを入れて下さい。
<img width="500" alt="スクリーンショット 2017-04-22 18.39.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/173356/c66c9428-0131-2826-3721-a9d01a4b4c45.png">

それでは、Applyを押して、
- Build All
- Debug
を開始して下さい。

こんな画面になって、デバッグコンソールに
**!!!Hello World!!!**
と表示されるはず
<img width="500" alt="スクリーンショット 2017-04-22 19.39.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/173356/aa5e08bb-779c-bf9a-c624-8e1a055d4ee1.png">

eclipseでsshで接続するとき、初回は暗号化を承認せよとWarningが表示されますが、そのままOKして下さい。
RaspberryPiを使用している方ならご存知ですよね。