👨‍💻

SparkFun Pro Micro - RP2350のRisc-Vで苦労してLinux-nommuを起動した話

2024/12/16に公開

はじめに

2024年8月にRaspberry財団からRP2350とRaspberry Pi Pico 2の情報が公開されました。

https://www.raspberrypi.com/news/raspberry-pi-pico-2-our-new-5-microcontroller-board-on-sale-now/

その後、RP2350搭載のボードが販売され、2024年9月に、SparkFun製「SparkFun Pro Micro - RP2350」で Risc-v用Linux-nommuを動かすgithubレポジトリが公開されました。

https://www.sparkfun.com/products/24870

https://github.com/Mr-Bossman/pi-pico2-linux

githubレポジトリのREADEME.mdを見ると簡単にできそうでしたが、私は、cmakeの使い方やpicotoolの使い方に慣れていなくて、動作確認まで結構時間がかかりました。
  ここでは、私のように、Pico-sdkを使う環境に慣れていない人を前提に説明します。
 本稿は、「東海道らぐ 2024年12月オフな集まり@メリーアヒルヤキ(m〇ikutterの作者は誰?)」の発表内容を含んでいます。

https://tokaidolug.connpass.com/event/338897/

環境設定

私は、x64用Ubuntu22.04(以降、母艦)の「/home/kazueda/rpipico2」で作業しています。各自の環境に合わせて読み替えて設定してください。
 ビルドに必要なpico-sdkをクローンし、riscv32のクロスコンパイラをインストールします。

$ cd rpipico2
$ sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential
$ cd pico-sdk
$ git submodule update --init
$ cd ..
$ wget https://buildbot.embecosm.com/job/corev-gcc-ubuntu2204/47/artifact/corev-openhw-gcc-ubuntu2204-20240530.tar.gz
$ tar xvf corev-openhw-gcc-ubuntu2204-20240530.tar.gz
$ cd ..

パスを通します。

$ export PICO_RISCV_TOOLCHAIN_PATH=/home/kazueda/rpipico2/corev-openhw-gcc-ubuntu2204-20240530
$ export PICO_SDK_PATH=/home/kazueda/rpipico2/pico-sdk

Linux-nommuのビルド

Linux-nommuのソースファイルのgithubリポジトリをクローンし、ビルドします。

$ git clone https://github.com/Mr-Bossman/pi-pico2-linux
$ cd pi-pico2-linux
$ git submodule update --init
$ cd buildroot
$ make BR2_EXTERNAL=$PWD/../ raspberrypi-pico2_defconfig
$ make -j 16

ビルドしたイメージの書き込み

「SparkFun Pro Micro - RP2350」のBOOTボタンを押したまま、USBケーブルで母艦に接続します。
 その後、次の操作を行ってみると、

$ cd ../psram-bootloader
$ make flash-kernel

以下のエラーメッセージが表示されます。

kazueda@kazueda-U700:~/rpipico2/pi-pico2-linux/psram-bootloader$ make flash-kernel
cd build && cmake ..
CMake Error at pico_sdk_import.cmake:74 (message):
  Directory '/home/kazueda/home/kazueda/rpipico2/pico-sdk' not found
Call Stack (most recent call first):
  CMakeLists.txt:33 (include)


-- Configuring incomplete, errors occurred!
See also "/home/kazueda/rpipico2/pi-pico2-linux/psram-bootloader/build/CMakeFiles/CMakeOutput.log".
make: *** [Makefile:10: build/Makefile] Error 1

CMakeLists.txtの修正方法がわからなかったので、力技で解決しました。

$ cd ~/rpipico2
$ mkdir /home/kazueda/home/kazueda
$ cp -r /home/kazueda/rpipico2  /home/kazueda/home/kazueda

picotoolのgitレポジトリのクローンとコンパイルを行います。

$ git clone https://github.com/raspberrypi/picotool
$ sudo apt install build-essential pkg-config libusb-1.0-0-dev cmake
$ cd picotool
$ mkdir build
$ cd build
$ cmake ..
$ make

/home/kazueda/rpipico2/picotool/build/picotool
があるのを確認します。
 picotoolを使ったボードへの書き込みは、root権限で行いました。

$ sudo su -
# cd /home/kazueda/rpipico2/pi-pico2-linux/psram-bootloader
# export PATH=$PATH:/home/kazueda/rpipico2/picotool/build
# export PICO_SDK_PATH=/home/kazueda/rpipico2/pico-sdk
# make flash-kernel

無事書き込めたようです。

Linux-nommuの起動

USBシリアルアダプタのTX、RX、GNDを、ボードのRX、TX、GNDと接続します。
 電源についてですが、USBシリアルアダプタのVCCから給電するか、ボードのUSB端子から給電する場合は、USB電源から給電します。
 母艦のUSBポートから給電すると、起動の途中で止まります。

 USB電源から給電すると、プロンプトが表示されます。

 色々見て回ります。


おわりに

ビルド環境だけでなく、動作環境でもはまりどころ満載でした。
 ビルド環境はもう少し修正が必要ですが、8 MBのPSRAMを搭載した他のボードでLinux-nommuを動作させてみようと思います。
 Raspberry pi pico2のPSRAMは4 MBなので、buildrootで機能を削って4 MBに収まるイメージを作成するか、8 MBのPSARMを外付けすると動作するかもしれません。

Discussion