1. 串口发送sysrq
对于串口来说,sysrq
本质是一个低电平脉冲,通常为100ms。
1在通用异步收发传输器(UART)中,Line Status Register(LSR)的 “Break interrupt indicator”(中断指示位)表示检测到了一个间断信号。
2一、含义
3当该位被置位时,表明 UART 接收器检测到了一个间断条件。一个间断通常是指接收线路上长时间保持为低电平状态,通常超过一个字符传输的时间。这可能是由于外部设备故意发送一个间断信号,或者由于通信线路上的异常情况导致的。
4二、用途
5信号异常检测:可以用来检测通信线路上的异常情况。例如,如果通信双方在一段时间内没有数据传输,然后突然检测到一个间断信号,这可能表示通信出现了问题,需要进行故障排查。
6特殊通信协议:在某些特殊的通信协议中,间断信号可能被用作一种特殊的控制信号。例如,在一些调试场景中,可以通过发送间断信号来触发特定的操作。
7三、注意事项
8误触发:该位可能会由于噪声或其他短暂的干扰而被误触发。因此,在检测到间断信号后,通常需要进行进一步的确认和处理,以确定是否真的存在通信问题。
9处理方式:当检测到间断信号时,软件可以采取适当的措施,例如重新初始化通信接口、通知用户进行故障排查等。具体的处理方式取决于应用的需求。
1.1. minicom
1Ctrl + A
2B
3<code>
1.2. xshell
1文件
2传输
3发送取消代码
4<code>
2. 添加自定义sysrq
Linux支持添加自定义的sysrq
按键,前提是sysrq_key_table
中对应的按键未被占用。
1/// drivers/tty/sysrq.c
2static int __sysrq_swap_key_ops(u8 key, const struct sysrq_key_op *insert_op_p,
3 const struct sysrq_key_op *remove_op_p)
4{
5 int retval;
6
7 spin_lock(&sysrq_key_table_lock);
8 if (__sysrq_get_key_op(key) == remove_op_p) {
9 __sysrq_put_key_op(key, insert_op_p);
10 retval = 0;
11 } else {
12 retval = -1;
13 }
14 spin_unlock(&sysrq_key_table_lock);
15
16 /*
17 * A concurrent __handle_sysrq either got the old op or the new op.
18 * Wait for it to go away before returning, so the code for an old
19 * op is not freed (eg. on module unload) while it is in use.
20 */
21 synchronize_rcu();
22
23 return retval;
24}
25
26int register_sysrq_key(u8 key, const struct sysrq_key_op *op_p)
27{
28 return __sysrq_swap_key_ops(key, op_p, NULL);
29}
30EXPORT_SYMBOL(register_sysrq_key);
31
32int unregister_sysrq_key(u8 key, const struct sysrq_key_op *op_p)
33{
34 return __sysrq_swap_key_ops(key, NULL, op_p);
35}
36EXPORT_SYMBOL(unregister_sysrq_key);