
組み込み Linux システム (petalinux) 用のプログラムを作成しました。ターミナルまたは TCF デバッガーから起動すると正常に動作します。ただし、システムの起動時に実行したいので、start-stop-daemon を使用します。これは一部は機能しましたが、現在は完全に停止しています。プログラムが正しく起動し、GPIO および I2C アクセス用のいくつかのファイルを開き、正しく操作できることがわかります。その後、約 8 秒後に、これらのファイル記述子が突然不良 (Errno 9) になり、ソフトウェアがクラッシュするか、少なくとも動作しなくなります。
さらにテストしてみると、bash スクリプトを介してプログラムをバックグラウンドで起動した場合にもこれが起こることが判明しました。
#!/bin/bash
/home/user/myApp.elf &
このスクリプトでは、バックグラウンドに置かないとうまくいきます。また、バックグラウンドでターミナルから直接プログラムを起動してもうまくいきます。私は /etc/profile.d スクリプトを介して直接起動することに頼りましたが、これは解決策としては回避策に近いものです。
以前は、何らかのメモリ オーバーフローまたは破損を疑っていましたが、プログラムを直接実行するとこれまで常に機能していましたが、バックグラウンドで起動すると常に失敗していました。これは、明らかなメモリの問題のようには思えません。つまり、バックグラウンドでプロセスに何らかの Linux の魔法または奇妙なことが起こって、ファイル記述子が変更または修正されるのでしょうか。正しく処理していないメモリ管理が行われていますか。正しく処理していないシステム コールがありますか。