Linux 如何发送一个";“中断”;在调试嵌入式系统时?

Linux 如何发送一个";“中断”;在调试嵌入式系统时?,linux,embedded,Linux,Embedded,全部, 众所周知,在调试嵌入式系统时,我们通常通过uart控制台与目标设备进行通信。现在我想在linux内核中测试“magicsysrq”函数,它需要向控制台驱动程序发送一个“中断”。我发现“中断”是什么意思,似乎我需要将TX线路的电气低电平保持一段时间。 我的问题是如何从APUE(unix中的高级程序)发送此中断“字符”,我必须调用函数“tcsendbreak”,这意味着我必须编写一个程序。我想知道我是否可以使用一些特殊的键来发送,如^C等。 不要使用“echo”x“>/proc/sysrq

全部,

众所周知,在调试嵌入式系统时,我们通常通过uart控制台与目标设备进行通信。现在我想在linux内核中测试“magicsysrq”函数,它需要向控制台驱动程序发送一个“中断”。我发现“中断”是什么意思,似乎我需要将TX线路的电气低电平保持一段时间。
我的问题是如何从APUE(unix中的高级程序)发送此中断“字符”,我必须调用函数“tcsendbreak”,这意味着我必须编写一个程序。我想知道我是否可以使用一些特殊的键来发送,如^C等。
不要使用“echo”x“>/proc/sysrq trigger”,我知道,只需要用另一种方式进行讨论:)

这是我的终端设置,我用ckermit与目标通话

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
stty-a
从中,看起来
控制-\B
将在C-Kermit中发送中断

其他方式

发送中断的一种方法是:

  • 切换到较低的速度
  • 发送一个Nul(0)或@(4016)——一个具有许多连续0位的字符将产生称为中断的帧错误
  • 切换回原始速度
  • 如您所述,另一种方法是使用
    行控件 功能

    #include <termios.h>
    
    int tcsendbreak(int fildes, int duration); // "duration" is ignored
    
    #包括
    int tcsendbreak(int fildes,int duration);//“duration”被忽略
    

    你用什么软件跟它说话?我用的是ckermit,我注意到uart设置了ignbrk,我应该取消设置吗?我明白你的意思,但我认为这不方便,我必须断开连接,重新连接并更改uart设置。那么^B的建议呢?或者因为C-kermit是开源的,所以我需要修补tcsendbreak()作为对其他用户触发机制的响应。