組込みソフト
Eclipseを使ったBeagle Bone Black のソフト開発
 Beagle Bone BlackではAndroidでの開発を考えていたのですが、温度、湿度、気圧のセンサーを接続した機器を作るのであれば別にAndroidでなくてもいいじゃん!PICやH8でもできそうです。しかし、Eclipseを使った統合環境で開発したほうが楽チンです。そこでBeagle Bone BlackにLinuxをいれて使っみることにしました。Beagle Bone BlackのEclipseに関する情報はRaspberry Piより少ないようですね。Eclipseを使ったBeagle Bone Black のソフト開発ができないか?いろいろやってみて、

できました!

ここのページでは、
Eclipse をインストールする方法(JDK含む)
Eclipseでクロスコンパイルする方法
Beagle Bone Blackにリモートアクセスする方法
Beagle Bone Blackにリモートデバッグする方法
とRaspberry Piの記事と同じくらい濃すぎる内容となっています。
専用のUbuntuを用意する
 Virtual BoxでBeagle Bone Black Eclipse専用のUbuntuを用意します。

Virtual Box でUbuntuのインストールができたら、
sunaga@bbb:~$ sudo apt-get update
sunaga@bbb:~$ sudo apt-get upgrade
を最初にやっておいてください。そうしないとうまくいかないことがあります。
いつのまにかhttp://www.armhf.com/のUbuntuとDebianのSDカードのインストールファイルの形式が、img形式から変更になっています。Beagle Bone Black Rev.Cで何かかわったのでしょうか?インストールの方法が面倒です。以前は簡単だったのに。以前のing形式でやってみました。だめでした。しかたなく最新版でやってみるとOKです。今度はLinuxのファイル操作が必要になるのでWindowsではダメみたいです。そこで対応するためにdosftoolsが必要になります。このツールを使えば不要になったLinuxを焼いたSDカードをWindowsでも使えるようにフォーマットすることがかんたんにできます。
インストール
sunaga@bbb:~$ sudo apt-get install dosfstools

ついでにSDカードのフォーマットのやりかた
1. SDカードをリーダーに挿入します。

2.df コマンドで調べます。

sunaga@bbb:~$ df -H
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 30G 3.8G 25G 14% /
udev 2.1G 4.1k 2.1G 1% /dev
tmpfs 415M 828k 414M 1% /run
none 5.3M 0 5.3M 0% /run/lock
none 2.1G 205k 2.1G 1% /run/shm
/dev/sr0 65M 65M 0 100% /media/VBOXADDITIONS_4.3.12_93733
/dev/sde1 1.1M 465k 564k 46% /media/C920-E0C5
/dev/sde2 7.7G 530M 6.8G 8% /media/9f0a9914-d16b-4575-b74a-d8506dd469ba

こちらの環境では、sdeがSDカードです。環境によってはsdbとかsdcとかsddになります。

3.sdeをアンマウントします。

sunaga@bbb:~$ sudo umount /dev/sde1
sunaga@bbb:~$ sudo umount /dev/sde2

4.フォーマットします。
sunaga@bbb:~$ sudo mkfs.vfat -F 32 /dev/sde -I
これで終わり。WindowsのパソコンでもSDカードを使えるようになりました。
jdkをインストールする
 インストールのやり方はいくつかありますが、今回はAndroidのソースファイルをビルドするときと同じにしました。これのほうが面倒はないようです。
jdk-6u45-linux-x64.bin
をダウンロードします。
ホームディレクトリ(sunaga)直下に置きます。
sunaga@android:~/share$ cp jdk-6u45-linux-x64.bin ~/
sunaga@android:~/share$ cd ~/
sunaga@android:~$ ls
examples.desktop ダウンロード ドキュメント ミュージック
jdk-6u45-linux-x64.bin テンプレート ビデオ 公開
ホームディレクトリにコピーできました。
jdk-6u45-linux-x64.binに実行権限を与え解凍します。
sunaga@android:~$ chmod a+x jdk-6u45-linux-x64.bin
sunaga@android:~$ ./jdk-6u45-linux-x64.bin
sunaga@android:~$ ls
examples.desktop share デスクトップ ピクチャ
jdk-6u45-linux-x64.bin ダウンロード ドキュメント ミュージック
jdk1.6.0_45 テンプレート ビデオ 公開
jdk1.6.0_45のフォルダに解凍されています。
Virtual BoxでBeagle Bone BlackのAndroid組込み専用に作成したUbuntuなのでTIの解説にしたがって/usr/lib/jvm にコピーして設定をします。
sunaga@android:~$ sudo mkdir -p /usr/lib/jvm

sunaga@android:~$ sudo mv jdk1.6.0_45 /usr/lib/jvm/

sunaga@android:~$ sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.6.0_45/bin/java" 1

sunaga@android:~$ sudo update-alternatives --install "/usr/bin/javac" "javac" /usr/lib/jvm/jdk1.6.0_45/bin/javac" 1
sunaga@android:~$ sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.6.0_45/bin/javac" 1

sunaga@android:~$ sudo update-alternatives --config java

sunaga@android:~$ sudo update-alternatives --config javac
これでJAVAの設定が終わりです。
確認します。
sunaga@android:~$ java -version
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
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をクリックしてください。
Linux用のアプリができるか確認する
 Linux用のアプリを作るなど考えてなかったのですが、場合によってRS232Cを使ってBeagle bone BlackとPCで通信するようなアプリが必要になるかもしれません。CとC++でアプリが作れることを確認します。
Ubuntuではg++がインストールされていないようです。gccとg++をインストールします。

sunaga@bbb:~$ sudo apt-get install gcc g++

Eclipseを起動します。
sunaga@bbb:~$ ./eclipse/eclipse &

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

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

