はじめに
本記事では,「Interface 2023年7月号」にて掲載されているRTOS「Try Kernel」の,Linux+VSCodeを用いた開発環境構築手順を説明します.
実のところ,「Try Kernel」の開発環境はPicoprobeによるRaspberry Pi Picoのデバッグ環境であり,関連する情報は公式,非公式含めて十分にあるのですが,本記事は一つの事例として参考にしていただけると幸いです.
本記事の後半では,本記事が提供するリポジトリを使用した,Dockerを活用したVSCodeの機能であるDevcontainerによる,半自動の開発環境構築についても説明します.
なお,本記事は非公式であり,あくまでいち読者がTry Kernelの開発環境構築を行った事例であることをご了承ください.
前提条件
本記事で使用するハードウェア
- Raspberry Pi Pico関連
- Raspberry Pi Pico ※
- Try Kernel実行用とPicoprobe用の2台が必要
- ピンヘッダ ※
- Pico2台分 + デバッグポート用
- Grove Shield for Pi Pico ※
- USBコネクタ (A-microB) 2本 ※
- はんだ付けの環境
- Raspberry Pi Pico ※
- 周辺機器
- Grove RGBバックライト液晶モジュール ※
- GROVE - ジェスチャー
- GROVE - 光センサ v1.2
※のあるものは秋月電子で購入可能
開発環境
- Ubuntu 22.04
ハードウェアの構築
はんだ付け
Raspberry Pi Picoにピンヘッダをはんだ付けします.
はんだ付けを行わずにブレッドボードでPicoを接続する事例もあったのですが,私の環境では接触不良に起因すると思われるエラー (後述) が発生したので,可能であればはんだ付けするのが良いと思います.
ちなみに,はんだ付けは個人的にこちらの動画が参考になりました.
配線
Try Kernel搭載用Picoにシールドを装着し,公式ドキュメントGetting startedのAppendix A: Using Picoprobe/Picoprobe Wiringに従って以下のように配線します.
(A: Picoprobe搭載Pico,B: デバッグ対象のPico) Pico A GND -> Pico B GND Pico A GP2 -> Pico B SWCLK Pico A GP3 -> Pico B SWDIO Pico A GP4/UART1 TX -> Pico B GP1/UART0 RX Pico A GP5/UART1 RX -> Pico B GP0/UART0 TX
開発環境の構築 (ホストOS)
本節では,基本的に前述のGetting startedを踏襲しつつ,ホストOS上に直接環境構築する手順を説明します.
ビルド/デバッグ環境の構築
事前準備
以降の手順を進める前に,以下の操作を行います. (参考)
$ sudo apt update $ sudo apt install binutils-multiarch gdb-multiarch $ cd /usr/bin $ ln -s /usr/bin/objdump objdump-multiarch $ ln -s /usr/bin/nm nm-multiarch
OpenOCDのビルド/インストール
Getting startedのAppendix A: Using Picoprobeに従い,OpenOCDをビルドしてUbuntuにインストールします.
$ cd ~/ $ mkdir pico $ cd ~/pico $ sudo apt install automake autoconf build-essential texinfo libtool libftdi-dev libusb-1.0-0-dev pkg-config $ git clone https://github.com/raspberrypi/openocd.git --branch rp2040 --depth=1 $ cd openocd $ ./bootstrap $ ./configure $ make -j4 $ sudo make install
SDKのダウンロード
PicotoolとPicoprobeをビルドするために,Getting startedのChapter 2. The SDKに基づいてSDKをダウンロードします.
$ cd ~/pico $ git clone https://github.com/raspberrypi/pico-sdk.git --branch master $ cd pico-sdk $ git submodule update --init $ cd .. $ git clone https://github.com/raspberrypi/pico-examples.git --branch master
Toolchainのインストール
Raspberry Pi Pico (Arm) へのクロスコンパイルを行うための,ツール群をインストールします.
$ sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential
Picotoolのビルド
後述のPicoprobeをRaspberry Pi Picoへインストールするために,Getting startedのAppendix B: Using Picotoolに基づいてPicotoolをビルドします.
$ cd ~/pico $ git clone https://github.com/raspberrypi/picotool.git --branch master $ cd picotool $ mkdir build $ cd build $ export PICO_SDK_PATH=~/pico/pico-sdk $ cmake ../ $ make
Picoprobeのビルド/インストール
Getting startedのAppendix A: Using Picoprobeに基づき,Picoprobeをビルドします.
$ cd ~/pico $ git clone https://github.com/raspberrypi/picoprobe.git $ cd picoprobe $ git submodule update --init $ mkdir build $ cd build $ export PICO_SDK_PATH=../../pico-sdk $ cmake .. $ make -j4
ビルドして得られたpicoprobe.uf2
を,以下の手順でRaspberry Pi Picoへロードします.
- Raspberry Pi PicoをPCとBOOTSEL modeで接続する.
- Raspberry Pi PicoのBOOTSELボタンを押しながらPCとUSBで接続すると,BOOTSEL modeで接続できます.
- 以下のコマンドを実行する.
$ cd ~/pico/picotool/build/ $ sudo picotool load ~/pico/picoprobe/build/picoprobe.uf2 $ sudo picotool reboot
デバイスファイルの権限変更
一般ユーザがVSCodeでデバッグを行えるよう,以下のようにデバイスファイルの権限を変更します.
sudo chmod -R 777 /dev/bus/usb/
VSCodeの設定/動作確認
Getting startedのChapter 7. Using Visual Studio Codeを参考に,VSCodeの設定を行います.
なお,本記事ではVSCodeが既にUbuntuへインストールされている前提で説明します.
拡張機能のインストール
以下の拡張機能をインストールします.
動作確認用Try Kernelのclone
開発環境の動作確認用として,既製のTry Kernelをcloneしておきます.
cd (適当なディレクトリ) git clone -b build_cmake https://github.com/ytoyoyama/trykernel.git
デバッグ用の設定
VSCodeでのデバッグに必要となるsettings.jsonとlaunch.jsonを,pico-examplesから流用します.
cd ./trykernel cp ~/pico/pico-examples/.vscode/* ./.vscode/
また,settings.jsonおよびlaunch.jsonにそれぞれ以下の設定を追記します.
- settings.json
"cmake.environment": { "PICO_SDK_PATH": "~/pico/pico-sdk/" }
- launch.json
"openOCDLaunchCommands": [ "adapter speed 5000" ]
動作確認
周辺機器の取り付け
誌面を参考に,以下のように周辺機器を取り付けます.
なお,USBによる給電がPicoprobe用のPicoでのみ行われている場合,Try Kernel実行用Picoに接続されている周辺機器に給電がされないようです.
そのため,Picoprobe用,Try Kernel実行用両方のPicoでUSB給電を行ってください.
デバッグ/実行
VSCodeでディレクトリtrykernel
を開き,左のバーから「実行とデバッグ」タブを選択します.
この際,kitの選択が求められた場合はarm-none-eabiを指定してください.
その後,左上の「デバッグの開始ボタン (緑色のアイコン) 」をクリックし,main関数でbreakされればデバッグに成功です.
デバッグを続行した結果,液晶モジュールに文字列「Try Kernel」が出力されれば,周辺機器も正常に動作しています. (ジェスチャーモジュールに手を振りかざすと,液晶モジュールの出力が変化するのを確認できます.)
なお,OpenOCDからunable to find a matching CMSIS-DAP device
というエラーが出力された場合,原因として以下が考えられます.
配線の接触不良について,私の場合は,Picoにはんだ無しでピンヘッダを差してた状態から,はんだ付けを行うことによって解決しました.
アクセス権限不足が原因である場合は,デバイスファイルの権限変更 (前述) を行ってください.
Devcontainerを用いた環境構築の半自動化
本節ではDevcontainerを用いて,環境構築をコンテナ上に,かつ半自動的に行う手順を説明します.
環境構築には本記事が提供するリポジトリを使用します.
ハードウェア周りは本記事の前半を参照してください.
リポジトリのclone
git clone https://github.com/satumaimo10/trykernel_devenv.git
Devcontainerの起動
cloneしたリポジトリをVSCodeで開き,右下に現れるポップアップの「コンテナーで再度開く」をクリック,もしくはコマンドパレット (Ctrl-Shift-P) にDev Containers: Open Folder In Container
と入力してDevcontainerを起動します.
Picoprobeの書き込み
PicoをBOOTSEL modeでコンテナの動作するホストマシンに接続し,VSCode上のターミナルで/tools/load_picoprobe.sh
を実行します.
動作確認
ホストOSで環境構築した場合と同様に,既製のTry Kernelを使用して動作確認を行います.
ホストOSの場合と同様のハードウェア構成 (「周辺機器の取り付け」節を参照) にしたのち,以下を実行します.
$ cd /workspace/ $ git clone -b build_cmake https://github.com/ytoyoyama/trykernel.git $ cp trykernel/* ./
その後,VSCodeのウィンドウを再読み込みし,kitにarm-none-eabiを指定すれば準備完了です.
ホストOSの場合と同様の手順で,デバッグ機能,およびTry Kernelの正常な動作を確認できます.
おわりに
本記事では,Linux+VSCode+Docker (Devcontainer) を使用したTry Kernelの開発環境構築手順について説明しました.
Try Kernel環境構築の一助になれば幸いです.