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);

3. 参考

Linux 魔法系统请求键骇客(v6.6)

Linux 魔法系统请求键骇客(lasted)

linux 中的 SysRq 魔术键

Linux Magic SysRq 魔键 – 字节岛技术分享