STM32でNUTTXを使ってみる

RAMDISKの作成


前回、rc.sysinitの変更方法を紹介しました。
そこで、ついでなのでRAMDISKの作成方法を紹介ます。
前回と同じファームを使用します。
nshに接続し以下のコマンドを実行します。
nsh> mkrd -m 1 -s 512 64
nsh> ls /dev
/dev:
 console
 null
 ram0
 ram1              ------> 新しくできる
 ttyACM0
 ttyS0
nsh>
nsh>
nsh> mkfatfs /dev/ram1
nsh> mount -t vfat /dev/ram1 /tmp
nsh> ls /
/:
 dev/
 etc/
 proc/
 tmp/               -----> 新しくできる


nshで使用できる組み込みコマンドの詳細はこ ちらに公開されています。
mkrdではセクターサイズとセクター数を指定します。
セクター数が大きすぎると以下のエラーとなります。
nsh> mkrd -m 1 -s 512 1024
nsh: mkrd: out of memory
nsh>

RAMDISKをFATとして使う場合の最低セクター数は64です。
これ以下ではmkfatfsでエラーとなります。
nsh> mkrd -m 1 -s 512 32
nsh> mkfatfs /dev/ram1
nsh: mkfatfs: mkfatfs failed: 23
nsh>

また、RAMDISKはSRAM上に作られるので、アプリケーションが使えるメモリ領域を消費します。
RAMDISKが不要な場合は、作らない方がいいです。
nsh>
nsh> free
             total       used       free    largest
Umem:       190368      15632     174736     122640

nsh> mkrd -m 1 -s 512 128
nsh> free
             total       used       free    largest
Umem:       190368      81264     109104      57088

nsh>

RAMDISKが必要な場合は、以下のメニューでセクター数やマウントポイントを指定します。


前回コメントアウトした部分を元に戻して、mkromfsimg.shを実行します。
$ cat $HOME/nuttxspace/apps/nshlib/rc.sysinit.template
# Create a RAMDISK and mount it at XXXRDMOUNTPOINTXXX

mkrd -m XXXMKRDMINORXXX -s XXMKRDSECTORSIZEXXX XXMKRDBLOCKSXXX
mkfatfs /dev/ramXXXMKRDMINORXXX
mount -t vfat /dev/ramXXXMKRDMINORXXX XXXRDMOUNTPOINTXXX

task_test3 init

$ cd $HOME/nuttxspace/apps/nshlib

$ $HOME/nuttxspace/nuttx/tools/mkromfsimg.sh $HOME/nuttxspace/nuttx

ファームウェアをビルドし、新しいファームウェアをマイコンに書き込みます。
nshに接続するとメニューで設定したセクター数が反映されています。


RAMDISK上にディレクトリを作ることができます。
nsh> cd /tmp
nsh> mkdir sub1
nsh> mkdir sub2
nsh> ls
/tmp:
 SUB1/
 SUB2/

RAMDISKに対して、Standard I/O APIを使ってファイルを読み書きすることができます。
nsh> file_test
File IO example
Hello,world
nsh> cat /tmp/test.txt
Hello,world
nsh>



ファームの書き込み方法と、nshへの接続方法はこちらに紹介しています。
STM32F4 Discovery
STM32F3 Discovery
STM32F103RB Nucleo
STM32F103 BluePill/BlackPill
STM32F103 VEボード
STM32F407 VGボード

続く....