どのようにC++、PortAudioアプリが起動オングストロームLinuxをインストールBeagleBoard?
-
27-10-2019 - |
質問
私はコマンドラインと呼ばれるアプリケxooky_naboxしたプログラムを使用可能です。でを読み込みpuredataパッチ-プロセス信号からのオーディオジャックのbeagleboard出力信号のオーディオ出力ジャックに取り付けます。
たいへの応用ラウンのbeagleoardが起動し、滞在走行までのシャットダウンします。ありませんGUI、キーボードやモニター付で、オーディオやジャック.
またアプリケーションの実行を手動でも動作す:
xooky_nabox -audioindev 1 -audiooutdev 1 /var/xooky/patch.pd
でも細かいまでの背景
xooky_nabox -audioindev 1 -audiooutdev 1 /var/xooky/patch.pd &
今やっていて、コードのレイアウトの二つのバージョンのプログラムのいろは https://github.com/rvega/XookyNabox):
バージョン1は、メインスレッドが生かされている:
void sighandler(int signum){
time_t rawtime;
time(&rawtime);
std::ofstream myfile;
myfile.open ("log.txt",std::ios::app);
myfile << ctime(&rawtime) << " Caught signal:" << signum << " " << strsignal(signum) << "\n";
myfile.close();
if(signum == 15 || signum == 2){
exit(0);
}
}
int main (int argc, char *argv[]) {
// Subscribe to all system signals for debugging purposes.
for(int i=0; i<64; i++){
signal(i, sighandler);
}
// Sanity checks, error and help messages, etc.
parseParameters(argc, argv);
//Start Signal processing and Audio
initZenGarden();
initAudioIO();
// Keep the program alive.
while(1){
sleep(10);
}
// This is obviously never reached, so far no problems with that...
stopAudioIO();
stopZengarden();
return 0;
}
static int paCallback( const void *inputBuffer, void *outputBuffer, unsigned long framesPerBuffer, const PaStreamCallbackTimeInfo* timeInfo, PaStreamCallbackFlags statusFlags, void *userData ){
// This is called by PortAudio when the output buffer is about to run dry.
}
バージョン2、実行するフォ脱するターミナルを開始する
void go_daemon(){
// Run the program as a daemon.
pid_t pid, sid;
pid = fork(); // Fork off the parent process
if (pid < 0) {
exit(EXIT_FAILURE);
}
if (pid > 0) {
exit(EXIT_SUCCESS); // If child process started ok, exit the parent process
}
umask(0); // Change file mode mask
sid = setsid(); // Create a new session ID for the child process
if (sid < 0) {
// TODO: Log failure
exit(EXIT_FAILURE);
}
if((chdir("/")) < 0){ //Change the working directory to "/"
//TODO: Log failre
exit(EXIT_FAILURE);
}
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
}
int main (int argc, char *argv[]) {
go_daemon();
// Subscribe to all system signals for debugging purposes.
for(int i=0; i<64; i++){
signal(i, sighandler);
}
// Sanity checks, error and help messages, etc.
parseParameters(argc, argv);
//Start Signal processing and Audio
initZenGarden();
initAudioIO();
// Keep the program alive.
while(1){
sleep(10);
}
// This is obviously never reached, so far no problems with that...
stopAudioIO();
stopZengarden();
return 0;
}
しているためでは起動時に
また、両方のバージョンのプログラム起動用されます。その結果はいつも同じです。時のビーグル開始門ちゃまを何気なく打ったんで音beign出力端数秒の音を停止し、ログイン画面を表示してしてくれてありがとうございますシリアル端末に添付のminicom走るコンピュータに入力).の感じ方には個人差もあるのxooky_naboxプロセスが現実に走後、ログインが音声出力...
こんどろ風mikiモデルを作ってみた:
追加@再起動入crontab立ち上げ、プログラム最後のアンパサンド(第1版のプログラム):
@reboot xooky_nabox <params> &
追加の開始-停止-デーモンへのcrontab(バージョン1):
@reboot start-stop-daemon -S -b --user daemon -n xooky_nabox -a /usr/bin/xooky_nabox -- <params>
作成したスクリプトでは/etc/init.d/xookyかった
$chmod +x xooky
$update-rc.d xooky defaults
た異なるバージョンの起動スクリプト:開始-停止-デーモンバージョン1では、呼び出しプログラムとの直接の末尾にアンパサンド(バージョン1)を呼びプログラムを直接のない最後のアンパサンド(ver.2).
また、私はプログラムを手動からシリアル端末からのsshセッション(usb接続のネットワーク);そして実行し、プログラムを実行細かどうか、またどのように消費15%cpuを搭載しています。その後停止outputing音、このcpu消費量が約30%となっています。私log.txt ファイルを示す信号を送り、プログラムのOS上でこのシナリオ。
がバージョン2のプログラムが走って起動時に、ログャショーのようなもの:
Mon Jun 6 02:44:49 2011 Caught signal:18 Continued
Mon Jun 6 02:44:49 2011 Caught signal:15 Terminated
いいアイデアなどをデバッグす。提案の立ち上げ方に関する私のプログラム起動時?
解決 3
その結ditching PortAudio業のジャックに走るので、自身のサーバでこの問題に関連のない私にとってなくなった。
他のヒント
バージョン2,
そうだと思うよ open
( dup2
) /dev/null
へ STDIN
/STDOUT
/STDERR
.だけを閉じる取り扱う問題です。
のようなこと:
int fd = open("/dev/null", O_RDWR);
dup2( fd, STDOUT_FILENO );
してくれてありがとうございます何をスタートストップユーティリティを多数います。できないのバージョン1は、申し訳ありません)
あCの機能を、デーモン
#include <unistd.h>
int daemon(int nochdir, int noclose);
関するお客様からの問い合わせにmanページ daemon(3)
かるよう、お手伝いいたします。
する場合がございますのでお開きデーモンときには、linux開始きを見る init
版を使用すdistroが通常できるため、追加のコマンドを実行するデーモン /etc/init.d/rc
(かなで)このメソッドをオーバーライド.このファイルが実行される init
時linuxが不安定になることがあります。