ラベル RTOS の投稿を表示しています。 すべての投稿を表示
ラベル RTOS の投稿を表示しています。 すべての投稿を表示

2019年5月12日日曜日

NuttX の評価(1)

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) から初めてみたく思います.

GNU Emacs for Windows における最近の IMEパッチ問題

自分は GNU Emacs 使いなのですが、Windows版の Emacs を使用する場合、IMEパッチの問題がありました。 ざっくり言うと、FSFの正規のリリースバイナリだと日本語変換のIMEに切り替えた時、インラインで候補文字が表示されないという問題です。そのために有志の方々...