picoruby + R2P2をビルドする
この記事について
前回の記事でpico-sdkの使い方がちょっと分かったので今度はpicoruby+R2P2のビルドに挑戦。
環境と事前知識
今回もRaspberry Pi Pico WHを使う。ビルド環境はUbuntu-24.04 on WSL2 on Windows 11。
事前知識として、R2P2の公式リリースバイナリを使ってLチカくらいは試したことがあること。
ダウンロード
前回ど同様、ソースツリー一式は$HOME/pico
以下に置く。前回はpico-sdk, pico-examples, picotoolを使ったが、今回はpico-sdk, pico-extras, R2P2を使う。
$HOME/pico
+- pico-sdk/
+- pico-extras/
+- R2P2/
前回pico-sdkは最新の2.0.0を使ったが、R2P2は今のことろ1.5.1を使っているようなのでこれに合わせる。また前回使ったpicotoolは1.5.1では不要のようなので今回は使わない。R2P2は最新の0.2.1を使う。R2P2はsubmoduleとしてpicorubyを持っているので忘れずに設定する。まとめると以下のようになる。
$ cd $HOME/pico
$ git clone https://github.com/raspberrypi/pico-sdk.git
$ git -C pico-sdk checkout 1.5.1
$ git clone https://github.com/raspberrypi/pico-extras.git
$ git -C pico-extras checkout sdk-1.5.1
$ git clone https://github.com/picoruby/R2P2.git
$ git -C R2P2 checkout 0.2.1
$ git -C R2P2 submodule update --init --recursive
必須パッケージなど
あれこれ試行錯誤したのと前回pico-sdk, pico-examplesのためにすでに色々入っていたのでここに挙げたものが必要十分かは分からない。
R2P2のREADMEにはruby (CRuby), cmake, arm-none-eabi-gcc, arm-linux-gnueabihf-gcc, qemu-arm-staticが必要と書かれてあるが、Ubuntuでは以下を入れればビルドできた。
- ruby (CRuby): aptパッケージではなくrbenvで3.3.4を入れたが、aptでも多分大丈夫だろう。
- cmake
- gcc-arm-none-eabi
- gcc-arm-linux-gnueabihf
- zip: ないと途中のどこかでエラーになった気がする
qemu-arm-staticというパッケージはUbuntu-24.04にはない。似た名前としてはqemu-user-staticやqemu-system-armなどがあるが、入れずに試したところ動いたのでとりあえず無視。
あと前回記事でインストールした以下パッケージがもしかしたら必要かもしれないので、上記パッケージでビルドしてエラーになったらこれらも入れてみる。
- cmake
- gcc-arm-none-eabi
- libnewlib-arm-none-eabi
- libstdc++-arm-none-eabi-newlib
- pkg-config
- libusb-dev
コード変更
コードを書き換える必要はまったくないが、そうすると公式リリースバイナリと区別がつかないので、起動時のロゴにちょっとだけ手を加えてみる。変更したのはR2P2のlib/picoruby/mrbgems/picoruby-shell/mrblib/shell.rb
。
ビルド
R2P2のビルドはrakeで行うが、いくつか環境変数などの設定が必要なのでrun-rake.sh
というスクリプトを作って実行する。内部ではcmakeが呼ばれているようで、build
というディレクトリができるので、この中でmakeを実行する。R2P2のREADMEにPICO_EXTRAS_PATHが必要と書かれていたので設定しているが、なくてもビルドできたので本当に使われているのかは良くわからない。
#!/bin/bash
export PICO_SDK_PATH="$HOME/pico/pico-sdk"
export PICO_EXTRAS_PATH="$HOME/pico/pico-extras"
export BOARD="pico_w"
rake
$ cd $HOME/pico/R2P2
$ ./run-rake.sh
$ cd build
$ make -j6
buildディレクトリ以下に.uf2ファイル (R2P2_W-FLASH_MSC-0.2.1-20240818-5145384.uf2みたいなファイル)ができていれば成功。Raspberry Pi Pico WHにコピーしたら無事動いた。
Discussion