1 .. include:: ../disclaimer-zh_CN.rst 2 3 :Original: Documentation/admin-guide/sysrq.rst 4 5 :翻译: 6 7 黄军华 Junhua Huang <huang.junhua@zte.com.c 8 9 :校译: 10 11 司延腾 Yanteng Si <siyanteng@loongson.cn> 12 13 .. _cn_admin-guide_sysrq: 14 15 Linux 魔法系统请求键骇客 16 ======================== 17 18 针对 sysrq.c 的文档说明 19 20 什么是魔法 SysRq 键? 21 ~~~~~~~~~~~~~~~~~~~~~ 22 23 它是一个你可以输入的具有魔法般 24 无论内核在做什么,内核都会响应 25 26 如何使能魔法 SysRq 键? 27 ~~~~~~~~~~~~~~~~~~~~~~~ 28 29 在配置内核时,我们需要设置 'Magic 30 当运行一个编译进 sysrq 功能的内核 31 SysRq 键调用的功能许可。这个文件 32 配置符号设定,文件本身默认设置 33 值列表: 34 35 - 0 - 完全不使能 SysRq 键 36 - 1 - 使能 SysRq 键的全部功能 37 - >1 - 对于允许的 SysRq 键功能的 38 39 2 = 0x2 - 使能对控制台日志 40 4 = 0x4 - 使能对键盘的控制 41 8 = 0x8 - 使能对进程的调试 42 16 = 0x10 - 使能同步命令 43 32 = 0x20 - 使能重新挂载只读 44 64 = 0x40 - 使能对进程的信号 45 128 = 0x80 - 允许重启、断电 46 256 = 0x100 - 允许让所有实时任 47 48 你可以通过如下命令把值设置到这 49 50 echo "number" >/proc/sys/kernel/sysrq 51 52 这里被写入的 number 可以是 10 进制 53 CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE 必须是以 54 55 注意,``/proc/sys/kernel/sysrq`` 的值只 56 通过 ``/proc/sysrq-trigger`` 的任何操作 57 (通过具有系统权限的用户)。 58 59 如何使用魔法 SysRq 键? 60 ~~~~~~~~~~~~~~~~~~~~~~~ 61 62 在 x86 架构上 63 你可以按下键盘组合键 :kbd:`A 64 65 .. note:: 66 一些键盘可能没有标识 'SyS 67 同时有些键盘无法处理同 68 然后按下键盘 :kbd:`SysRq` 键 69 :kbd:`<command key>`,最后释放 70 71 在 SPARC 架构上 72 你可以按下键盘组合键 :kbd:`A 73 74 在串行控制台(只针对 PC 类型的标 75 你可以发一个 ``BREAK`` ,然后 76 发送 ``BREAK`` 两次将被翻译为 77 78 在 PowerPC 架构上 79 按下键盘组合键 :kbd:`ALT - Prin 80 :kbd:`Print Screen` (或者 :kbd:`F1 81 82 在其他架构上 83 如果你知道其他架构的组合 84 85 在所有架构上 86 写一个字符到 /proc/sysrq-trigger 87 88 echo t > /proc/sysrq-trigger 89 90 这个命令键 :kbd:`<command key>` 是区分 91 92 什么是命令键? 93 ~~~~~~~~~~~~~~ 94 95 =========== ================================== 96 命令键 功能 97 =========== ================================== 98 ``b`` 将立即重启系统,不会同 99 100 ``c`` 将执行系统 crash,如果配 101 102 ``d`` 显示所有持有的锁。 103 104 ``e`` 发送 SIGTERM 信号给所有进 105 106 ``f`` 将调用 oom killer 杀掉一个 107 也不会 panic。 108 109 ``g`` kgdb 使用(内核调试器) 110 111 ``h`` 将会显示帮助。(实际上 112 但是 ``h`` 容易记住):-) 113 114 ``i`` 发送 SIGKILL 给所有进程, 115 116 ``j`` 强制性的 “解冻它” - 用 117 118 ``k`` 安全访问秘钥(SAK)杀掉在 119 下面 SAK 节重要论述。 120 121 ``l`` 显示所有活动 cpu 的栈回 122 123 ``m`` 将导出当前内存信息到你 124 125 ``n`` 用于使所有实时任务变成 126 127 ``o`` 将关闭系统(如果配置和 128 129 ``p`` 将导出当前寄存器和标志 130 131 ``q`` 将导出每个 cpu 上所有已 132 time_list 文件显示的 timers 133 134 ``r`` 关闭键盘的原始模式,设 135 136 ``s`` 将尝试同步所有的已挂载 137 138 ``t`` 将导出当前所有任务列表 139 140 ``u`` 将尝试重新挂载已挂载文 141 142 ``v`` 强制恢复帧缓存控制台。 143 ``v`` 触发 ETM 缓存导出 [ARM 架 144 145 ``w`` 导出处于不可中断状态( 146 147 ``x`` 在 ppc/powerpc 架构上用于 xm 148 在 sparc64 架构上用于显示 149 在 MIPS 架构上导出所有的 150 151 ``y`` 显示全局 cpu 寄存器 [SPARC- 152 153 ``z`` 导出 ftrace 缓存信息 154 155 ``0``-``9`` 设置控制台日志级别,该 156 控制台。(比如 ``0`` ,将 157 才能到你的控制台。) 158 =========== ================================== 159 160 好了,我能用他们做什么呢? 161 ~~~~~~~~~~~~~~~~~~~~~~~~~~ 162 163 嗯,当你的 X 服务端或者 svgalib 程 164 方便的。 165 166 sak(k)(安全访问秘钥)在你尝试登 167 密码的特洛伊木马程序运行时是有 168 就可以确认当前的登陆提示程序是 169 木马程序。 170 171 .. important:: 172 173 在其实际的形式中,在兼容 C2 安 174 它也不应该误认为此。 175 176 似乎其他人发现其可以作为(系统 177 同时不会让你切换控制台的方法。 178 179 ``reboot(b)`` 是个好方法,当你不能 180 181 ``crash(c)`` 可以用于手动触发一个 cr 182 注意当 crashdump 机制不可用时,这 183 184 ``sync(s)`` 在拔掉可移动介质之前, 185 救援 shell 之后很方便 -- 它将确保 186 屏幕上出现 "OK" 和 "Done" 之前,同 187 188 ``umount(u)`` 可以用来标记文件系统 189 被重新挂载为只读。这个重新挂载 190 才算完成。 191 192 日志级别 ``0`` - ``9`` 用于当你的控 193 选择 ``0`` 将禁止除了最紧急的内核 194 syslogd/klogd 进程是运行的,它们仍 195 196 ``term(e)`` 和 ``kill(i)`` 用于当你有些 197 它们的时候,特别是它正在创建其 198 199 "just thaw ``it(j)`` " 用于当你的系统 200 系统冻结,而导致的不响应时。 201 202 有的时候 SysRq 键在使用它之后,看 203 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 204 205 这也会发生在我这,我发现轻敲键 206 一个无效的 SysRq 键序列可以解决问 207 切换到另一个虚拟控制台(键盘操 208 209 我敲击了 SysRq 键,但像是什么都没 210 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 211 212 有一些键盘对于 SysRq 键设置了不同 213 (查看在 ``include/uapi/linux/input-event-co 214 或者就根本没有 SysRq 键。在这些场 215 的扫描码序列,然后使用 ``setkeycode 216 的 SysRq 键编码上(比如 ``setkeycodes 217 中。 218 哦,顺便说一句,你十秒钟不输入 219 220 我想添加一个 SysRq 键事件到一个模 221 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 222 223 为了注册一个基础函数到这个表中 224 文件,这个头文件定义了你所需要 225 结构体,然后初始化它,使用如下 226 help_msg 字符串,在 SysRq 键打印帮助 227 符串,就在你的处理函数调用前打 228 的函数原型。 229 230 在 ``sysrq_key_op`` 结构体被创建后, 231 ``register_sysrq_key(int key, const struct sys 232 该函数在表中的 'key' 对应位置内容 233 函数到表中 'key' 对应位置上。在模 234 ``unregister_sysrq_key(int key, const struct s 235 只有在当前该键对应的处理函数被 236 对应的键值操作函数。这是为了防 237 238 魔法 SysRq 键系统的工作原理是将键 239 该表定义在 'drivers/tty/sysrq.c' 文件 240 该键表有许多在编译时候就注册进 241 并且有两个函数作为操作该表的接 242 243 register_sysrq_key 和 unregister_sysr 244 245 当然,永远不要在表中留下无效指 246 函数,它一定要调用 unregister_sysrq_k 247 表中的空指针是安全的。:) 248 249 如果对于某种原因,在 handle_sysrq 250 handle_sysrq 函数时,你必须意识到当 251 函数中,这意味着不能睡眠)。所 252 253 当我敲击一个 SysRq 组合键时,只有 254 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 255 256 SysRq 键的输出和所有其他控制台输 257 这意味着,如果内核以发行版内核 258 的控制台上,即使它会出现在 dmesg 259 文件的消费访问到。作为一个特例 260 使用者,就好像当前日志级别是最 261 级别太低。如果你需要控制台上的 262 键盘组合键 :kbd:`alt-sysrq-8` 或者:: 263 264 echo 8 > /proc/sysrq-trigger 265 266 在触发了你感兴趣的 SysRq 键命令后 267 268 我有很多问题时,可以请教谁? 269 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 270 271 请教在内核邮件列表上的人,邮箱 272 linux-kernel@vger.kernel.org 273 274 致谢 275 ~~~~ 276 277 - Mydraal <vulpyne@vulpyne.net> 撰写了该文 278 - Adam Sulmicki <adam@cfar.umd.edu> 进行了 279 - Jeremy M. Dolan <jmd@turbogeek.org> 在 2001/ 280 - Crutcher Dunnavant <crutcher+kernel@datastack
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.