NuttX とは
NuttX とは Posix インタフェースをサポートしたフリーの RTOS (RealTime OS) です.
組込向けの Posix インタフェースに準拠したOSとして Linux が使われることが多いですが,
よりコンパクトでシンプルなRTOSとしての挙動が必要な場合に使用されるとの印象です.
今回,Pthread 対応で作成されたミドルウェアを RTOS 上での動作として確認したい事案があり,
何かしらフリーかつPosixインタフェース仕様の RTOS を探していて,NuttX に出会いました.
初めて扱うRTOSのため,どのような感じかを含め,ここに記録を残していこうかと思います.
NuttX の入手
Nuttx はその
オフィシャルサイト
で紹介されているリポジトリサイトから入手可能です.
サイトとしては SOURCEFORGE と bitbucket の2つがありますが,bitbucket から Git Repository の clone を作ることにしました.
webページに記載されている以下のコマンドを発行することで,ソースコードの入手が可能です:
$ git clone https://bitbucket.org/nuttx/nuttx.git nuttx
Cloning into 'nuttx'...
remote: Counting objects: 405581, done.
remote: Compressing objects: 100% (17927/17927), done.
remote: Total 405581 (delta 13936), reused 0 (delta 0)
Receiving objects: 100% (405581/405581), 96.67 MiB | 6.37 MiB/s, done.
Resolving deltas: 100% (317842/317842), done.
Checking out files: 100% (11222/11222), done.
ダウンロードした内容は以下のようになっています:
$ ls -al ./nuttx/
合計 2812
drwxr-xr-x 21 myname myname 4096 5月 12 15:03 .
drwxr-xr-x 3 myname myname 4096 5月 12 15:02 ..
drwxr-xr-x 8 myname myname 4096 5月 12 15:03 .git
-rw-r--r-- 1 myname myname 258 5月 12 15:03 .gitignore
-rw-r--r-- 1 myname myname 11658 5月 12 15:03 COPYING
-rw-r--r-- 1 myname myname 1397501 5月 12 15:03 ChangeLog
drwxr-xr-x 2 myname myname 4096 5月 12 15:03 Documentation
-rw-r--r-- 1 myname myname 40418 5月 12 15:03 Kconfig
-rw-r--r-- 1 myname myname 2099 5月 12 15:03 Makefile
-rw-r--r-- 1 myname myname 82846 5月 12 15:03 README.txt
-rw-r--r-- 1 myname myname 1095746 5月 12 15:03 ReleaseNotes
-rw-r--r-- 1 myname myname 147195 5月 12 15:03 TODO
drwxr-xr-x 15 myname myname 4096 5月 12 15:03 arch
drwxr-xr-x 2 myname myname 4096 5月 12 15:03 audio
drwxr-xr-x 6 myname myname 4096 5月 12 15:03 binfmt
drwxr-xr-x 173 myname myname 4096 5月 12 15:03 configs
drwxr-xr-x 2 myname myname 4096 5月 12 15:03 crypto
drwxr-xr-x 35 myname myname 4096 5月 12 15:03 drivers
drwxr-xr-x 27 myname myname 4096 5月 12 15:03 fs
drwxr-xr-x 7 myname myname 4096 5月 12 15:03 graphics
drwxr-xr-x 9 myname myname 4096 5月 12 15:03 include
drwxr-xr-x 6 myname myname 4096 5月 12 15:03 libs
drwxr-xr-x 11 myname myname 4096 5月 12 15:03 mm
drwxr-xr-x 26 myname myname 4096 5月 12 15:03 net
drwxr-xr-x 2 myname myname 4096 5月 12 15:03 pass1
drwxr-xr-x 19 myname myname 4096 5月 12 15:03 sched
drwxr-xr-x 4 myname myname 4096 5月 12 15:03 syscall
drwxr-xr-x 3 myname myname 4096 5月 12 15:03 tools
drwxr-xr-x 5 myname myname 4096 5月 12 15:03 wireless
上記でダウンロードした README.txt を見てみると,以下が書かれていました:
INSTALLATION
^^^^^^^^^^^^
There are two ways to get NuttX: You may download released, stable
tarballs from either the Bitbucket or Sourceforge download locations.
Or you may get NuttX by cloning the Bitbucket GIT repositories. Let's
consider the released tarballs first:
コメントに従って tarball をダウンロードする所から始めます...
NuttX の tarball の入手
README.txtに記載されている bitbucket からのファイルダウンロードページ
から tar.gz を入手します.
最新のファイル名が nuttx-7.29.tar.gz なので,この記事作成時点での stable 版の最新バージョンは
7.29
ということでしょうか.
展開した tar.gz を展開すると以下のフォルダが作成されました:
$ ls -al ./nuttx-7.29
合計 2812
drwxr-x--- 20 myname myname 4096 3月 25 23:08 .
drwxr-xr-x 4 myname myname 4096 5月 12 15:31 ..
-rwxr-xr-x 1 myname myname 153 3月 25 23:08 .version
-rwxr----- 1 myname myname 11658 3月 25 23:02 COPYING
-rwxr----- 1 myname myname 1397501 3月 25 23:02 ChangeLog
drwxr-x--- 2 myname myname 4096 3月 25 23:07 Documentation
-rwxr----- 1 myname myname 40418 3月 25 23:02 Kconfig
-rwxr----- 1 myname myname 2099 3月 25 23:02 Makefile
-rwxr----- 1 myname myname 82804 3月 25 23:02 README.txt
-rwxr----- 1 myname myname 1095746 3月 25 23:02 ReleaseNotes
-rwxr----- 1 myname myname 147542 3月 25 23:02 TODO
drwxr-x--- 15 myname myname 4096 3月 25 23:03 arch
drwxr-x--- 2 myname myname 4096 3月 25 23:07 audio
drwxr-x--- 6 myname myname 4096 3月 25 23:07 binfmt
drwxr-x--- 172 myname myname 4096 3月 25 23:07 configs
drwxr-x--- 2 myname myname 4096 3月 25 23:03 crypto
drwxr-x--- 35 myname myname 4096 3月 25 23:07 drivers
drwxr-x--- 27 myname myname 4096 3月 25 23:07 fs
drwxr-x--- 7 myname myname 4096 3月 25 23:07 graphics
drwxr-x--- 9 myname myname 4096 3月 25 23:07 include
drwxr-x--- 6 myname myname 4096 3月 25 23:03 libs
drwxr-x--- 11 myname myname 4096 3月 25 23:07 mm
drwxr-x--- 26 myname myname 4096 3月 25 23:07 net
drwxr-x--- 2 myname myname 4096 3月 25 23:07 pass1
drwxr-x--- 19 myname myname 4096 3月 25 23:07 sched
drwxr-x--- 4 myname myname 4096 3月 25 23:07 syscall
drwxr-x--- 3 myname myname 4096 3月 25 23:07 tools
drwxr-x--- 5 myname myname 4096 3月 25 23:07 wireless
また README.txt を見てみると app も必要そうなので,同じくダウンロードページから
app-7.29.tar.gz もダウンロードします.
appも展開して README.txt 記載のフォルダ構成にシンボリックリンクを作ると
以下のような感じになります:
$ ls -al
合計 23860
drwxr-xr-x 4 myname myname 4096 5月 12 15:51 .
drwxr-xr-x 39 myname myname 4096 5月 12 14:59 ..
lrwxrwxrwx 1 myname myname 9 5月 12 15:51 apps -> apps-7.29
drwxr-x--- 19 myname myname 4096 5月 12 15:50 apps-7.29
-rw-rw-r-- 1 myname myname 3529151 5月 12 15:48 apps-7.29.tar.gz
lrwxrwxrwx 1 myname myname 10 5月 12 15:51 nuttx -> nuttx-7.29
drwxr-x--- 20 myname myname 4096 3月 25 23:08 nuttx-7.29
-rw-rw-r-- 1 myname myname 20885489 5月 12 15:29 nuttx-7.29.tar.gz
事前に準備されているコンフィグレーション
事前に準備されているコンフィグレーションは NuttX フォルダの configs の下にあります.
ls で表示させてみると,以下の通りです:
$ ls -a ./nuttx/configs/
. maple sam3u-ek
.. max32660-evsys sam4cmp-db
Board.mk mbed sam4e-ek
Kconfig mcb1700 sam4l-xplained
Makefile mcu123-lpc214x sam4s-xplained
README.txt metro-m4 sam4s-xplained-pro
amber micropendous3 sama5d2-xult
arduino-due mikroe-stm32f4 sama5d3-xplained
arduino-mega2560 mirtoo sama5d3x-ek
avr32dev1 misoc sama5d4-ek
b-l072z-lrwan1 moteino-mega samd20-xplained
b-l475e-iot01a moxa samd21-xplained
bambino-200e ne64badge same70-xplained
beaglebone-black nr5m100-nexys4 saml21-xplained
boardctl.c nrf52-generic samv71-xult
c5471evm ntosd-dm320 shenzhou
clicker2-stm32 nucleo-144 sim
cloudctrl nucleo-f072rb skp16c26
demo9s12ne64 nucleo-f091rc stm3210e-eval
dk-tm4c129x nucleo-f103rb stm3220g-eval
dummy nucleo-f207zg stm3240g-eval
ea3131 nucleo-f302r8 stm32_tiny
ea3152 nucleo-f303re stm32butterfly2
eagle100 nucleo-f303ze stm32f051-discovery
efm32-g8xx-stk nucleo-f334r8 stm32f072-discovery
efm32gg-stk3700 nucleo-f410rb stm32f103-minimum
ekk-lm3s9b96 nucleo-f446re stm32f334-disco
esp32-core nucleo-f4x1re stm32f3discovery
ez80f910200kitg nucleo-h743zi stm32f411e-disco
ez80f910200zco nucleo-l073rz stm32f429i-disco
fire-stm32v2 nucleo-l152re stm32f4discovery
flipnclick-pic32mz nucleo-l432kc stm32f746-ws
flipnclick-sam3x nucleo-l452re stm32f746g-disco
freedom-k28f nucleo-l476rg stm32f769i-disco
freedom-k64f nucleo-l496zg stm32l476-mdk
freedom-k66f nutiny-nuc120 stm32l476vg-disco
freedom-kl25z olimex-efm32g880f128-stk stm32l4r9ai-disco
freedom-kl26z olimex-lpc-h3131 stm32ldiscovery
gapuino olimex-lpc1766stk stm32vldiscovery
hymini-stm32v olimex-lpc2378 sure-pic32mx
imxrt1050-evk olimex-stm32-e407 teensy-2.0
imxrt1060-evk olimex-stm32-h405 teensy-3.x
kwikstik-k40 olimex-stm32-h407 teensy-lc
launchxl-cc1310 olimex-stm32-p107 tm4c123g-launchpad
launchxl-cc1312r1 olimex-stm32-p207 tm4c1294-launchpad
launchxl-tms57004 olimex-stm32-p407 tms570ls31x-usb-kit
lc823450-xgevk olimex-strp711 twr-k60n512
lincoln60 olimexino-stm32 twr-k64f120m
lm3s6432-s2e omnibusf4 u-blox-c027
lm3s6965-ek open1788 ubw32
lm3s8962-ek or1k us7032evb1
lm4f120-launchpad p112 viewtool-stm32f107
lpc4330-xplorer pcduino-a10 xmc4500-relax
lpc4337-ws photon z16f2800100zcog
lpc4357-evb pic32mx-starterkit z80sim
lpc4370-link2 pic32mx7mmb z8encore000zco
lpcxpresso-lpc1115 pic32mz-starterkit z8f64200100kit
lpcxpresso-lpc1768 qemu-i486 zkit-arm-1769
とりあえず何かしら動作評価をしてみたいので,
QEMU の i486 版 (qemu-i486) から初めてみたく思います.