トップページ 組込みソフト Eclipseを使ったRaspberry Piのソフト開発
 
Eclipseを使ったRaspberry Piのソフト開発
 長いページになってしまったぁ!最初に概略を....
ここのページでは、
Eclipse を自分流にインストールする方法(JDK含む)
Eclipseでクロスコンパイルする方法
EclipseからRaspberry Piにリモートアクセスする方法
EclipseからRaspberry Piにリモートデバッグする方法
と濃すぎる内容となっています。
 Eclpiseについ調べるとYouTubeでEclipseについて喋って解説ししているのがありました。当たり前のことが気づきました。Eclipseの発音は
エクリプス(間違い)
イクリプス(正解)
日本人はローマ字読みで通じない発音をまったく気にしていないんだなぁ。
English(イングリッシュ)とおなじくEをイーと読むだけなんですが...
他にもたくさん同じようなことはありますが、この件はこれで終わり。
Raspberry Piなどの開発の方法はいくつかあります。
ボード単体で開発
 Raspberry Pi などはLinuxパソコンです。これにキーボード、マウス、モニタをつなげればパソコンとして使えます。gcc による開発ができます。統合環境の開発ツールが使いたくてもCPUパワーが足りません。
 肝心の開発効率は、良くありません。X Windowでは処理が遅すぎこれは使えない。コマンドラインでgcc とviなどのエディタを使うことになるのでWindowsを使ってきた人には違和感があります。というかUnixが日本で使われ始めたころ、開発ツールにUnixを使いました。viを使ってみましたが、こんなのダメだ!が全員の意見。なぜなら当時MS-DOSソフトのMIFESの方が操作も機能もviとは勝負にならなかったのです。そんなわけでこの開発環境には抵抗のある人も多いと思います。
母艦からsshで接続
 よく書籍に載っているやり方です。本質的には前記の環境からsshを使うことによってRaspberry Pi につなげておいたキーボード、マウス、モニタがなくなり、母艦がそれらに置き換わった。だけです。
 利点としては前記の環境ではモニタにHDMIが付いていることが条件です。古いモニタは使えません。それに比べ今度は母艦がまともに動くことが条件ですから、制約がゆるくなります。ただし、どんなに立派な母艦を使っても、ビルドする処理を実行するのはRaspberry Piなどになります。処理速度はかわりません。
母艦でEclipseを使う
 最高の開発環境です。具体的には、
viなどは勝負にならないくらい高機能なエディタです。
コンパイル・リンクなどが簡単な操作でできます。
などあげればきりがないですね。

しかし、重大な懸案
Eclipseが作成する実行ファイルはインテルCPUに対応している。
今回はarmなのでこのままではRaspberry Pi上で動作しない。
どうやってarmに対応した実行ファイルをゲットするか?が問題になります。
jdkをインストールする
 今回はEclipseでC/C++の言語を使います。開発言語としてJAVAは使わないのですが、Eclipse自身がjdkを必要としています。
 バージョンも気にしないで、単にEclipse使いたいだけならお気楽インストール
sudo apt-get install eclipse
でやってくれそうですが、このような便利なやつは使いません。
なぜなら2つ以上のEclipseを使う予定なので、jdkやEclipseをどこのフォルダーにいれてどんなパスを設定したということを把握するためです。お気楽インストールでやるとこれを自分で調べなくてはなりません。お気楽がお気楽でなくなってしまいます。

これがちょっと曲者!jdkには、
jdk
open jdk
の2つがあります。
open jdkではダメだという人あり。しかし、open jdkでもEclipseが動きました。やはり王道というか
jdkを使うことにします。oracleではverion 6と7を推奨しているようなので7を使うことにします。

下記のURLでjdk7のダウンロードします
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

Accept License Agreementをチェックします。


上記ファイルをダウンロードします。
今ユーザーディレクトリ直下 /home/userXXXにいるとします。
cd ~

解凍します。
tar -xvzf jdk-7u55-linux-x64.tar.gz
フォルダー名が長いので簡単にします。
mv jdk1.7.0_55 jdk7

.bashrcにパスの設定をします。
export PATH=$HOME/jdk7/bin:$PATH
変更を反映させます。
source .bashrc
これでjdkは終わりです。

