NuttX を WSL 上でコンパイルし Raspberry Pi Pico へインストールします。NuttX へは USB シリアル経由で Windows からアクセスできます。主には NuttX 本家の Getting Started を参照しています。また、Pico SDK をインストールする必要がありますがバージョンは 1.1.2 である必要があります。(参照)
WSL で Ubuntu をインストール
WSL への Ubuntu インストール方法は割愛します。他の Web の情報を参照してください。ここでは、Ubuntu 20.04 を前提としています。インストール後はパッケージを最新のものにアップデートしてください。
$ sudo apt update && sudo apt full-upgrade -y && sudo apt autoremove --purge -y
必要なソフトウェアのインストール
ここ の手順に従い必要なソフトウェアのインストールを行います。比較的容量が大きいため時間がかかるかもしれません。
$ sudo apt install bison flex gettext texinfo libncurses5-dev libncursesw5-dev gperf automake libtool pkg-config build-essential gperf genromfs libgmp-dev libmpc-dev libmpfr-dev libisl-dev binutils-dev libelf-dev libexpat-dev gcc-multilib g++-multilib picocom u-boot-tools util-linux -y
# sudo apt install kconfig-frontends -y
# sduo apt install gcc-arm-none-eabi binutils-arm-none-eabi -y
Raspberry Pi Pico SDK のインストール
NuttX はブートローダーに Raspberry Pi Pico SDK を使用しています。ここ に説明がありますが、現時点では NuttX は最新の Raspberry Pi Pico SDK (e.g. 1.3.0) には対応していないため 1.1.2 をインストールする必要があります。
Raspberry Pi Pico SDK のインストールは以下のように行います。環境変数 PICO_SDK_PATH で pico-sdk の場所を指定する必要があります。
$ mkdir ~/pico
$ cd ~/pico
$ git clone -b1.1.2 https://github.com/raspberrypi/pico-sdk.git
$ export PICO_SDK_PATH=$HOME/pico/pico-sdk
$ echo "export PICO_SDK_PATH=$HOME/pico/pico-sdk" >> .bashrc
NuttX のダウンロード
NuttX をダウンロードします。現行の NuttX では Raspberry Pi Pico へのシリアル USB 経由での接続をサポートしているようです。
$ mkdir ~/nuttx
$ cd ~/nuttx
$ git clone https://github.com/apache/incubator-nuttx.git nuttx
$ git clone https://github.com/apache/incubator-nuttx-apps apps
$ cd nuttx
$ ./tools/configure.sh -L | grep pico
raspberrypi-pico:lcd1602
raspberrypi-pico:composite
raspberrypi-pico:displaypack
raspberrypi-pico:smp
raspberrypi-pico:st7735
raspberrypi-pico:usbmsc
raspberrypi-pico:nshsram
raspberrypi-pico:usbnsh
raspberrypi-pico:enc28j60
raspberrypi-pico:waveshare-lcd-1.14
raspberrypi-pico:audiopack
raspberrypi-pico:spisd
raspberrypi-pico:ssd1306
raspberrypi-pico:nsh
raspberrypi-pico:waveshare-lcd-1.3
NuttX のコンパイル
NuttX のコンパイルは次のように行います。恐らくは数分でコンパイルが終わると思います。コンパイルが成功すると最後に nuttx.uf2 と言う名前の Raspberry Pi Pico 用の UF2 ファイルが作成されます。
$ ./tools/configure.sh -l raspberrypi-pico:usbnsh
$ make
<snip>
tools/rp2040/elf2uf2 nuttx nuttx.uf2;
Done.
uf2 ファイルを Raspberry Pi Pico へコピー
Windows から WSL 上のファイルにアクセスするにはエクスプローラーからまず \wsl$ へアクセスします。さらに Ubuntu > home > [ユーザー名] > nuttx > nuttx 辿っていくと上記のステップで作成された nuttx.uf2 が見つかります。
Raspberry Pi Pico を BOOTSEL ボタンを押しながらパソコンと USB 接続を行います。Raspberry Pi Pico がディスクとして認識されるのでこのディスクに nuttx.uf2 をコピーします。
Windows から NuttX (Raspberry Pi Pico) にシリアル接続する
nuttx.uf2 をコピーすると Raspberry Pi Pico は自動的に再起動し COM8 などの USB シリアルデバイスとして認識します。このシリアルポートに Tera Term などを使用し接続し速度を 115200 と指定します。何度か Enter キーを押してみて以下のような出力が返ってくれば成功です。
NuttShell (NSH) NuttX-10.2.0
nsh>
上記出力がされない場合は何度か Tera Term などから接続し直して見たりしてください。
NuttX のコマンドを実行してみる
help と打つと使用できるコマンドの一覧が表示されます。例えば uname -a を実行すると NuttX のバージョンが表示されます。
nsh> help
help usage: help [-v] [<cmd>]
. cd df free mkrd reboot test unset
[ cp echo help mount rm time usleep
? cmp env hexdump mv rmdir true xd
basename dirname exec kill printf set truncate
break date exit ls ps sleep uname
cat dd false mkdir pwd source umount
Builtin Apps:
sh getprime ostest hello nsh
nsh> uname -a
NuttX 10.2.0 c96c96a399 Mar 13 2022 19:56:58 arm raspberrypi-pico
デフォルトでは最小限のコマンドのみ使用できます。
ここ などに説明がありますが ~/nuttx/nuttx で make menuconfig を実行すると表情に多くの設定項目が出てきます。git コマンドで clons した apps にあるアプリケーションもここから設定ができます。
例えば以下の様に VI Work-Alike Text Editor をチェックし新しく作成された nuttx.uf2 を Raspberry Pi Pico にコピーしてみます。尚、unzip が必要だったため make menuconfig の前にインストールしています。
$ apt get install unzip -y
$ cd ~/nuttx/nuttx
# make menuconfig
Application Configuration --->
System Libraries and NSH Add-Ons --->
VI Work-Alike Text Editor をチェックし Exit
上記を実行すると help で vi コマンドが表示されます。このままだとファイルの保存はできませんが vi コマンドを実行すると vi の一部操作ができるエディタが起動します。尚、このソースコードは $HOME/nuttx/apps/system/vi にあります。
nsh> help
<snip>
Builtin Apps:
vi sh getprime ostest hello nsh
make menuconfig にはネットワーク用の設定もあり Raspberry Pi Pico をネットワークに接続して遊んでみるのも面白いかもです。
参照
NuttX Getting Started
dev@nuttx.apache.org (ML) - RE: Raspberry Pi Pico Not Responing
NuttX for Raspberry Pi PicoのUSBデバイスサポート
【NuttX】ラズパイPicoにOSをインストールしてみた!