Ubuntu Weekly Recipe

第684回 UbuntuからRaspberry Pi Picoを使う

この記事を読むのに必要な時間:およそ 7.5 分

SDKのインストールのサンプルのビルド

これだけだと味気ないので,開発環境を用意して,自分でサンプルコードをビルドしてみましょう。これに関してはRaspberry Pi PicoのGetting started with Raspberry Pi PicoというPDFドキュメントにより詳細な手順が記載されています。

最初にビルドに必要なパッケージ一式をインストールしておきます。今回はUbuntu 20.04 LTSで確認しましたが,サポートされているUbuntuならどのリリースでも同じはずです。

$ sudo apt install gcc cmake gcc-arm-none-eabi \
  libnewlib-arm-none-eabi build-essential

Picoのドキュメントだと「libstdc++-arm-none-eabi-newlib」を手作業でインストールするようにとの指示がありますが,Ubuntu 20.04 LTSだとlibnewlib-arm-none-eabiパッケージのRecommendsに指定されているため,Ubuntu側の設定を変えていなければ一緒にインストールされるはずです。

次のpico-sdkとpico-examplesのコードをそれぞれcloneします。場所はどこでもかまいません。また,submoduleも更新しておきます。

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

pico-sdkはPico用のファームウェアを構築する際に必要なコード一式とそれをビルドするためのcmakeファイルから成り立っています。よっていわゆる「SDKをビルドする」必要はありません。基本的に,ファームウェア本体をビルドするときに参照されて,一緒にビルドされるだけです。

言い換えるとファームウェアのビルド時にpico-sdkのパスを参照できるようにしておかなくてはなりません。一番手っ取り早いのは環境変数PICO_SDK_PATHを指定しておくことです。pico-sdkのclone先を固定化できるのであれば,~/.bashrcに書いておくのもひとつの手でしょう。

$ export PICO_SDK_PATH=$PWD/pico-sdk
$ ls -1 $PICO_SDK_PATH
CMakeLists.txt
LICENSE.TXT
README.md
cmake
docs
external
lib
pico_sdk_init.cmake
pico_sdk_version.cmake
src
test
tools

次にPico用ファームウェアのサンプルコードをビルドします。サンプルページのREADME.mdにもあるように,このリポジトリには大量のサンプルコードが用意されています。よってPicoでできる基本的なことは,まずはここのリポジトリを参考にすると良いでしょう。

先ほど利用したblink.uf2を自前でビルドしてみます。

$ cd pico-examples
$ mkdir build
$ cd build
$ cmake ..
Using PICO_SDK_PATH from environment ('/home/ubuntu/pico-sdk')
PICO_SDK_PATH is /home/ubuntu/pico-sdk
Defaulting PICO_PLATFORM to rp2040 since not specified.
Defaulting PICO platform compiler to pico_arm_gcc since not specified.
-- Defaulting build type to 'Release' since not specified.
PICO compiler is pico_arm_gcc
-- The C compiler identification is GNU 9.2.1
-- The CXX compiler identification is GNU 9.2.1
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/arm-none-eabi-gcc
Defaulting PICO target board to pico since not specified.
Using board configuration from /home/ubuntu/pico-sdk/src/boards/include/boards/pico.h
-- Found Python3: /usr/bin/python3.8 (found version "3.8.10") found components: Interpreter
TinyUSB available at /home/ubuntu/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040; adding USB support.
-- Configuring done
-- Generating done
-- Build files have been written to: /home/ubuntu/pico-examples/build

$ cd blink
$ make -j $(nproc)
Scanning dependencies of target ELF2UF2Build
Scanning dependencies of target bs2_default
[  0%] Creating directories for 'ELF2UF2Build'
[  0%] Building ASM object pico-sdk/src/rp2_common/boot_stage2/CMakeFiles/bs2_default.dir/compile_time_choice.S.obj
[  0%] Linking ASM executable bs2_default.elf
(中略)
[100%] Linking CXX executable blink.elf
[100%] Built target blink

上記手順通り実施すれば現在のディレクトリpico-examples/build/blink「blink.uf2」が残っているはずです。これをマスストレージ経由で書き込んでみましょう。もしすでにPicoをPCに繋いでいるなら,一旦USBケーブルを取り外してください。Pico上にあるBOOTSELボタンを押しながらUSBケーブルを接続します。そうすればUSBマスストレージデバイスとして認識されるはずなので,そのトップディレクトリにblink.uf2をコピーします。コピーが終わったら自動的に再起動して,LEDが点滅するはずです。

ちなみにpico-sdkでそのまま作ったUF2ファイルなら,新しいファームウェアを書き込むと上書きされ,過去に書いたファームウェアは消えてしまいます。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。