目次

アプリケーションの自動起動

ビルトインアプリケーションの追加 で追加した、タスクなどを起動するビルトインアプリケーションを、 機器電源 ON 時に自動起動させる方法を紹介します。

※ 公式ドキュメントの該当箇所は こちら です。

例として、『AD Converter の利用』で紹介した adc というビルトインアプリケーションを自動起動させてみます。


設定

config の変更

ドキュメント にある下記条件

はデフォルトでクリアするよう設定してあります。

追加で、CONFIG_NSH_ROMFSETCCONFIG_NSH_ARCHROMFS を有効にします。

CONFIG_NSH_ROMFSETC

CONFIG_NSH_ARCHROMFS


romfs image の作成

ここでビルドを試みると、下記のエラーになります。

./nsh_romfsetc.c:57:39: fatal error: arch/board/nsh_romfsimg.h: No such file or directory
 #  include <arch/board/nsh_romfsimg.h>
                                       ^
compilation terminated.
ERROR: arm-none-eabi-gcc failed: 1

nuttx/include/arch/board/nsh_romfsimg.h を作成する必要があるとわかります。


romfs image は rcS.template というテンプレートファイルから生成します。
今回は adc というアプリケーションを起動させたいので、下記のようなファイルを作成します。

rcS.template
#! /bin/nsh
 
echo "auto execute adc from rcS!"
adc


nuttx/tools/mkromfsimg.sh というスクリプトで、romfs image を作成します。

develop:~/src/NuttX_XG50/nuttx/include/arch/board$ ../../../tools/mkromfsimg.sh ../../../
develop:~/src/NuttX_XG50/nuttx/include/arch/board$ ls -ln
total 48
-rw-rw-r-- 1 1000 1000  9551  3月 13 13:45 board.h
-rw-rw-r-- 1 1000 1000  2755  3月 13 13:49 boardctl.h
-rw-rw-r-- 1 1000 1000 19504  3月 12 11:10 centurysys-xg50.h
-rw-rw-r-- 1 1000 1000  6383  3月 14 15:38 nsh_romfsimg.h  <--- 生成された
-rw-rw-r-- 1 1000 1000    51  3月 14 15:38 rcS.template
develop:~/src/NuttX_XG50/nuttx/include/arch/board$ 


ファームウェアのビルド

ビルドを行います。場合にもよりますが、まずは make clean したほうが良いかもしれません。


ファームウェアの書き込みと実行

ファームウェアを書き込み、実行してみます。

ABCDF
auto execute adc from rcS!
adc_main: g_adcstate.count: 1
adc_main: Hardware initialized. Opening the ADC device: /dev/adc0
Sample:
1: channel: 0 value: 1498
2: channel: 1 value: 3493
3: channel: 2 value: 0
4: channel: 17 value: 926

NuttShell (NSH)
nsh> 

rcS により自動実行されました。

rcS も以下のように見えています。

nsh> ls -lR /etc
/etc:
 dr-xr-xr-x       0 .
 dr-xr-xr-x       0 init.d/
/etc/init.d:
 -r-xr-xr-x      51 rcS
nsh> cat /etc/init.d/rcS
#! /bin/nsh

echo "auto execute adc from rcS!"
adc

nsh> 


応用

NuttShell には、if〜then〜else〜fiwhile〜do〜done など、Linux の shell script のような制御文も使えますので、
設定をチェックして起動するプログラムを変えるなどもスクリプトで柔軟に行うことができます。

参照 : NuttShell Conditional Command Execution