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