jdk6をインストールしたほうがいいかも知れません。
このページのEclipseのランチャーアイコンの登録でわかったことです。
解凍の仕方がちょっと違います。
jdk6のダウンロード
http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html#jdk-6u45-oth-JPR
64ビットなら
jdk-6u45-linux-x64.bin
解凍は、ホームディレクトリで
chmod a+x jdk-6u45-linux-x64.bin
./jdk-6u45-linux-x64.bin
mv jdk1.6.0_45 jdk6
パスは、
export PATH=$HOME/jdk6/bin:$PATH
どちらがよいかは、ご自身で判断してください。
GITをインストールする
armをクロスコンパイルするためのツールをインストールするために必要です。
sudo apt-get install git
でOKです。
クロスコンパイルするためのツールをインストールする
64ビットのOSの場合
sudo apt-get install ia32-libs
(32ビットでは不要です)

mkdir rpi
cd rpi
git clone git://github.com/raspberrypi/tools.git

ツールのパスを.bashrcに記述します。
export PATH=$HOME/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin:$PATH
変更を反映させます。
source .bashrc
Eclipseをインストールする
下記のURLよりEclipseをダウンロードします。
https://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/keplersr2

Linux 64-bitを選びます。


ダウンロードします。

Eclipseの解凍
cd ~
tar -xvzf eclipse-cpp-kepler-SR2-linux-gtk-x86_64.tar.gz
eclipseのフォルダーができています。
Eclipseは日本語化ができます。しかし、日本語化はしないほうがいいです。RaspberryやBeagle Bone Blackなどの情報は圧倒的に英語です。日本語化すると逆に不便になります。
Eclipseの起動
./eclipse/eclipse &
で起動します。

Eclipseのワークスペース選択画面がでます。

自分の好みにしてください。もちろんこのままで問題ありません。毎度この画面がでるのが鬱陶しければチェックをいれれば出てこないようになります。
Welcome画面がでます。

これは鬱陶しいので出ないようにタブのXをクリックしてください。
プロジェクトの作成
[File]-[New]-[Project]をクリックします。

CProjectを選びます。
[Next]ボタンをクリックします。
Project Nameを入力します。

ここで大事なこと!
Raspberry Piのプロジェクトの場合はCrossGCCを選びます。これでarm対応の実行ファイルが作成されます。
[Next]ボタンをクリックします。

[Next]ボタンをクリックします。

Cross Compiler Prefix:は
arm-linux-gnueabihf-
です。
Cross Compiler Path:は
/home/user/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/
です。
/home/user/rpi
のところは自分で設定したフォルダーを適用してください。
最後に[Finish]ボタンをクリックしてください。
ソースファイルの作成
 いよいよプログラムを作成します。
[File]-[New]-[Source File]をクリックします。

[Finish]ボタンをクリックします。
main.cの画面が現れます。
以下のように記述します。

[File]-[Save]をクリックします。

[Project]-[Build All]をクリックします。

これで実行ファイルができました。
もちろんarmでコンパイルしたのでUbuntu上では動かない実行ファイルです。
cd ~/workspace/ccHello/Debug
ls で見ると確かに実行ファイルccHelloがあります。
./ccHello
実行できませんと起こられます。
当たり前のことが確認できました。
これをRaspberry Piに転送して確認します。
sftp pi@192.168.1.99
アドレスは必要に応じて書き換えてください。パスワード
raspberry
で接続します。
put ccHello
でRaspberry Piに送ります。
exit
でsftpを終了します。

次は、
ssh pi@192.168.1.99
パスワード
raspberry
で接続します。
./ccHello
Hello cross compiler world.
実行できました。
しかし、これってとても面倒です。
これを解決するのがリモートシステムです。
リモートシステム
 sftpとsshを使って作成した実行ファイルが動作することを確認しました。リモートシステムを使うとsftpとsshと同等の機能ををEclipseから使うことができます。
[Window]-[Show View]-[Other]をクリックします。

Remote Systems
を選択して[OK]ボタンをクリックします。
これは縦に表示したほうが見やすいので、次のようにドラッグして移動します。

Remote Systems が表示されます。


Remote Systemsのタブで右クリックをします。

[New]-[Connection]をクリックします。

[Next]ボタンをクリックします。

[Finish]ボタンをクリックします。
Raspberry Pi のリモートフォルダができました。

[Ssh Terminals] を右クリックします。

[Launch Terminal]をクリックします。

