ラズパイのB+タイプのスペックだと、やはりGUI操作、とくにVNCやRDPなどのリモートデスクトップ接続では、正直操作がしんどい。Scratchをリモートデスクトップ接続で操作すると、その症状は顕著。
C言語開発なら、SSHのリモートコンソール接続で、VIなどのテキストエディタを駆使して、CLIベースでの開発でも十分ではあるが、IDEでGUI操作して開発したいもの。
そんな思いから、本文に示す方法で、開発することを実現してみた。
<前提>
本文では、開発言語をC/C++言語とする。 開発ツール(IDE)はNetBeansを使用し、いずれもGNUEのものを使用する。
Ⅰ.コンパイラなどの開発ツールコマンドの導入
以下の手順に従い、ラズパイと開発端末に、同じバージョンのC/C++コンパイラ類をインストールする。
1.GCC(C言語コンパイラ)
root@yspc911:~# aptitude install gcc
以下の新規パッケージがインストールされます:
binutils{a} gcc gcc-4.7{a} libc-dev-bin{a} libc6-dev{a} libitm1{a}
linux-libc-dev{a} manpages-dev{a}
更新: 0 個、新規インストール: 8 個、削除: 0 個、保留: 14 個。
アーカイブ 20.6 M バイト中 10.5 M バイトを取得する必要があります。展開後に 54.6 M バイトのディスク領域が新たに消費されます。
先に進みますか? [Y/n/?] Y
Media change: Please insert the disc labeled ‘Debian GNU/Linux 7.8.0 _Wheezy_ – Official i386 DVD Binary-1 20150110-13:32’ into the drive ‘/media/cdrom/’ and press [Enter].
取得: 1 http://security.debian.org/ wheezy/updates/main binutils i386 2.22-8+deb7u2 [4,555 kB]
取得: 2 http://security.debian.org/ wheezy/updates/main libc-dev-bin i386 2.13-38+deb7u8 [221 kB]
取得: 3 http://security.debian.org/ wheezy/updates/main linux-libc-dev i386 3.2.68-1+deb7u1 [837 kB]
取得: 4 http://security.debian.org/ wheezy/updates/main libc6-dev i386 2.13-38+deb7u8 [4,936 kB]
Fetched 10.5 MB in 1分 34秒 (112 kB/s)
以前に未選択のパッケージ libitm1:i386 を選択しています。
(データベースを読み込んでいます … 現在 136126 個のファイルとディレクトリがインストールされています。)
(…/libitm1_4.7.2-5_i386.deb から) libitm1:i386 を展開しています…
以前に未選択のパッケージ binutils を選択しています。
(…/binutils_2.22-8+deb7u2_i386.deb から) binutils を展開しています…
以前に未選択のパッケージ gcc-4.7 を選択しています。
(…/gcc-4.7_4.7.2-5_i386.deb から) gcc-4.7 を展開しています…
以前に未選択のパッケージ gcc を選択しています。
(…/gcc_4.7.2-1_i386.deb から) gcc を展開しています…
以前に未選択のパッケージ libc-dev-bin を選択しています。
(…/libc-dev-bin_2.13-38+deb7u8_i386.deb から) libc-dev-bin を展開しています…
以前に未選択のパッケージ linux-libc-dev:i386 を選択しています。
(…/linux-libc-dev_3.2.68-1+deb7u1_i386.deb から) linux-libc-dev:i386 を展開しています…
以前に未選択のパッケージ libc6-dev:i386 を選択しています。
(…/libc6-dev_2.13-38+deb7u8_i386.deb から) libc6-dev:i386 を展開しています…
以前に未選択のパッケージ manpages-dev を選択しています。
(…/manpages-dev_3.44-1_all.deb から) manpages-dev を展開しています…
man-db のトリガを処理しています …
libitm1:i386 (4.7.2-5) を設定しています …
binutils (2.22-8+deb7u2) を設定しています …
gcc-4.7 (4.7.2-5) を設定しています …
gcc (4:4.7.2-1) を設定しています …
libc-dev-bin (2.13-38+deb7u8) を設定しています …
linux-libc-dev:i386 (3.2.68-1+deb7u1) を設定しています …
libc6-dev:i386 (2.13-38+deb7u8) を設定しています …
manpages-dev (3.44-1) を設定しています …
・・・・
root@yspc911:~# which gcc
/usr/bin/gcc
2.GC++(C++コンパイラ)
root@yspc911:~# aptitude install g++
以下の新規パッケージがインストールされます:
g++ g++-4.7{a} libstdc++6-4.7-dev{a}
更新: 0 個、新規インストール: 3 個、削除: 0 個、保留: 14 個。
アーカイブ 9,499 k バイト中 0 バイトを取得する必要があります。展開後に 26.3 M バイトのディスク領域が新たに消費されます。
先に進みますか? [Y/n/?] Y
75% [Working]以前に未選択のパッケージ libstdc++6-4.7-dev を選択しています。
(データベースを読み込んでいます … 現在 139595 個のファイルとディレクトリがインストールされています。)
(…/libstdc++6-4.7-dev_4.7.2-5_i386.deb から) libstdc++6-4.7-dev を展開しています…
以前に未選択のパッケージ g++-4.7 を選択しています。
(…/g++-4.7_4.7.2-5_i386.deb から) g++-4.7 を展開しています…
以前に未選択のパッケージ g++ を選択しています。
(…/g++_4.7.2-1_i386.deb から) g++ を展開しています…
man-db のトリガを処理しています …
libstdc++6-4.7-dev (4.7.2-5) を設定しています …
g++-4.7 (4.7.2-5) を設定しています …
g++ (4:4.7.2-1) を設定しています …
update-alternatives: /usr/bin/c++ (c++) を提供するために 自動モード で /usr/bin/g++ を使います
・・・・
以下、インストール後の確認。
root@yspc911:~# which g++
/usr/bin/g++
3.GDB(デバッガ)
root@yspc911:~# aptitude install gdb
以下の新規パッケージがインストールされます:
gdb gdbserver{a}
更新: 0 個、新規インストール: 2 個、削除: 0 個、保留: 14 個。
アーカイブ 2,349 k バイト中 0 バイトを取得する必要があります。展開後に 5,923 k バイトのディスク領域が新たに消費されます。
先に進みますか? [Y/n/?] Y
67% [Working]以前に未選択のパッケージ gdbserver を選択しています。
(データベースを読み込んでいます … 現在 140352 個のファイルとディレクトリがインストールされています。)
(…/gdbserver_7.4.1+dfsg-0.1_i386.deb から) gdbserver を展開しています…
以前に未選択のパッケージ gdb を選択しています。
(…/gdb_7.4.1+dfsg-0.1_i386.deb から) gdb を展開しています…
man-db のトリガを処理しています …
menu のトリガを処理しています …
gdbserver (7.4.1+dfsg-0.1) を設定しています …
gdb (7.4.1+dfsg-0.1) を設定しています …
menu のトリガを処理しています …
・・・・・・
以下、インストール後の確認として、
root@yspc911:~# which gdb
/usr/bin/gdb
4.GMAKE(コンパイル設定ツール)
root@yspc911:~# aptitude install make
以下の新規パッケージがインストールされます:
make
更新: 0 個、新規インストール: 1 個、削除: 0 個、保留: 14 個。
アーカイブ 398 k バイト中 0 バイトを取得する必要があります。展開後に 1,166 k バイトのディスク領域が新たに消費されます。
50% [Working]以前に未選択のパッケージ make を選択しています。
(データベースを読み込んでいます … 現在 140402 個のファイルとディレクトリがインストールされています。)
(…/make_3.81-8.2_i386.deb から) make を展開しています…
man-db のトリガを処理しています …
make (3.81-8.2) を設定しています …
・・・・
以下、インストール後の確認として、、、
root@yspc911:~# which make
/usr/bin/make
5.WiringPi
この導入手順は、このリンクページを参照のこと。
Ⅱ.開発端末側での
NetBeansIDEの導入
1.JDKのインストール
jdk-8u65-linux-i586.tar.gzをダウンロードして、インストール。
ただし、今回は、JDKとNetBeansが一体となったインストーラ” jdk-8u45-nb-8_0_2-linux-i586.sh”を使用してインストールする。
root@yspc911:/home/pi/ダウンロード# sh jdk-8u45-nb-8_0_2-linux-i586.sh
上記実行後、インストーラウィザードが表示され、GUI操作となる
2.NetBeansのインストール
ケース1) 前手順1.でjdk-8u65-linux-i586.tar.gzを使ってインストールした場合、
http://netbeans.org/downloads/にアクセスし、netbeans-8.0.2-cpp-linux.shをダウンロードして、これを下記のように実行してインストールする。
$ sh netbeans-8.0.2-cpp-linux.sh
※上記スクリプトは、rootユーザで実行すると、エラー終了する。
ケース2)” jdk-8u45-nb-8_0_2-linux-i586.sh”を使ってインストールした場合、
前手順実行後、JDKといっしょにNetBeansもインストールされる。
ただしこの場合、C/C++用プラグインが含まれていないため、次手順3.を実施して、別途当該プラグインをインストールすること。
上記スクリプトを実行後、インストールが完了したら、以下のコマンドを入力して、NetBeansを起動する。
# /usr/local/netbeans-8.0.2/bin/netbeans &
もしくは、「アプリケーション」メニュー>「プログラミング」>「NetBeans8.0.2」を実行する。
3.C/C++用のプラグインの追加
前手順2.でケース2)の方法でインストールした場合は、この手順を実行すること。
NetBeansを起動したら、まず最初に、開発言語C/C++での環境設定(プラグイン)を行う。あと、アップデートも。
NetBeansのメニューバーから、「ツール」>「プラグイン」を実行し、「設定」タブをクリックする。
とりあえず、すべてのアプデートセンターにチェックを入れておく。
ひきつづき、同一ウィンドウの「使用可能なプラグイン」タブをクリックし、”C/C++”をチェックしてインストールする。
さらに、「更新」タブをクリックして、インストールしたプラグインを更新する。
Ⅲ.NetBeansでのリモートターゲットの登録
NetBeansのメニューバーから、「ツール」>「オプション」を実行し、「C/C++」アイコンをクリックする。
ラズパイにて、SSHを起動しているのであれば、SMBを使わずに、”SFTP”を選択する。
設定が完了したら、「接続」を実行して、ラズパイへの接続を確認する。
接続が成功すると、下図のような状態になる。
補足)リモート接続を速やかにできるようするために、各マシンの/etc/hostsファイルにそれぞれが名前解決できるように記述するのがいいかも?
Ⅳ.ラズパイ用リモート開発プロジェクトの設定
新規プロジェクトを作成したら、そのプロジェクトに対して下図の設定を行う。
①WiringPiのリンクオプションの指定
②プログラム実行オプションの指定
Ⅲ章でラズパイにリモート接続する際のユーザを”pi”としたため、ビルドして生成したバイナリを実行するには、sudoして実行する必要がある。(これは、本文のリモート開発に限らず、ラズパイでのローカル開発でも同じ事)
以上の、環境設定を行うことで、ラズパイのリモート開発が快適に?行えるようになったと思われる。