SparkFun Pro Micro - RP2350のRisc-Vで苦労してLinux-nommuを起動した話
はじめに
2024年8月にRaspberry財団からRP2350とRaspberry Pi Pico 2の情報が公開されました。
その後、RP2350搭載のボードが販売され、2024年9月に、SparkFun製「SparkFun Pro Micro - RP2350」で Risc-v用Linux-nommuを動かすgithubレポジトリが公開されました。
githubレポジトリのREADEME.mdを見ると簡単にできそうでしたが、私は、cmakeの使い方やpicotoolの使い方に慣れていなくて、動作確認まで結構時間がかかりました。
ここでは、私のように、Pico-sdkを使う環境に慣れていない人を前提に説明します。
本稿は、「東海道らぐ 2024年12月オフな集まり@メリーアヒルヤキ(m〇ikutterの作者は誰?)」の発表内容を含んでいます。
環境設定
私は、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