みつきんのメモ

組み込みエンジニアです。Interface誌で「My オリジナルLinuxの作り方」連載中

NuttXをnRF52840-DKで動かす

はじめに

NuttXがnRF52840-DKに対応したっぽいので動かしてみる。

ARMのツールチェインの設定方法についてはここを参照。

J-Linkツールの設定方法についてはここを参照。

NuttXの作成

ソースの取得

$ git clone https://bitbucket.org/nuttx/nuttx.git
$ git clone https://bitbucket.org/nuttx/apps.git

コンフィグレーション

USB経由でシェルを使用する場合は次のようにする。

$ cd nuttx
$ tools/configure.sh -l nrf52840-dk:nsh

ビルド

次のコマンドでビルドする。

$ make -j $(nproc)

書き込み

upload.jlink

nuttxディレクトリ直下にupload.jlinkを次の内容で作成する。

h
loadbin nuttx.bin,0x0
r
q

書き込み

$ JLinkExe -device nRF52840_xxAA -speed 4000 -if swd -autoconnect 1 -CommanderScript upload.jlink 

実行

nRF52840-DKはボードとPCをUSBケーブルで接続すると、Linux上でシリアルコンソールが/dev/ttyACM0として見えるようになる。 これをminicomなどで開くことでnshというシェルが使用できる。

$ minicom -D /dev/ttyACM0
NuttShell (NSH) NuttX-8.2
nsh>

helpコマンドを実行すると、実行可能なコマンドを表示することができる。

nsh> help
help usage:  help [-v] [<cmd>]

  [         cd        echo      hexdump   mkfatfs   mw        sh        uname
  ?         cp        exec      kill      mkrd      pwd       sleep     umount
  basename  cmp       exit      ls        mh        rm        test      unset
  break     dirname   false     mb        mount     rmdir     time      usleep
  cat       dd        help      mkdir     mv        set       true      xd
nsh>

Hello worldサンプルの有効化

nRF52840-DKのNuttXのコンフィグレーションは最低限の設定しか有効化されていないので、 Hello worldのサンプルを有効化してみる。

コンフィグレーションを変更するには下記のコマンドを実行し、メニュー画面でコンフィグレーションを設定する。

$ make menuconfig

Hello worldのサンプルを有効化するには下記のコンフィグレーションを有効化する必要がある。

  • CONFIG_BUILTIN
  • CONFIG_EXAMPLES_HELLO
  • CONFIG_NSH_BUILTIN_APPS

メニュー画面で「/」を押すことでコンフィグレーション項目を検索することができる。 また、検索結果の左側にある「(1)」のような番号の数字を入力すると、そのメニューへジャンプできる。

コンフィグレーションを変更したら、リビルドしてイメージを書き込んで再度nshを開く。

nsh> help
help usage:  help [-v] [<cmd>]

  [         cd        echo      hexdump   mkfatfs   mw        sh        uname
  ?         cp        exec      kill      mkrd      pwd       sleep     umount
  basename  cmp       exit      ls        mh        rm        test      unset
  break     dirname   false     mb        mount     rmdir     time      usleep
  cat       dd        help      mkdir     mv        set       true      xd

Builtin Apps:
  hello  nsh

helpコマンドの結果にBuiltin Apps:としてhelloが追加されていればOK。

nsh> hello
Hello, World!!

世界に向かってご挨拶。

まとめ

しばらく見なかった間にtools/configure/shのコンフィグ指定が変わっていた。(nrf52840-dk/nsh -> nrf52840-dk:nshなど)

NuttXのビルド自体は問題なくできたが、ビルトインアプリケーションとしてHello worldのサンプルをイメージに組み込む際、CONFIG_BUILTINCONFIG_NSH_BUILTIN_APPSを一緒に有効化する必要があることがわからず、 しばらくハマった。

以前使用した時のターゲットであるSTM32F4Discovery向けの設定では、デフォルトでここらへんが有効になっていたので気づかなかった。

Linux経験者がこの手のボードで何か作りたい場合は、NuttXは使いやすいと思う。

使用したターゲットはSTM32F4Discoveryだけど、以前にこんなのも書いたので、NuttXに興味が出た方は是非!!(宣伝が露骨)