GNSSを利用したアプリケーションをSPRESENSE SDKを使って開発しています。

CONFIG_SDK_USER_ENTRYPOINTnsh_mainとし、シェルからコマンドを実行した場合には、その後リセットボタンを押してリセットした後も問題なく何度でも起動が可能です。

一方で、CONFIG_SDK_USER_ENTRYPOINTを自分のアプリケーションに向けた場合、フラッシュ書き込み直後は正しく動作しますが、2回目の起動以降 (パワーオンリセットもリセットボタンによるリセットも) ioctl(CXD56_GNSS_IOCTL_START) が失敗し、GNSSが利用できません。

エントリーポイント内で boardctl(BOARDIOC_INIT, 0); は実行していますが、nshから起動する場合と異なり、他にもすべき初期化などはありますでしょうか。

実際のエントリポイントはこちらです。
https://github.com/chibiegg/spresense-gnss-logger/blob/8b812a6ace63f9d87cafc9f1bd77628e12a59518/logger/logger_main.c#L38

rcS を利用した場合

CONFIG_SDK_USER_ENTRYPOINTによる起動ではなく、 /etc/init.d/rcSを作成し、起動スクリプトから実行した場合も同様の問題に当たりました。

サンプルプログラムの場合

サンプルとして含まれているgnss_factoryを有効にし、gnss_factory_test をCONFIG_SDK_USER_ENTRYPOINTにした場合も以下のように2回目以降エラーになるため不思議です...

Hello, FACTORY SAMPLE!!
start error -1
End of FACTORY Sample:-1