ユーザ用ツール

サイト用ツール


xg_series_devel:autostart_rcs:start

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
最新リビジョン 両方とも次のリビジョン
xg_series_devel:autostart_rcs:start [2018/03/14 18:31]
admin
xg_series_devel:autostart_rcs:start [2018/12/25 09:46]
admin
ライン 1: ライン 1:
 +====== アプリケーションの自動起動 ======
 +
 +[[xg_series_devel:​add_builtin_command:​start]] で追加した、タスクなどを起動するビルトインアプリケーションを、
 +機器電源 ON 時に自動起動させる方法を紹介します。
 +
 +※ 公式ドキュメントの該当箇所は [[http://​nuttx.org/​Documentation/​NuttShell.html#​startupscript|こちら]] です。
 +
 +例として、『[[xg_series_devel:​use_adc:​start]]』で紹介した **adc** というビルトインアプリケーションを自動起動させてみます。
 +
 +\\
 +
 +===== 設定 =====
 +
 +==== config の変更 ====
 +
 +[[http://​nuttx.org/​Documentation/​NuttShell.html#​startupscript|ドキュメント]] にある下記条件
 +
 +  * CONFIG_DISABLE_MOUNTPOINT がセットされていないこと
 +  * CONFIG_NFILE_DESCRIPTORS が 4 より大きいこと
 +  * CONFIG_FS_ROMFS が有効化されていること
 +
 +はデフォルトでクリアするよう設定してあります。
 +
 +追加で、**CONFIG_NSH_ROMFSETC** と **CONFIG_NSH_ARCHROMFS** を有効にします。
 +
 +{{:​xg_series_devel:​autostart_rcs:​menuconfig_nsh_rcs_01.png?​640|CONFIG_NSH_ROMFSETC}}
 +
 +{{:​xg_series_devel:​autostart_rcs:​menuconfig_nsh_rcs_02.png?​640|CONFIG_NSH_ARCHROMFS}}
 +
 +\\
 +
 +==== romfs image の作成 ====
 +
 +ここでビルドを試みると、下記のエラーになります。
 +
 +<​code>​
 +./​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
 +</​code>​
 +
 +''​nuttx/​include/​arch/​board/​nsh_romfsimg.h''​ を作成する必要があるとわかります。
 +
 +\\
 +
 +romfs image は ''​rcS.template''​ というテンプレートファイルから生成します。\\
 +今回は **adc** というアプリケーションを起動させたいので、下記のようなファイルを作成します。
 +
 +<file shellscript rcS.template>​
 +#! /bin/nsh
 +
 +echo "auto execute adc from rcS!"
 +adc
 +</​file>​
 +
 +\\
 +
 +''​nuttx/​tools/​mkromfsimg.sh''​ というスクリプトで、romfs image を作成します。
 +
 +<​code>​
 +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$ ​
 +</​code>​
 +
 +\\
 +
 +==== ファームウェアのビルド ====
 +
 +ビルドを行います。場合にもよりますが、まずは ''​make clean''​ したほうが良いかもしれません。
 +
 +\\
 +
 +===== ファームウェアの書き込みと実行 =====
 +
 +ファームウェアを書き込み、実行してみます。
 +
 +<​code>​
 +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> ​
 +</​code>​
 +
 +''​rcS''​ により自動実行されました。
 +
 +rcS も以下のように見えています。
 +
 +<​code>​
 +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> ​
 +</​code>​
 +
 +\\
 +
 +===== 応用 =====
 +
 +NuttShell には、''​if〜then〜else〜fi''​ や ''​while〜do〜done''​ など、Linux の shell script のような制御文も使えますので、\\
 +設定をチェックして起動するプログラムを変えるなどもスクリプトで柔軟に行うことができます。
 +
 +参照 : [[http://​nuttx.org/​Documentation/​NuttShell.html#​conditional|NuttShell Conditional Command Execution]]
 +
 +\\
 +
  
xg_series_devel/autostart_rcs/start.txt · 最終更新: 2020/11/30 09:58 by admin