2017年2月9日木曜日

Visual Studio で Raspberry Pi のリモートデバッグ

 Visual Studio Community 2015 で Raspberry Pi 用 の C ソフト(ARM用)を作って、リモート・デバッグを行って見ます。

0.事前準備
 Raspberry Pi と PC は SSHによる通信を行いますので通信ができることを確認して下さい。(鍵の作成は必要ありません。)
 本ブログを参照してください。

1.Raspberry Pi 側の準備

1-1.GCC と GDB のインストール。
 $sudo apt-get install g++ gdb gdbserverとして
 (g++ gdb gdbserver は既にインストール済みとなっているかもしれません?)

1-2.WiringPi のダウンロード
 GitHub より、ダウンロードします。

 $ git clone git://git.drogon.net/wiringPi

Cloning into 'wiringPi'...
remote: Counting objects: 1059, done.
remote: Compressing objects: 100% (877/877), done.
remote: Total 1059 (delta 752), reused 212 (delta 142)
Receiving objects: 100% (1059/1059), 329.48 KiB | 243.00 KiB/s, done.
Resolving deltas: 100% (752/752), done.
Checking connectivity... done.

1-3.WiringPi のビルド&インストール
 $ cd wiringPi
 $ ./build

  ・
  ・
  ・
  ・
 All Done.

NOTE: To compile programs with wiringPi, you need to add:
    -lwiringPi
  to your compile line(s) To use the Gertboard, MaxDetect, etc.
  code (the devLib), you need to also add:
    -lwiringPiDev
  to your compile line(s).

2.PC 側(Visual Studio )準備
2-1.Visual C++ for Linux Development
 Visual Studio で ツール(T) 拡張機能と更新プログラム(U)  を選択し、オンライン --> Visual Studio ギャラリーを指定し、Linux を検索する。
  Visual C++ for Linux Development が表示されるのでクリックしてダウンロードする。  ( VC_Linux.exe を適当なフォルダーにダウンロードする。)

 Visual Studio を一旦終了し、VC_Linux.exe を実行する。

2-2.VC_Linux のインストール


 インストールが終了したら Visual Studio を再起動する。

3-1.新しいプロジェクト... を選択する。

3-2.Blink(Raspberry) を選択する。

3-3.ソースが表示される。

3-4.デバッグ開始(F5) を選択

3-5.Connect to Linux
 必要事項を入力し、 Connect をクリックするとリモートデバッグが可能となります。



3-6.ブレークポイントで停止
  ( delay の時間は上図の様に変更可能です。)
 デバッグ開始(F5)で20行目で停止します。

 逆アセンブルを表示したところ

保存したソリューションの bin --> ARM --> Debug フォルダーに Blink1.out が出来上がっています。適当な転送ソフト( WinSCP 等)でRaspberry Pi に転送し、chmod +x Blink1.out で実行権を与えば LED の点滅が可能になります。

0x0001072C の行が2行表示されている!?(ご愛敬か?)

/home/pi ディレクトリに projects ディレクトリが出来ており

projects --- Blink1 --+-- bin -- ARM -- Debug -- Blink1.out
                      +-- obj -- ARM -- Debug -- main.o
                      +-- main.cpp

Blink1.out を実行しても LED の点滅は始まる。

0 件のコメント:

コメントを投稿