2

すべて、

ご存知のように、組み込みシステムをデバッグする場合、通常、uartコンソールを介してターゲットデバイスと通信します。次に、Linuxカーネルで「Magicsysrq」関数をテストします。これは、コンソールドライバに「ブレーク」を送信する必要があります。「ブレーク」とはどういう意味かわかりました。しばらくの間、TXラインの電気を低レベルに保つ必要があるようです。
私の質問は、APUE(UNIXの高度なプログラム)からこのブレーク「文字」を送信する方法です。関数「tcsendbreak」を呼び出す必要があります。つまり、プログラムを作成する必要があります。^Cなどの特定のキーを使用して送信できるかどうか迷います。
"echo"x "> / proc /sysrq-trigger""に会わないでください。他の方法で話し合ってください:)

これが私の端末設定です。ターゲットとカーミットで話します。

stty -a < /dev/ttyUSB0 
speed 115200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>;
swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z;
rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
ignbrk -brkint ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc 
-ixany -imaxbel -iutf8
-opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon -iexten -echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl  
echoke
4

1 に答える 1

6

ドキュメントから、 Control-\ BC-Kermit でブレークを送信するようです。

他の方法...

休憩を送信する 1 つの方法は次のとおりです。

  1. 低速に切り替える
  2. Nul (0) または @ (40 16 ) を送信します。多くの連続した 0 ビットを持つ文字は、BREAK と呼ばれるフレーミング エラーを生成します。
  3. 元の速度に戻す

ご指摘のとおり、もう 1 つの方法は、<termios.h>回線制御機能を使用することです。

#include <termios.h>

int tcsendbreak(int fildes, int duration); // "duration" is ignored
于 2012-05-16T03:25:58.477 に答える