NuttX on STM32F4discovery

sorry. japanese only. これは何ですか? NuttXは,RTOS(real timed operating system)の一つです。 nuttx-6.25 興味深い変更点 in changelog-6.25: appsのビルトインアプリケーションライブラリがOSのツリーへ移動した(nuttx/binfmt/libbuiltin) ファイルディスクプリタコピーのdup,dup2が新たに使えるようになった(今まで使えなかったっけ?) ↑にあわせてnshにリダイレクト機能を追加。 exec系システムコール(exec, execv, execl, posix_spawn)が追加された(fork&execがやっとまともにできそう) Kconfigというコンフィグレーションツールのサポートを始めた(stm32discoveryのnshとusbnshがまず対応。 linuxのカーネルコンフィグレータみたいなもんかな。) やっとキャラクタ型LCDのドライバが追加された(HD44680U?HD44780のtypoか?see. up_lcd1602.c) STM32ではSPI-DMAがサポートされた。 nuttx-6.24 nuttx-6.24をstm32f4discoveryI/Oボード用にいじったアーカイブ(別途apps-6.24のアーカイブが必要です) ↑のオリジナルとのdiff ↑のビルドログ nuttx-6.24をI/Oベースボード用にいじってビルドできるようにしてみました。 設定や変更は殆ど↓のnuttx-6.22の時と同じです。(ビルドconfigは,config/stm32f4discovery/nsh) nuttx-6.23 興味深い変更点 in changelog-6.23: ELFバイナリをファイルシステムからLoad&Execできるようになったのが嬉しい。 たとえばCCMをユーザープレイグランドとして専用化して,そこへユーザアプリをLoad&Exec できるようになれば,いい感じだな。 nshにifup/ifdownが追加されたので,Ethernetインターフェイスの操作が捗る。 nuttx-6.22 nuttx-6.22のstm32f4discoveryI/Oボード用にいじったアーカイブ ↑のオリジナルとのdiff ↑のビルドログ nuttx-6.22をI/Oベースボード用にいじってビルドできるようにしてみました。 ↑のアーカイブでは,EthernetとSDIOとPWMを組込んであり,nshから実行確認できます。 コンソールはUSART3(RD8/PD9)です。 TCP/IPの初期設定は,IP=192.168.1.201 ,netmask=255.255.255.0です。 ifconfigコマンドで変更することができます。 MACアドレスは,固定でローカル用に適当なアドレスでdefconfigファイルで設定してます。 nshへのtelnetやpingなどで動作が確認できます。 nsh起動時にSDIOのSDカードが挿入されている必要があります。カードがないとnshが起動しません。 pwmは,圧電サウンダ出力向けにPB8/TIM10ch1出力に変更してあります。 ビルドconfigは,config/stm32f4discovery/nsh/ です。 その他設定詳細は,defconfigファイル等を参照してください。 up_ostest.cはstm3240g-evalのものを殆どそのままコピーして使っています。 ostestもnshに組込んでありますが,nuttxスケジューラ内でコケて固まります。 fpuテストの確認ができたので,それ以上は面倒なので放置です。 ↑のnsh実行ログ 過去のもの 気がついたら6.16がリリースされていたので,試しにビルドしてみました。 前の6.15の時はあちこちに手を入れないとビルドもできなかったり,PRIMASK設定した ままSVC発行してハードフォルトになったりと,不安定で放置してたんですが,6.16に なってコンフィグをいじるだけで,殆どそのままビルドできるようになりました。 このビルドでツールチェインは,CodeSourceryではなく,gcc-4.6.3を使った自前で構築 したものを試験的に使っています。 ビルドの様子 $ cd /tmp/work/nuttx-6.16/ $ ( cd tools && ./configure.sh stm32f4discovery/nsh ) $ . ./setenv.sh : $ ( make clean_context all ) > /tmp/nuttx_nsh_build.log 2>&1 $ ls -l nuttx* -rwxr-xr-x 1 cygwin なし 149336 3月 11 14:54 nuttx -rwxr-xr-x 1 cygwin なし 41664 3月 11 14:54 nuttx.bin -rw-r--r-- 1 cygwin なし 649100 3月 11 14:54 nuttx.lst $ arm-hardfloat-eabi-size nuttx text data bss dec hex filename 41501 160 2240 43901 ab7d nuttx $ シェルの実行 実機に書き込んでリセットするなりして実行します。USART2を115200bps8n1で接続する とそれをコンソールにしてシェル(nsh)が起動するので,以下のようにシェルが使える ようになります。 NuttShell (NSH) NuttX-6.16 nsh> ls /: dev/ nsh> ? NSH command forms: [nice [-d <niceness>>]] <cmd> [> <file>|>> <file>] [&] OR if <cmd> then [sequence of <cmd>] else [sequence of <cmd>] fi Where <cmd> is one of: [ <expression> ] ? cat <path> [<path> [<path> ...]] cd [<dir-path>|-|~|..] cp <source-path> <dest-path> dd if=<infile> of=<outfile> [bs=<sectsize>] [count=<sectors>] [skip=<sectors>] echo [<string|$name> [<string|$name>...]] exec <hex-address> exit free help kill -<signal> <pid> losetup [-d <dev-path>] | [[-o <offset>] [-r] <dev-path> <file-path>] ls [-lRs] <dir-path> mb <hex-address>[=<hex-value>][ <hex-byte-count>] mkfifo <path> mh <hex-address>[=<hex-value>][ <hex-byte-count>] mw <hex-address>[=<hex-value>][ <hex-byte-count>] ps pwd set <name> <value> sh <script-path> sleep <sec> test <expression> unset <name> usleep <usec> xd <hex-address> <byte-count> Builtin Apps: nsh> NuttShell (NSH) NuttX-6.16 nsh> ps PID PRI SCHD TYPE NP STATE NAME 0 0 FIFO KTHREAD READY Idle Task() 1 100 FIFO TASK RUNNING <noname>() nsh> sleep 10 nsh> ls dev /dev: console null ttyS0 nsh> free total used free largest Mem: 193184 6896 186288 126160 nsh> [ご注意] ・このページの記載事項については,一切無保証です。
inserted by FC2 system