ArtifactNoise合同会社所属の北神が、技術や研究にまつわる話題を書き出していくブログです。
お仕事に関しては kitagami@artifactnoise.com にて対応いたします。

WindowsでmingwやCygwinを使わずにWSL2のみで開発環境を構築します。

本記事はまだメモです。

どこかでまとめる予定ですが、分かる人やもう少しでわかる人向けの情報です。

たまにWSL2のアップデートで上手く行かない場合があります。

何かのexeをアップデートすると治るかも。

WSL2の基本コマンド

Ubuntuをインストールする

wsl --install -d Ubuntu

Linux カーネルのアップデート

wsl --update

シャットダウン

wsl --shutdown

登録されてるリストとバージョン

wsl -l -v

ディストロのアンインストール

wsl --unregister Ubuntu

WSL2上のUbuntuを最新にする

sudo apt update
sudo apt upgrade

必要なライブラリをインストールする

sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential -y
sudo apt install libusb-1.0-0-dev libusb-dev gdb-multiarch libtool -y
sudo apt install pkg-config -y
sudo apt install --reinstall ca-certificates -y
sudo apt install python-is-python3 python3-tk -y
sudo apt install automake autoconf texinfo libtool libftdi-dev -y
sudo apt install git -y
sudo apt install linux-tools-5.4.0-77-generic hwdata
sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/5.4.0-77-generic/usbip 20

先にPATHを通しておく

nano .bashrc の最後にパスを追加

export PICO_SDK_PATH=$HOME/pico/pico-sdk
export PICO_EXAMPLES_PATH=$HOME/pico/pico-examples
export PICO_EXTRAS_PATH=$HOME/pico/pico-extras
export PICO_PLAYGROUND_PATH=$HOME/pico/pico-playground

export PATH=$PATH:$HOME/pico/pico-sdk/tools/elf2uf2/build
export PATH=$PATH:$HOME/pico/pico-sdk/tools/pioasm/build
export PATH=$PATH:$HOME/pico/picotool/build
export PATH=$PATH=:$HOME/pico/pico-project-generator

.bashrcの内容を再反映

source ~/.bashrc

PICOの開発環境を構築する

cd ~/
mkdir pico
cd pico

※PATHの関係でホームディレクトリ直下にpicoというフォルダが出来ます。変更もできますが後述のPATHの変更が必要になります。

git clone -b master https://github.com/raspberrypi/pico-sdk.git
git clone -b master https://github.com/raspberrypi/picotool.git
git clone -b master https://github.com/raspberrypi/pico-examples.git
cd pico-sdk
git submodule update --init
cd ..

picotoolをビルドする

cd picotool
mkdir build
cd build
cmake ..
make
cd ~/pico

picosdkをビルドする

  • elf2uf2をビルド
cd ~/pico
cd pico-sdk/tools/elf2uf2
mkdir build
cd build
cmake ..
make
  • pioasmをビルド
cd ~/pico
cd pico-sdk/tools/pioasm
mkdir build
cd build
cmake ..
make

exampleをコンパイルすいる

cd ~/pico
cd pico-examples
mkdir build
cd build
cmake ..
cd blink
make -j4

picoprobeをコンパイルしてPicoに書き込む

git clone https://github.com/raspberrypi/picoprobe.git
mkdir build
cd build/
cmake ..
make -j4

picoをUSBメモリとして起動し、コンパイルしたデータをPicoに書き込む

※以下のコマンドはPICOがWindowsでEドライブとして認識した際の内容です。違う際は"e:"の所を変更してください

sudo mkdir /mnt/pico
sudo mount -t drvfs e: /mnt/pico
cp ~/pico/picoprobe/build/picoprobe.uf2 /mnt/pico

openocd

cd ~/pico
git clone https://github.com/raspberrypi/openocd.git --branch rp2040 --depth=1 --no-single-branch
cd openocd
./bootstrap
./configure --enable-picoprobe
make -j4
sudo make install

udevルールの追加

echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="2e8a", ATTRS{idProduct}=="0004", MODE="0666"' | sudo tee /etc/udev/rules.d/60-rp2040.rules
sudo service udev restart
sudo udevadm trigger

WSL2 にUSB機能を接続

参考にしたサイト

https://devblogs.microsoft.com/commandline/connecting-usb-devices-to-wsl/

usbipd wsl list
usbipd wsl attach --busid <busid>

OpenOCDを立ち上げ

sudo openocd -f interface/picoprobe.cfg -f target/rp2040.cfg

※ERRORの文字がなく起動したらCTL+Cで終了します

gdbを立ち上げ

gdb-multiarch blink.elf
(gdb) target extended-remote localhost:3333

新規プロジェクトの作成

cd ~/pico
mkdir MyProject
cd MyProject

pico_project.py <プロジェクト名> -p vscode

例)
pico_project.py test01 -p vscode

cd test01

VSCode環境で開発を行う

cd /home/ubuntu/pico/MyProject/test01
code .

以下 立ち上がったVSCode上で設定

拡張機能をインストールする .. code:

Cortex-Debug
CMake Tools
※CMake という別のライブラリがありますが、それは入れない
C/C++
C/C++ Themes
C/C++ Extension Pack

左にある▷ボタンを押し、「実行とデバック」をクリック 選択画面で「Cortex-Debug」を選択 歯車マークをクリックし、

"configFiles": [
  "interface/raspberrypi-swd.cfg",
  "target/rp2040.cfg"
  ],

  を

"configFiles": [
  "interface/picoprobe.cfg",
  "target/rp2040.cfg"
  ],

に変更。

pico_projectの使い方

git clone https://github.com/raspberrypi/pico-project-generator.git

pico_project.py

-h、-help                       このヘルプメッセージを表示して終了します
-t TSV、-tsv                    TSV代替のpico_configs.tsvファイルを選択します
-o OUTPUT、-output OUTPUT       代替のCMakeList.txtファイル名を設定します
-x、-examples                   Pico標準ライブラリのサンプルコードを追加します
-l、-list                       利用可能な機能を一覧表示します
-c、-configs                    使用可能なプロジェクト構成アイテムを一覧表示します
-f FEATURE、-feature FEATURE    生成されたプロジェクトに機能を追加する
-over、-overwrite               既存のプロジェクトとファイルを上書きします
-b、-build                      プロジェクトの作成後にビルド
-g、-gui                        プロジェクトジェネレータのGUIバージョンを実行します
-p PROJECT、-project PROJECT    IDE用のプロジェクトファイルを生成します。オプションは次のとおりです。vscode
-r、-runFrom                    RAMフラッシュではなくRAMからプログラムを実行します
-uart、-uart                    UARTへのコンソール出力(デフォルト)
-nouart、-nouart                UARTへのコンソール出力を無効にします
-usb、-usb                      USBへのコンソール出力(他のUSB機能を無効にします)
cpp、-cpp                       C ++コードを生成します
-d DEBUGGER、-debugger DEBUGGE

spi      SPI
i2c      I2C interface
dma      DMA support
pio      PIO interface
interp   HW interpolation
timer    HW timer
watch    HW watchdog
clocks   HW clocks

pico_project.py  test01 -x -f spi -f i2c -f pio -p vscodec -usb

pico_project.py -p vscode