web-dev-qa-db-ja.com

catはシリアルポートのボーレートをどのようにして知るのですか?

私は定期的にcatを使用して、シリアル接続を介してFPGA開発ボードからコンソールにデバッグ情報を表示していますが、ボーレートが何であるかをLinuxに伝える必要はありませんでした。 catはシリアル接続のボーレートをどのようにして知るのですか?

24
stanri

stty ユーティリティは、標準入力であるデバイスの端末I/O特性を設定または報告します。これらの特性は、その特定のメディアを介して接続を確立するときに使用されます。 catはボーレート自体を知らないため、特定の接続から受信した情報を画面に出力します。

例としてstty -F /dev/ttyACM0は、ttyACM0デバイスの現在のボーレートを示します。

36
stanri

catは、ポートがすでに構成されている設定を使用します。この小さなCスニペットを使用すると、特定のシリアルポートに現在設定されているボーレートを確認できます。

get-baud-rate.c

#include <termios.h>
#include <unistd.h>
#include <stdio.h>

int main() {
  struct termios tios;
  tcgetattr(0, &tios);
  speed_t ispeed = cfgetispeed(&tios);
  speed_t ospeed = cfgetospeed(&tios);
  printf("baud rate in: 0%o\n", ispeed);
  printf("baud rate out: 0%o\n", ospeed);
  return 0;
}

それを実行します:

./get-baud-rate < /dev/ttyS0 # or whatever your serial port is

取得した数値は/usr/include/asm-generic/termios.hで検索できます。#defineなどのB9600sがあります。ヘッダーファイルとget-baud-rate出力の数値は8進数で。

たぶん、これらの数値が新しいブートでどのようになり、後で変更されるかどうかを実験して確認できます。

9
clacke