組み込みデバイスと通信する唯一の方法は、シリアル ポートです。デフォルトでは、組み込み Linux はこのポートを端末として使用します。この端末を無効にして、シリアル リンクを使用してバイナリ データを転送するにはどうすればよいですか? rx や tx などのコマンドを聞いたことがありますが、見つかりません。
/dev/tty から read() して /dev/tty に write() するだけでよいと思いますが、エラーメッセージやデータストリームの混乱がないことを確認したいと思います。
Linux コンソールを無効にするには、ブートローダーによって作成された Linux コマンド ラインを次のように変更する必要があります: console=/dev/ttyS? to : console=null
端末をrawに設定することはできませんか?
このチュートリアルをご覧ください。
xmodem などのアプリケーションを使用して、任意の端末でファイルを転送できます。端末から話しかけるシリアルポートですか、それともカーネルコンソールですか。
カーネルのノイズが少ない場合は、現在の接続を使用して xmodem のような転送を行うことができます。ホスト側では、kermit を使用できます。これは素晴らしく、スクリプト可能です。
シリアルポートを raw にしたい場合で、ファイル記述子 ttyfd を開いている場合は、次の方法があります。
struct termios tty, orig_tty;
...
if(tcgetattr(ttyfd, &tty) < 0)
{
// error checking
}
// backup tty, make it raw and apply changes
orig_tty = tty;
cfmakeraw(&tty);
if(tcsetattr(ttyfd, TCSAFLUSH, &tty) < 0)
{
// error checking
}
...
//end of program or error path :
tcsetattr(ttyfd, TCSAFLUSH, &orig_tty)
それでも正常に動作する端末が必要な場合は、プログラムの最後に設定を復元することを忘れないでください。
他の注意事項が示唆しているように、ここに集められたいくつかの確認事項があります。
端末プログラムは、組み込みデバイスで同じプログラムを実行して接続の反対側を管理できない限り、おそらく役に立ちません。
アプリケーションレベルのプロトコルを介してデータを転送するコマンドを端末で実行できます。XMODEM ファイル転送プロトコルを実装するために参照する rx および tx コマンド。転送するバイナリ データがファイルで構成されていて、スループットの要求が低く、コマンドを実行することによる管理上のオーバーヘッドが気にならない場合は、これが解決策になる可能性があります。または、データ転送と端末の両方を処理するためにシリアル ポートを多重化することもできます。シリアル ターミナル ドライバ コマンド (getty) を無効にし、シリアル ライン上でPPPプロトコルを実行して、デバイスへの IP 接続を確立します。その後、ssh または telnet を介してデバイスにログインし、IP ソケットを介してデータを転送できます。
はい、すべてのシリアル ポートが にあります/dev/ttyxx
。/dev/tty
特定のシリアルポートではなく、現在の端末を表すショートカットであることに注意してください。adm
多くの場合、これらはルートによって所有されており、アプリケーションからデバイスに直接アクセスするには、特権を持っているか、グループに属している必要があります。
chown
デバイスにアクセスできるようにする必要がある場合があります。デバイスの所有権を変更した結果がどうなるかはわかりません。IIRC、それは簡単で、うまく機能します。別の方法は、 を使用setuid
してプログラムを特権状態に昇格させることです。
getty
ユーザーがシリアルポートからログインできるという名前のプログラムがあります。ユーザーがログインできるように、シリアル ポートでinittab
起動します。getty
を無効にしたいgetty
。場合によっては、これを行うのに役立つポート マネージャーがあります。
場合によっては、inittab
を使用するように変更できますmgetty
。これは、 のよりスマートで制御しやすいバージョンですgetty
。