はじめに
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_BUILTIN
とCONFIG_NSH_BUILTIN_APPS
を一緒に有効化する必要があることがわからず、
しばらくハマった。
以前使用した時のターゲットであるSTM32F4Discovery向けの設定では、デフォルトでここらへんが有効になっていたので気づかなかった。
Linux経験者がこの手のボードで何か作りたい場合は、NuttXは使いやすいと思う。
使用したターゲットはSTM32F4Discoveryだけど、以前にこんなのも書いたので、NuttXに興味が出た方は是非!!(宣伝が露骨)