これは鬱陶しいので出ないようにタブのXをクリックしてください。

[File]-[new]-[C Project]
を選択します。

動作の確認するだけなのでソースの入力を省くため、
Projrct Name:
は任意です。Hello_cとしました。
Project type:
Hello World ANSI C Project
を選択します。
Toolchain:
Linux GCC
を選択します。
next > ボタンをクリックします。

Source以外は適当に入力してください。
最後にFinishボタンをクリックします。

ソースが自動的にできています。
[Project]-[Build All]
をクリックします。もし、コンパイルエラーがあれば表示されます。こんな基本中の基本ですからエラーはでませんね。
つぎはデバッグします。
[Run]-[Debug]
をクリックします。
こんな画面がでてきますが、Yesボタンをクリックします。


デバッグ画面に自動的に切り替っています。
[Step over] でputの行を実行すると、Console に結果が表示されます。

次にC++で確認してみます。
[File]-[new]-[C++ Project]
をクリックします。

Cと比べて、 Hello World C++ project が違っています。
Next >ボタンをクリックします。

Cのときと同じですが、何かのときに勘違いがないように
!!!Hello World!!! C++ project
に変えました。
Finish ボタンをクリックします。
この後の手順はCと同じです。動作を確認するとOKです。
クロスコンパイルに必要なツールのインストール
C クロスコンパイラをインストールします。
sunaga@bbb:~$ sudo apt-get install gcc-arm-linux-gnueabihf

C++ クロスコンパイラをインストールします。
sunaga@bbb:~$ sudo apt-get install g++-arm-linux-gnueabihf

arm用のデバッガーをインストールします。
sunaga@bbb:~$ sudo apt-get install gdb-multiarch
Beagle Bone Black のプロジェクト作成
[File]-[New]-[Project]をクリックします。

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

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



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

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


Cross Compiler Prefix:は
arm-linux-gnueabihf-
です。
Cross Compiler Path:は
/usr/arm-linux-gnueabihf/bin/
です。
最後に[Finish]ボタンをクリックしてください。
ソースファイルのビルド
すでにソースファイルは作成されています。


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

これで実行ファイルができました。
もちろんarmでコンパイルしたのでUbuntu上では動かない実行ファイルです。
cd ~/workspace/CCHello_c/Debug
ls で見ると確かに実行ファイルCCHello_cがあります。
./CCHello_c
実行できませんと起こられます。
実行できませんと怒られます。
当たり前のことが確認できました。
これをBeagle Bone Blackに転送して確認します。
Ubuntu は
http://www.armhf.com/download/
ubuntu-trusty-14.04-rootfs-3.14.4.1-bone-armhf.com.tar.xz
をつかっています。
プライベートIPアドレスは、192.168.1.88
です。sftpでBeagle Bone Blackにファイルを転送します。
パスワードはubuntuです。

sunaga@bbb:~$ cd workspace/CCHello_c/Debug
sunaga@bbb:~/workspace/CCHello_c/Debug$ sftp ubuntu@192.168.1.88
The authenticity of host '192.168.1.88 (192.168.1.88)' can't be established.
ECDSA key fingerprint is 95:1d:fe:c8:ba:0c:c6:81:c4:ba:43:b9:d9:a1:32:ed.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.88' (ECDSA) to the list of known hosts.
ubuntu@192.168.1.88's password:
Connected to 192.168.1.88.
sftp> put CCHello_c
Uploading CCHello_c to /home/ubuntu/CCHello_c
CCHello_c 100% 31KB 31.5KB/s 00:00
sftp> exit
sunaga@bbb:~/workspace/CCHello_c/Debug$


次は、sshで接続してCCHello_cが動作するか確認します。

sunaga@bbb:~$ ssh ubuntu@192.168.1.88
ubuntu@192.168.1.88's password:
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.14.4.1-bone-armhf.com armv7l)

* Documentation: https://help.ubuntu.com/
Last login: Fri Jan 2 05:04:08 1970 from 192.168.1.3
ubuntu@ubuntu-armhf:~$ ls
CCHello_c hello test
ちゃんとファイルが転送されています。

ubuntu@ubuntu-armhf:~$ ./CCHello_c
!!!Hello World!!! cross compile C project
ちゃんと動きました。

C++でも同じようにできます。説明は省略します。

しかし、これってとても面倒です。
これを解決するのがリモートシステムです。
リモートシステム
 Raspberry Piと同様にリモートシステムを使うことができます。
 
 sftpとsshを使って作成した実行ファイルが動作することを確認しました。リモートシステムを使うとsftpとsshと同等の機能ををEclipseから使うことができます。
[Window]-[Show View]-[Other]をクリックします。

Remote Systems
を選択して[OK]ボタンをクリックします。

これは縦に表示したほうが見やすいので、次のようにドラッグして移動します。

Remote Systems が表示されます。


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


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


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


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


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


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

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

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

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

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

自動でBeagle Bone Blackに転送できるようにしたい
デバッグもできるようにしたい


調べた結果できます。
Raspberry Piと違うのはgdbserverが入っていないので、インストールします。
sshでBeagle Bone Blackに接続して、インストールします。

ubuntu@ubuntu-armhf:~$ sudo apt-get install gdvserver

次はEclipseのリモートデバッグの設定をします。
[Run]-[Debug Configrations...]をクリックします。

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

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


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

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

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

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

やっとデバッグもできるようになったぞ!!!!!!

追加記事:2014/11/13
リモートデバッグ開始以下のような赤字の警告がでることがあります。

このままでもデバッグを進めることができますが、気持ち悪いです。
これを出ないようにするには、
デバッグ設定画面で、libのパスを指定します。

Addボタンをクリックしてlibのあるディレクトリを指定してください。

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のアイコンを右クリックすると固定できます。

[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でデバッグできます。