0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

windowsでのraspipicoの開発環境の構築 その3 デバック実行

Last updated at Posted at 2022-02-08

下記の記事を見つけたので、VScode上でもデバック実行ができないかなと考えた。

結論としては、「WSL2」上でデバッグツール「gdb-multiarch」と「OpenOCD」を使ってwindowsの「VSCode」からGUIによるデバック実行ができた。

まだ一部改良の余地があるが手順は次の通りとなった。

  1. (初回)picoにpicoproveを書き込む
  2. (初回)WSLへソフトをインストールする。
  3. (毎回)picoをPCに接続する
  4. (毎回)windows のpower shellからwsl(ubuntu)へUSBのブリッジ接続設定をする。
  5. (初回のみ)Ubuntu上でUSBへの接続設定を行う
  6. (毎回)openocdの起動を行う
  7. (毎回)デバックを開始する。

かなり手順が短く、簡単にできる。
また、手順6まで進めばUSBを外さない限りは6,7を繰り返すことでコードの修正、デバックを繰り返すことができる。
必要な部材は、下記のようになっている

  • Raspberry Pi Pico 二台
  • USBケーブル 一本
  • PC 一台

Raspberry Pi Picoを二台使用し、一台はdebugerとして使用し、もう一台が動作させるPicoとなる。
Picoをデバッガーにするのは初回のみで、以降は変更しなくてよい。

(初回)picoにpicoproveを書き込む

下記の記事を参考にインストールを行う。

WSL上で、適当な位置に下記のプロジェクトをクローンする。

git clone https://github.com/raspberrypi/picoprobe.git

クローンを行った後は下記のようなディレクトリとなる。

~/src/repo/picoprobe$ tree -L 1 ./
./
├── CMakeLists.txt
├── pico_sdk_import.cmake
└── src

ビルドを行うが、pico_sdkのパスを環境変数に設定する必要がある。
picoprobe/CMakeLists.txtに下記の一文を書き込むことで、Cmakeによって環境変数を加えられる。

...
cmake_minimum_required(VERSION 3.12)

set(ENV{PICO_SDK_PATH} "${CMAKE_SOURCE_DIR}/pico-sdk" )

include(pico_sdk_import.cmake)
...

set(ENV{PICO_SDK_PATH} "${CMAKE_SOURCE_DIR}/pico-sdk" )"${CMAKE_SOURCE_DIR}/pico-sdk"を変更することで自分の環境に合わせたパスを指定する。
今回は、picoprobeのプロジェクト内にpico-sdkをクローンした。

~/src/repo/picoprobe$git clone https://github.com/raspberrypi/pico-sdk.git
~/src/repo/picoprobe$ tree -L 1 ./
./
├── CMakeLists.txt
├── pico-sdk
├── pico_sdk_import.cmake
└── src

cmakeの拡張からbuildを行う。

build完了時のウインドウ

buildが完了すると、build下にpicoprobe.uf2が生成される。

~/src/repo/picoprobe$ tree -L 1 build/
build/
├── CMakeCache.txt
├── CMakeFiles
├── Makefile
├── cmake_install.cmake
├── compile_commands.json
├── elf2uf2
├── generated
├── pico-sdk
├── picoprobe.bin
├── picoprobe.dis
├── picoprobe.elf
├── picoprobe.elf.map
├── picoprobe.hex
├── picoprobe.uf2
├── pioasm
└── probe.pio.h

picoprobe.uf2をdebugger用のPicoに書き込む。

書き込みは前の記事を参考に、接続し、転送を行う。

Raspberry Pi Picoをマウントするには、bootボタンを押したままUSBを接続する。
その後、下記のコマンドを実行する。今回は、windows上でDドライブにRaspberry Pi Picoがマウントされたことを前提としている。

$ sudo mkdir /mnt/d
$ sudo mount -t drvfs D: /mnt/d

上記によって下記のようにlinuxにRaspberry Pi Picoがマウントされる。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        251G  4.6G  234G   2% /
tmpfs           3.1G     0  3.1G   0% /mnt/wsl
tools           238G  201G   38G  85% /init
none            3.1G     0  3.1G   0% /dev
none            3.1G  8.0K  3.1G   1% /run
none            3.1G     0  3.1G   0% /run/lock
none            3.1G     0  3.1G   0% /run/shm
none            3.1G     0  3.1G   0% /run/user
tmpfs           3.1G     0  3.1G   0% /sys/fs/cgroup
drivers         238G  201G   38G  85% /usr/lib/wsl/drivers
lib             238G  201G   38G  85% /usr/lib/wsl/lib
C:\             238G  201G   38G  85% /mnt/c
D:              128M   20K  128M   1% /mnt/d

最後に、$ cp build/src/pico-display/pico_display.uf2 /mnt/d/を行うとPicoにコピーされる。

コピーされたのち、一回Picoを抜いて再度挿すとコピーした実行ファイルが実行される。

(初回)WSLへソフトをインストール・セットアップ

「OpenOCD」と「gdb-multiarch」をWSLへインストールする。
ターミナルを起動して下記コマンドを実行する。


$sudo apt update

$sudo apt install openocd gdb-multiarch

(毎回)picoをPCに接続する

PicoをPCに接続する。

Pico同士の接続は下記のように行う。
左がpicoprobe搭載Picoデバッガー、右がデバック対象のPico

picoprobeとデバック対象のPicoの結線図

参照

(毎回)windows のpower shellからwsl(ubuntu)へUSBのブリッジ接続設定をする

接続したときに、windowsとwslのUSBを中継する設定を行う。

環境によってはwindowsのpower shell上でusbipd-winのアップデートを行う必要がある。

> winget install --interactive --exact dorssel.usbipd-win

windowsのpower shell上でWSLと接続できるusbデバイスの情報を下記のコマンドで確認できる。

> usbipd wsl list
BUSID  DEVICE                                                        STATE
2-1    USB シリアル デバイス (COM3), Picoprobe                       Not attached
2-7    TOSHIBA Web Camera - FHD                                      Not attached
2-8    インテル(R) ワイヤレス Bluetooth(R)                           Not attached
3-2    Synaptics FP Sensors (WBF) (PID=0010)                         Not attached

picoprobeをWSLに接続する。

> usbipd wsl attach --busid 2-1

以上で接続できる。

(初回のみ)Ubuntu上でUSBへの接続設定を行う

Ubuntu上で管理者権限無しでpicoprobeにアクセスできるように設定する。
udevadmを使用するがWSLのUbuntu20.04では有効になっていないため有効化する。

$ sudo /lib/systemd/systemd-udevd --daemon

次に、picoprobeの接続を管理者権限無しでできるようルールを追加する。

$ sudo nano /etc/udev/rules.d/60-picoprobe.rules 

60-picoprobe.rules の中

# Raspberry Pi Pico probe
ATTRS{idVendor}=="2e8a", ATTRS{idProduct}=="0004", MODE="0777",TAG+=">

この設定を読み込むために下記のコマンドを実行する。

$ sudo udevadm control --reload-rules 
$ sudo udevadm trigger 

以上でopenocdを使用するときに管理者権限は不要となる。

(毎回)openocdの起動を行う

OpenOCDの起動を行い、GDBとの接続ができるようにしておく。

$ openocd -f interface/picoprobe.cfg -f target/rp2040.cfg -s tcl

(毎回)デバックを開始する

VScodeからlaunch.jsonを使用しGDBを起動できるようにする。

下記のリポジトリに例としてLEDチカチカプロジェクトを用意した。

以上でLEDのチカチカをデバック実行できるようにした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?