6
10

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 3 years have passed since last update.

Raspberry Pi PicoのGDBデバッグ環境をWindows 10ネイティブ環境に構築する

Posted at

はじめに

ブームにのって、Rasyberry Pi Picoを5個ほど購入してみました。
公式ドキュメントがよくできているので、本家のRaspberry Pi 4への開発環境構築は簡単にできたので、普段使いのWindows 10環境にGDBのデバッグ環境を含め構築しようとしたところ、はまりどころ満載だったのでメモとして残します。
各プラットフォーム別の構築難易度は以下のイメージです。(あくまで個人の感想です)

 Raspberry Pi > Mac OS > Windows + WSL >> Windows

Toolchainのインストール

基本的に公式ガイド「getting-started-with-pico.pdf」の8.2節に従ってインストールできます。
なんでARM GCC compilerをインストールしたのに、Visual Studio 2019が必要なのという疑問はあとで理由がわかります。

  • ARM GCC compiler
  • CMake
  • Build Tools for Visual Studio 2019
  • Python 3.7
  • Git

GDBのインストール

Raspberry Pi PicoをPicoprobe(USB → SWD and UART converter)とすることにより、2台のPicoを使用してGDBによるデバッグを行うことができます。これはぜひ使いたい!
基本的なインストール方法は、公式ガイド「getting-started-with-pico.pdf」のAppendix A.1.2に記載してありますが、これがすんないりとはいきません。

image.png

インストールが必要なツールは以下になります。

  • OpenOCD
    OpenOCDをビルドする環境として、まずMSYS2をインストールしろと公式ガイドに記載してありますが、結論からすると現状(2月初旬)の公式GitHub をクローンしてビルドしても動作しません。(そのままでは。。。)
    Liam Fraser氏が正常動作するOpenOCDを公開されていますので、こちらをダウンロードして使うのが手っ取り早いです。

  • Picoprobe driver
    Picoprobe化されたPicoは、PCから見るとUSBの複合デバイスとして認識されます。1つはCDC UART、もう一つはデバッグ用のSWDインタフェースで、これはベンダユニーククラスです。
    ベンダユニーククラス用のWindowsドライバとして、Zadigを使って設定することが想定されています。
    image.png

Zadigで割り当てるUSBドライバですが、公式では、libusb-win32を使うことになっていますが、先のOpenOCDを自力でビルドした場合、この設定では動かないようです。(DriverにWinUSB (v6.1.7600.16385)を指定すれば動くという情報あり!)
Liam Fraser氏のOpenOCDビルド版では、公式ガイドの通りの設定でOKです。

VScodeの設定

  • path設定

公式ガイドでは、VScodeの起動は、Visual Studio2019のDeveloper Command Prompt for VS 2019から起動するように記載してあります。
VS2019の環境を使うことが前提となっているように見えますが、真の目的はどうやらVC2019のnmake.exeを使いたいだけのようです。
ということで、環境変数にnmake.exeのpathを設定しましょう。普通にVScodeを起動してもデバッグできるようになります。
nmake.exeのpathは、Developer Command Prompt for VS 2019から、「where nmake.exe」をタイプすると教えてくれます。

image.png

  • settings.json

setting.jsonに必要な記載を以下に示します。
どうもwindows版のパス名の指定がスラッシュだったり、バックスラッシュだったり一貫性がないですね。

# settings.json
    {
        "terminal.integrated.shell.windows": "C:\\Program Files\\Git\\bin\\bash.exe",
        "git.autofetch": true,
        "explorer.confirmDelete": false,
        "diffEditor.renderSideBySide": true,
        "cmake.configureOnOpen": true,
        "window.zoomLevel": 0,
        "git.enableSmartCommit": true,
        "cmake.configureEnvironment": {
            "PICO_SDK_PATH": "..\\..\\pico-sdk"
        },
        "cmake.generator": "NMake Makefiles",
        "cortex-debug.gdbPath": "arm-none-eabi-gdb",
        "cortex-debug.openocdPath": "D:/src/pico/Downloads/openocd_picoprobe/openocd.exe",
    }
  • launch.json

launch.jsonに必要な記載を以下に示します。
絶対パスか相対パスかもポイントです。正解がよくわかりませんがとりあえず動いている例です。

# launch.json
    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Pico Debug",
                "cwd": "${workspaceRoot}",
                "executable": "${command:cmake.launchTargetPath}",
                "request": "launch",
                "type": "cortex-debug",
                "servertype": "openocd",
                // This may need to be arm-none-eabi-gdb depending on your system
                "gdbPath" : "arm-none-eabi-gdb.exe",
                "device": "pico2040",
                "configFiles": [
                    "interface/picoprobe.cfg",
                    "target/rp2040.cfg"
                ],
                "searchDir": ["D:/src/pico/Downloads/openocd_picoprobe/tcl"],
                "svdFile": "D:/src/pico/Downloads/pico-sdk/src/rp2040/hardware_regs/rp2040.svd",
                "runToMain": true,
                // Work around for stopping at main on restart
                "postRestartCommands": [
                    "break main",
                    "continue"
                ],
            }
        ]
    }

image.png

参考サイト

参考になったのは以下のサイトの記事です。
https://www.element14.com/community/community/raspberry-pi/blog/2021/02/07/debugging-the-raspberry-pi-pico-on-windows-10

6
10
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
6
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?