User ID:pi
Password(optional):raspberry
を入力して[OK]ボタンをクリックします。

sshの画面です。
すでにRaspberry Piに接続している状態です。
[Raspberry Pi]-[Sftp Files]-[My Home]をクリックします。

Raspberry Piのフォルダーやファイルが見えています。
LocalからRaspberry Piへの(その反対も)コピペができます。
ccHelloをLcalからRaspberry Piにコピペします。
Terminalで確認すると、

実行できました!!!!
このようにしてEclipseでsftpとsshの機能が使えるようになりました。
これはすごく便利です。
リモートデバッグできるようにする
ここまでできるようになると、更に欲が出てきます。

自動でRaspberry Piに転送できるようにしたい
デバッグもできるようにしたい


調べた結果できます。
[Run]-[Debug Configrations...]をクリックします。

C/C++ Remote Applicationを選択して、左上の新規ボタンをクリックします。

変更するのは赤で示した次の箇所です。

Connetction: Raspberry Pi
にします。

これはccHello をRaspberry Piに転送するためのパスと実行ファイル名の設定です。
Raspberry Piのホームディレクトリ直下に転送するようにしていますが、任意のフォルダーに設定してもOKです。

これは転送したccHelloに実行権限を与える設定です。
次にDebugタブの変更をします。

GDB debugger: arm-linux-gnueabihf-gdb
にします。

[Apply]ボタンをクリックします。
[Debug]ボタンをクリックします。
パスワードのダイアログがでるときは、raspberryを入力します。

[OK]ボタンをクリックします。

[Yes]ボタンをクリックします。
オーーーーーーーーーーーーーーーーーー!
デバッグ画面になりました。

この状態ではブレークしています。
[Run]-[Step Over]をクリックする(またはF6キーを押す)と1行づつ実行します。
実行結果はConsoleで確認できます。

やっとデバッグもできるようになったぞ!!!!!!
Eclipseのランチャーアイコンの登録
Eclipseを起動するのに、ターミナルを開いて、
./eclipse/eclipse &
と毎回やるのは面倒です。
ランチャーに登録できればいいのですが、手作業でEclipseをインストールするとできません。
sudo apt-get install
でやればできるのですが.......

できます!

eclipseのフォルダーに次のファイルを用意します。
ファイル名:eclipse.desktop
ファイルの内容:
[Desktop Entry]
Type=Application
Name=eclipse
GenericName=eclipse shortcut
Icon=/home/user/eclipse/icon.xpm
Exec=/home/user/eclipse/eclipse
Terminal=false
Name[ja_JP]=eclipse.desktop

/home/userのところはお使いの環境で書き換えてください。
ランチャーのホームフォルダーでeclipseのフォルダーに移動します。
eclipse.desktopをダブルクリックします。

Eclipseが起動します。
Eclipseのアイコンを右クリックすると固定できます。

JDK6だとこれでOKです。
JDK6でもダメなときがあります。
JDK7だとダメなときはeclipse.iniにつぎの追加が必要です。赤字が追加部分
ecilpse.ini

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.200.v20140116-2212
-product
org.eclipse.epp.package.cpp.product
--launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vm
/home/user/jdk7/bin/java

-vmargs
-Dosgi.requiredJavaVersion=1.7
-XX:MaxPermSize=512m
-Xms512m
-Xmx512m

/home/user/jdk7のところはお使いの環境により書き換えてください。
これはjdkのパスをeclipseに教える内容です。

jdk7よりjdk6をインストールしたほうがいいかも??
[F11]キーを押したらリモートデバッグにしたい
デバッグを始めるのにいちいち
[Run]-[Debug Configuratons ...]
からやるのでは面倒です。
F11キーを押したら、リモートデバッグできないか?
できます!
[Run]-[Debug Configuratons ...]をクリックします。

この設定では、[F11]キーを押すと、
C/C++Application
で動作します。つまりリモートではなく母艦側のLinuxでarmのアプリを動かすことになるのでダメだと怒られます。
要するにC/C++ Remote Application以外は邪魔です。
この邪魔物を排除するために、赤で示した[Filter launch configuaratons...]をクリックします。

C/C++ Remote Application以外は使わないという設定になります。
このように設定して[OK]ボタンをクリックします。

C/C++ Remote Applicationだけになりました。
こうすることで、[F11]キーを押すとC/C++ Remote Applicationでデバッグできます。