sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/admin-guide/sysrqmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/zh_TW/admin-guide/sysrqmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/it_IT/admin-guide/sysrqmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/ja_JP/admin-guide/sysrqmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/ko_KR/admin-guide/sysrqmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/pt_BR/admin-guide/sysrqmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/sp_SP/admin-guide/sysrqmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Simplified)uh1h hh _documenthsourceNlineNubhnote)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]h paragraph)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh5Documentation/translations/zh_CN/disclaimer-zh_CN.rsthKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hOriginalh]hOriginal}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhR/var/lib/git/docbuild/linux/Documentation/translations/zh_CN/admin-guide/sysrq.rsthKubh field_body)}(h$Documentation/admin-guide/sysrq.rst h]h)}(h#Documentation/admin-guide/sysrq.rsth]h#Documentation/admin-guide/sysrq.rst}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h翻译h]h翻译}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhKubh)}(h1黄军华 Junhua Huang h]h)}(h0黄军华 Junhua Huang h](h黄军华 Junhua Huang <}(hj"hhhNhNubh reference)}(hhuang.junhua@zte.com.cnh]hhuang.junhua@zte.com.cn}(hj,hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:huang.junhua@zte.com.cnuh1j*hj"ubh>}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h校译h]h校译}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhhhKubh)}(h-司延腾 Yanteng Si h]h)}(h,司延腾 Yanteng Si h](h司延腾 Yanteng Si <}(hjghhhNhNubj+)}(hsiyanteng@loongson.cnh]hsiyanteng@loongson.cn}(hjohhhNhNubah}(h]h ]h"]h$]h&]refurimailto:siyanteng@loongson.cnuh1j*hjgubh>}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hjcubah}(h]h ]h"]h$]h&]uh1hhjRubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhtarget)}(h.. _cn_admin-guide_sysrq:h]h}(h]h ]h"]h$]h&]refidcn-admin-guide-sysrquh1jhKhhhhhhubhsection)}(hhh](htitle)}(h!Linux 魔法系统请求键骇客h]h!Linux 魔法系统请求键骇客}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh)}(h针对 sysrq.c 的文档说明h]h针对 sysrq.c 的文档说明}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hhh](j)}(h什么是魔法 SysRq 键?h]h什么是魔法 SysRq 键?}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh)}(h它是一个你可以输入的具有魔法般的组合键。 无论内核在做什么,内核都会响应 SysRq 键的输入,除非内核完全卡死。h]h它是一个你可以输入的具有魔法般的组合键。 无论内核在做什么,内核都会响应 SysRq 键的输入,除非内核完全卡死。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]sysrqah ]h"]什么是魔法 sysrq 键?ah$]h&]uh1jhjhhhhhKubj)}(hhh](j)}(h如何使能魔法 SysRq 键?h]h如何使能魔法 SysRq 键?}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh)}(hX在配置内核时,我们需要设置 'Magic SysRq key (CONFIG_MAGIC_SYSRQ)' 为 'Y'。 当运行一个编译进 sysrq 功能的内核时,/proc/sys/kernel/sysrq 控制着被 SysRq 键调用的功能许可。这个文件的默认值由 CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE 配置符号设定,文件本身默认设置为 1。以下是 /proc/sys/kernel/sysrq 中可能的 值列表:h]hX在配置内核时,我们需要设置 ‘Magic SysRq key (CONFIG_MAGIC_SYSRQ)’ 为 ‘Y’。 当运行一个编译进 sysrq 功能的内核时,/proc/sys/kernel/sysrq 控制着被 SysRq 键调用的功能许可。这个文件的默认值由 CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE 配置符号设定,文件本身默认设置为 1。以下是 /proc/sys/kernel/sysrq 中可能的 值列表:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh block_quote)}(hX\- 0 - 完全不使能 SysRq 键 - 1 - 使能 SysRq 键的全部功能 - >1 - 对于允许的 SysRq 键功能的比特掩码(参见下面更详细的功能描述):: 2 = 0x2 - 使能对控制台日志记录级别的控制 4 = 0x4 - 使能对键盘的控制 (SAK, unraw) 8 = 0x8 - 使能对进程的调试导出等 16 = 0x10 - 使能同步命令 32 = 0x20 - 使能重新挂载只读 64 = 0x40 - 使能对进程的信号操作 (term, kill, oom-kill) 128 = 0x80 - 允许重启、断电 256 = 0x100 - 允许让所有实时任务变普通任务 h]h bullet_list)}(hhh](h list_item)}(h0 - 完全不使能 SysRq 键h]h)}(hj!h]h0 - 完全不使能 SysRq 键}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK#hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h#1 - 使能 SysRq 键的全部功能h]h)}(hj8h]h#1 - 使能 SysRq 键的全部功能}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK$hj6ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hX>1 - 对于允许的 SysRq 键功能的比特掩码(参见下面更详细的功能描述):: 2 = 0x2 - 使能对控制台日志记录级别的控制 4 = 0x4 - 使能对键盘的控制 (SAK, unraw) 8 = 0x8 - 使能对进程的调试导出等 16 = 0x10 - 使能同步命令 32 = 0x20 - 使能重新挂载只读 64 = 0x40 - 使能对进程的信号操作 (term, kill, oom-kill) 128 = 0x80 - 允许重启、断电 256 = 0x100 - 允许让所有实时任务变普通任务 h](h)}(h_>1 - 对于允许的 SysRq 键功能的比特掩码(参见下面更详细的功能描述)::h]h^>1 - 对于允许的 SysRq 键功能的比特掩码(参见下面更详细的功能描述):}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK%hjMubh literal_block)}(hX 2 = 0x2 - 使能对控制台日志记录级别的控制 4 = 0x4 - 使能对键盘的控制 (SAK, unraw) 8 = 0x8 - 使能对进程的调试导出等 16 = 0x10 - 使能同步命令 32 = 0x20 - 使能重新挂载只读 64 = 0x40 - 使能对进程的信号操作 (term, kill, oom-kill) 128 = 0x80 - 允许重启、断电 256 = 0x100 - 允许让所有实时任务变普通任务h]hX 2 = 0x2 - 使能对控制台日志记录级别的控制 4 = 0x4 - 使能对键盘的控制 (SAK, unraw) 8 = 0x8 - 使能对进程的调试导出等 16 = 0x10 - 使能同步命令 32 = 0x20 - 使能重新挂载只读 64 = 0x40 - 使能对进程的信号操作 (term, kill, oom-kill) 128 = 0x80 - 允许重启、断电 256 = 0x100 - 允许让所有实时任务变普通任务}hjasbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1j_hhhK'hjMubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]bullet-uh1jhhhK#hjubah}(h]h ]h"]h$]h&]uh1jhhhK#hjhhubh)}(h;你可以通过如下命令把值设置到这个文件中::h]h:你可以通过如下命令把值设置到这个文件中:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK0hjhhubj`)}(h%echo "number" >/proc/sys/kernel/sysrqh]h%echo "number" >/proc/sys/kernel/sysrq}hjsbah}(h]h ]h"]h$]h&]jojpuh1j_hhhK2hjhhubh)}(h这里被写入的 number 可以是 10 进制数,或者是带着 0x 前缀的 16 进制数。 CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE 必须是以 16 进制数写入。h]h这里被写入的 number 可以是 10 进制数,或者是带着 0x 前缀的 16 进制数。 CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE 必须是以 16 进制数写入。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK4hjhhubh)}(h注意,``/proc/sys/kernel/sysrq`` 的值只影响通过键盘触发 SySRq 的调用,对于 通过 ``/proc/sysrq-trigger`` 的任何操作调用都是允许的 (通过具有系统权限的用户)。h](h 注意,}(hjhhhNhNubhliteral)}(h``/proc/sys/kernel/sysrq``h]h/proc/sys/kernel/sysrq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhC 的值只影响通过键盘触发 SySRq 的调用,对于 通过 }(hjhhhNhNubj)}(h``/proc/sysrq-trigger``h]h/proc/sysrq-trigger}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhP 的任何操作调用都是允许的 (通过具有系统权限的用户)。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK7hjhhubeh}(h]id1ah ]h"]如何使能魔法 sysrq 键?ah$]h&]uh1jhjhhhhhKubj)}(hhh](j)}(h如何使用魔法 SysRq 键?h]h如何使用魔法 SysRq 键?}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhK`。 .. note:: 一些键盘可能没有标识 'SySRq' 键。'SySRq' 键也被当做 'Print Screen'键。 同时有些键盘无法处理同时按下这么多键,因此你可以先按下键盘 `Alt` 键, 然后按下键盘 `SysRq` 键,再释放键盘 `SysRq` 键,之后按下键盘上命令键 ``,最后释放所有键。 h](hterm)}(h在 x86 架构上h]h在 x86 架构上}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKEhjubh definition)}(hhh](h)}(h;你可以按下键盘组合键 `ALT-SysRq-`。h](h你可以按下键盘组合键 }(hjhhhNhNubhtitle_reference)}(h`ALT-SysRq-`h]hALT-SysRq-}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK?hjubh)}(hXG一些键盘可能没有标识 'SySRq' 键。'SySRq' 键也被当做 'Print Screen'键。 同时有些键盘无法处理同时按下这么多键,因此你可以先按下键盘 `Alt` 键, 然后按下键盘 `SysRq` 键,再释放键盘 `SysRq` 键,之后按下键盘上命令键 ``,最后释放所有键。h]h)}(hXG一些键盘可能没有标识 'SySRq' 键。'SySRq' 键也被当做 'Print Screen'键。 同时有些键盘无法处理同时按下这么多键,因此你可以先按下键盘 `Alt` 键, 然后按下键盘 `SysRq` 键,再释放键盘 `SysRq` 键,之后按下键盘上命令键 ``,最后释放所有键。h](h一些键盘可能没有标识 ‘SySRq’ 键。’SySRq’ 键也被当做 ‘Print Screen’键。 同时有些键盘无法处理同时按下这么多键,因此你可以先按下键盘 }(hjBhhhNhNubj%)}(h`Alt`h]hAlt}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjBubh 键, 然后按下键盘 }(hjBhhhNhNubj%)}(h`SysRq`h]hSysRq}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjBubh 键,再释放键盘 }(hjBhhhNhNubj%)}(h`SysRq`h]hSysRq}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjBubh& 键,之后按下键盘上命令键 }(hjBhhhNhNubj%)}(h``h]h }(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjBubh,最后释放所有键。}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKBhj>ubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKEhjubj)}(hP在 SPARC 架构上 你可以按下键盘组合键 `ALT-STOP-` 。 h](j)}(h在 SPARC 架构上h]h在 SPARC 架构上}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKHhjubj)}(hhh]h)}(h;你可以按下键盘组合键 `ALT-STOP-` 。h](h你可以按下键盘组合键 }(hjhhhNhNubj%)}(h`ALT-STOP-`h]hALT-STOP-}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKHhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKHhjhhubj)}(h在串行控制台(只针对 PC 类型的标准串口) 你可以发一个 ``BREAK`` ,然后在 5 秒内发送一个命令键, 发送 ``BREAK`` 两次将被翻译为一个正常的 BREAK 操作。 h](j)}(h:在串行控制台(只针对 PC 类型的标准串口)h]h:在串行控制台(只针对 PC 类型的标准串口)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKLhjubj)}(hhh]h)}(h你可以发一个 ``BREAK`` ,然后在 5 秒内发送一个命令键, 发送 ``BREAK`` 两次将被翻译为一个正常的 BREAK 操作。h](h你可以发一个 }(hjhhhNhNubj)}(h ``BREAK``h]hBREAK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh6 ,然后在 5 秒内发送一个命令键, 发送 }(hjhhhNhNubj)}(h ``BREAK``h]hBREAK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh5 两次将被翻译为一个正常的 BREAK 操作。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKLhjhhubj)}(h在 PowerPC 架构上 按下键盘组合键 `ALT - Print Screen` (或者 `F13`) - `<命令键>` 。 `Print Screen` (或者 `F13`) - `<命令键>` 或许也能实现。 h](j)}(h在 PowerPC 架构上h]h在 PowerPC 架构上}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKPhj>ubj)}(hhh]h)}(h按下键盘组合键 `ALT - Print Screen` (或者 `F13`) - `<命令键>` 。 `Print Screen` (或者 `F13`) - `<命令键>` 或许也能实现。h](h按下键盘组合键 }(hjShhhNhNubj%)}(h`ALT - Print Screen`h]hALT - Print Screen}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjSubh (或者 }(hjShhhNhNubj%)}(h`F13`h]hF13}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjSubh) - }(hjShhhNhNubj%)}(h `<命令键>`h]h <命令键>}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjSubh 。 }(hjShhhNhNubj%)}(h`Print Screen`h]h Print Screen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjSubh (或者 }hjSsbj%)}(h`F13`h]hF13}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjSubh) - }hjSsbj%)}(h `<命令键>`h]h <命令键>}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjSubh 或许也能实现。}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKOhjPubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhhhKPhjhhubj)}(ht在其他架构上 如果你知道其他架构的组合键,请告诉我,我可以把它们添加到这部分。 h](j)}(h在其他架构上h]h在其他架构上}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKShjubj)}(hhh]h)}(h`如果你知道其他架构的组合键,请告诉我,我可以把它们添加到这部分。h]h`如果你知道其他架构的组合键,请告诉我,我可以把它们添加到这部分。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKShjhhubj)}(hr在所有架构上 写一个字符到 /proc/sysrq-trigger 文件,例如:: echo t > /proc/sysrq-trigger h](j)}(h在所有架构上h]h在所有架构上}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKXhjubj)}(hhh](h)}(h8写一个字符到 /proc/sysrq-trigger 文件,例如::h]h7写一个字符到 /proc/sysrq-trigger 文件,例如:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKVhjubj`)}(hecho t > /proc/sysrq-triggerh]hecho t > /proc/sysrq-trigger}hj+sbah}(h]h ]h"]h$]h&]jojpuh1j_hhhKXhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKXhjhhubeh}(h]h ]h"]h$]h&]uh1jhjhhhNhNubh)}(h8这个命令键 `` 是区分大小写的。h](h这个命令键 }(hjKhhhNhNubj%)}(h``h]h }(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjKubh 是区分大小写的。}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKZhjhhubeh}(h]id2ah ]h"]如何使用魔法 sysrq 键?ah$]h&]uh1jhjhhhhhK 99`` 命令映射这个序列值到通用 的 SysRq 键编码上(比如 ``setkeycodes e05b 99`` )。最好将这个命令放在启动脚本 中。 哦,顺便说一句,你十秒钟不输入任何东西就将退出 “showkey”。h](ha有一些键盘对于 SysRq 键设置了不同的键值,而不是提前定义的 99 (查看在 }(hjhhhNhNubj)}(h*``include/uapi/linux/input-event-codes.h``h]h&include/uapi/linux/input-event-codes.h}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 文件中 }(hjhhhNhNubj)}(h ``KEY_SYSRQ``h]h KEY_SYSRQ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhJ 的定义) 或者就根本没有 SysRq 键。在这些场景下,执行 }(hjhhhNhNubj)}(h``showkey -s``h]h showkey -s}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh? 命令来找到一个合适 的扫描码序列,然后使用 }(hjhhhNhNubj)}(h``setkeycodes 99``h]hsetkeycodes 99}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhF 命令映射这个序列值到通用 的 SysRq 键编码上(比如 }(hjhhhNhNubj)}(h``setkeycodes e05b 99``h]hsetkeycodes e05b 99}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh )。最好将这个命令放在启动脚本 中。 哦,顺便说一句,你十秒钟不输入任何东西就将退出 “showkey”。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]id6ah ]h"]O我敲击了 sysrq 键,但像是什么都没发生,发生了什么错误?ah$]h&]uh1jhjhhhhhKubj)}(hhh](j)}(hI我想添加一个 SysRq 键事件到一个模块中,如何去做呢?h]hI我想添加一个 SysRq 键事件到一个模块中,如何去做呢?}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,hhhhhKubh)}(hX'为了注册一个基础函数到这个表中,首先你必须包含 ``include/linux/sysrq.h`` 头 文件,这个头文件定义了你所需要的所有东西。然后你必须创建一个 ``sysrq_key_op`` 结构体,然后初始化它,使用如下内容,A) 你将使用的这个键的处理函数, B) 一个 help_msg 字符串,在 SysRq 键打印帮助信息时将打印出来,C) 一个 action_msg 字 符串,就在你的处理函数调用前打印出来。你的处理函数必须符合在 'sysrq.h' 文件中 的函数原型。h](hF为了注册一个基础函数到这个表中,首先你必须包含 }(hj=hhhNhNubj)}(h``include/linux/sysrq.h``h]hinclude/linux/sysrq.h}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh` 头 文件,这个头文件定义了你所需要的所有东西。然后你必须创建一个 }(hj=hhhNhNubj)}(h``sysrq_key_op``h]h sysrq_key_op}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubhX\ 结构体,然后初始化它,使用如下内容,A) 你将使用的这个键的处理函数, B) 一个 help_msg 字符串,在 SysRq 键打印帮助信息时将打印出来,C) 一个 action_msg 字 符串,就在你的处理函数调用前打印出来。你的处理函数必须符合在 ‘sysrq.h’ 文件中 的函数原型。}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj,hhubh)}(hXv在 ``sysrq_key_op`` 结构体被创建后,你可以调用内核函数 ``register_sysrq_key(int key, const struct sysrq_key_op *op_p);``, 该函数在表中的 'key' 对应位置内容是空的情况下,将通过 ``op_p`` 指针注册这个操作 函数到表中 'key' 对应位置上。在模块卸载的时候,你必须调用 ``unregister_sysrq_key(int key, const struct sysrq_key_op *op_p)`` 函数,该函数 只有在当前该键对应的处理函数被注册到了 'key' 对应位置时,才会移除 'op_p' 指针 对应的键值操作函数。这是为了防止在你注册之后,该位置被改写的情况。h](h在 }(hjohhhNhNubj)}(h``sysrq_key_op``h]h sysrq_key_op}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh5 结构体被创建后,你可以调用内核函数 }(hjohhhNhNubj)}(hA``register_sysrq_key(int key, const struct sysrq_key_op *op_p);``h]h=register_sysrq_key(int key, const struct sysrq_key_op *op_p);}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubhU, 该函数在表中的 ‘key’ 对应位置内容是空的情况下,将通过 }(hjohhhNhNubj)}(h``op_p``h]hop_p}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubhq 指针注册这个操作 函数到表中 ‘key’ 对应位置上。在模块卸载的时候,你必须调用 }(hjohhhNhNubj)}(hB``unregister_sysrq_key(int key, const struct sysrq_key_op *op_p)``h]h>unregister_sysrq_key(int key, const struct sysrq_key_op *op_p)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh 函数,该函数 只有在当前该键对应的处理函数被注册到了 ‘key’ 对应位置时,才会移除 ‘op_p’ 指针 对应的键值操作函数。这是为了防止在你注册之后,该位置被改写的情况。}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj,hhubh)}(hX(魔法 SysRq 键系统的工作原理是将键对应操作函数注册到键的操作查找表, 该表定义在 'drivers/tty/sysrq.c' 文件中。 该键表有许多在编译时候就注册进去的操作函数,但是是可变的。 并且有两个函数作为操作该表的接口被导出::h]hX+魔法 SysRq 键系统的工作原理是将键对应操作函数注册到键的操作查找表, 该表定义在 ‘drivers/tty/sysrq.c’ 文件中。 该键表有许多在编译时候就注册进去的操作函数,但是是可变的。 并且有两个函数作为操作该表的接口被导出:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj,hhubj`)}(h,register_sysrq_key 和 unregister_sysrq_key.h]h,register_sysrq_key 和 unregister_sysrq_key.}hjsbah}(h]h ]h"]h$]h&]jojpuh1j_hhhKhj,hhubh)}(h当然,永远不要在表中留下无效指针,即,当你的模块存在调用 register_sysrq_key() 函数,它一定要调用 unregister_sysrq_key() 来清除它使用过的 SysRq 键表条目。 表中的空指针是安全的。:)h]h当然,永远不要在表中留下无效指针,即,当你的模块存在调用 register_sysrq_key() 函数,它一定要调用 unregister_sysrq_key() 来清除它使用过的 SysRq 键表条目。 表中的空指针是安全的。:)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj,hhubh)}(hX7如果对于某种原因,在 handle_sysrq 调用的处理函数中,你认为有必要调用 handle_sysrq 函数时,你必须意识到当前你处于一个锁中(你同时也处于一个中断处理 函数中,这意味着不能睡眠)。所以这时你必须使用 ``__handle_sysrq_nolock`` 替代。h](hX如果对于某种原因,在 handle_sysrq 调用的处理函数中,你认为有必要调用 handle_sysrq 函数时,你必须意识到当前你处于一个锁中(你同时也处于一个中断处理 函数中,这意味着不能睡眠)。所以这时你必须使用 }(hjhhhNhNubj)}(h``__handle_sysrq_nolock``h]h__handle_sysrq_nolock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 替代。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj,hhubeh}(h]id7ah ]h"]I我想添加一个 sysrq 键事件到一个模块中,如何去做呢?ah$]h&]uh1jhjhhhhhKubj)}(hhh](j)}(hO当我敲击一个 SysRq 组合键时,只有标题打印出现在控制台?h]hO当我敲击一个 SysRq 组合键时,只有标题打印出现在控制台?}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh)}(hXSysRq 键的输出和所有其他控制台输出一样,受制于控制台日志级别控制。 这意味着,如果内核以发行版内核中常见的 "quiet" 方式启动,则输出可能不会出现在实际 的控制台上,即使它会出现在 dmesg 缓存中,也可以通过 dmesg 命令和 ``/proc/kmsg`` 文件的消费访问到。作为一个特例,来自 sysrq 命令的标题行将被传递给所有控制台 使用者,就好像当前日志级别是最大的一样。如果只发出标题头,则几乎可以肯定内核日志 级别太低。如果你需要控制台上的输出,那么你将需要临时提高控制台日志级别,通过使用 键盘组合键 `alt-sysrq-8` 或者::h](hX5SysRq 键的输出和所有其他控制台输出一样,受制于控制台日志级别控制。 这意味着,如果内核以发行版内核中常见的 “quiet” 方式启动,则输出可能不会出现在实际 的控制台上,即使它会出现在 dmesg 缓存中,也可以通过 dmesg 命令和 }(hj(hhhNhNubj)}(h``/proc/kmsg``h]h /proc/kmsg}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubhXq 文件的消费访问到。作为一个特例,来自 sysrq 命令的标题行将被传递给所有控制台 使用者,就好像当前日志级别是最大的一样。如果只发出标题头,则几乎可以肯定内核日志 级别太低。如果你需要控制台上的输出,那么你将需要临时提高控制台日志级别,通过使用 键盘组合键 }(hj(hhhNhNubj%)}(h `alt-sysrq-8`h]h alt-sysrq-8}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(ubh 或者:}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj`)}(hecho 8 > /proc/sysrq-triggerh]hecho 8 > /proc/sysrq-trigger}hjZsbah}(h]h ]h"]h$]h&]jojpuh1j_hhhMhjhhubh)}(h[在触发了你感兴趣的 SysRq 键命令后,记得恢复日志级别到正常情况。h]h[在触发了你感兴趣的 SysRq 键命令后,记得恢复日志级别到正常情况。}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hjhhubeh}(h]id8ah ]h"]O当我敲击一个 sysrq 组合键时,只有标题打印出现在控制台?ah$]h&]uh1jhjhhhhhKubj)}(hhh](j)}(h*我有很多问题时,可以请教谁?h]h*我有很多问题时,可以请教谁?}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~hhhhhM ubj)}(hhh]j)}(hN请教在内核邮件列表上的人,邮箱: linux-kernel@vger.kernel.org h](j)}(h0请教在内核邮件列表上的人,邮箱:h]h0请教在内核邮件列表上的人,邮箱:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubj)}(hhh]h)}(hlinux-kernel@vger.kernel.orgh]j+)}(hjh]hlinux-kernel@vger.kernel.org}(hjhhhNhNubah}(h]h ]h"]h$]h&]refuri#mailto:linux-kernel@vger.kernel.orguh1j*hjubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1jhj~hhhhhNubeh}(h]id9ah ]h"]*我有很多问题时,可以请教谁?ah$]h&]uh1jhjhhhhhM ubj)}(hhh](j)}(h致谢h]h致谢}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhMubj)}(hhh](j)}(h0Mydraal 撰写了该文件h]h)}(hjh](h Mydraal <}(hjhhhNhNubj+)}(hvulpyne@vulpyne.neth]hvulpyne@vulpyne.net}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:vulpyne@vulpyne.netuh1j*hjubh> 撰写了该文件}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h1Adam Sulmicki 进行了更新h]h)}(hjh](hAdam Sulmicki <}(hjhhhNhNubj+)}(hadam@cfar.umd.eduh]hadam@cfar.umd.edu}(hj$hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:adam@cfar.umd.eduuh1j*hjubh> 进行了更新}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hKJeremy M. Dolan 在 2001/01/28 10:15:59 进行了更新h]h)}(hjFh](hJeremy M. Dolan <}(hjHhhhNhNubj+)}(hjmd@turbogeek.orgh]hjmd@turbogeek.org}(hjOhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:jmd@turbogeek.orguh1j*hjHubh)> 在 2001/01/28 10:15:59 进行了更新}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjDubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hICrutcher Dunnavant 添加键注册部分h]h)}(hjqh](hCrutcher Dunnavant <}(hjshhhNhNubj+)}(hcrutcher+kernel@datastacks.comh]hcrutcher+kernel@datastacks.com}(hjzhhhNhNubah}(h]h ]h"]h$]h&]refuri%mailto:crutcher+kernel@datastacks.comuh1j*hjsubh> 添加键注册部分}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjoubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]j}j~uh1jhhhMhjhhubeh}(h]id10ah ]h"]致谢ah$]h&]uh1jhjhhhhhMubeh}(h](linuxjeh ]h"](!linux 魔法系统请求键骇客cn_admin-guide_sysrqeh$]h&]uh1jhhhhhhhKexpect_referenced_by_name}jjsexpect_referenced_by_id}jjsubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(jN generatorN datestampN source_linkN source_urlN toc_backlinksjfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}j]jasnameids}(jjjjjjjjjpjmj j j]jZjjj)j&jjj{jxjjjju nametypes}(jjjjjpj j]jj)jj{jjuh}(jjjjjjjjjmjj jsjZj jj`j&jjj,jxjjj~jju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jK sRparse_messages]transform_messages]hsystem_message)}(hhh]h)}(hhh]h:Hyperlink target "cn-admin-guide-sysrq" is not referenced.}hjAsbah}(h]h ]h"]h$]h&]uh1hhj>ubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehlineKuh1j<uba transformerN include_log]6Documentation/translations/zh_CN/admin-guide/sysrq.rst(NNNNta decorationNhhub.