NuttX を WSL 上でコンパイルし Raspberry Pi Pico にインストールする


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
[email protected] (ML) - RE: Raspberry Pi Pico Not Responing
NuttX for Raspberry Pi PicoのUSBデバイスサポート
【NuttX】ラズパイPicoにOSをインストールしてみた!