1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| static struct sysrq_key_op *sysrq_key_table[36] = { &sysrq_loglevel_op, /* 0 顾名思义就是设置console的log级别了 其实就是console_loglevel = key - '0';*/ &sysrq_loglevel_op, /* 1 */ &sysrq_loglevel_op, /* 2 */ &sysrq_loglevel_op, /* 3 */ &sysrq_loglevel_op, /* 4 */ &sysrq_loglevel_op, /* 5 */ &sysrq_loglevel_op, /* 6 */ &sysrq_loglevel_op, /* 7 */ &sysrq_loglevel_op, /* 8 */ &sysrq_loglevel_op, /* 9 */ NULL, /* a 不干活,预留的给sparc*/ &sysrq_reboot_op, /* b 就是reboot咯*/ &sysrq_crash_op, /* c 产生一个crash, 是对一个空指针操作来trigger*/ &sysrq_showlocks_op, /* d 根据是否有CONFIG_LOCKDEP定义输出locks*/ &sysrq_term_op, /* e 这个厉害了,发SIGTERM 给所有的用户进程.*/ &sysrq_moom_op, /* f 调用schedule_work来产生一个OOM execution, 最终是调用了out_of_memory函数,这里面就有点复杂了,下篇再总结这个*/ NULL, /* g 预留给kernel的debug用*/ NULL, /* h 预留给帮助用 */ &sysrq_kill_op, /* i 这个更直接,发SIGKILL给所有的用户进程*/ &sysrq_thaw_op, /* j 通过SysRq来紧急解冻所有的文件系统,前提是有CONFIG_BLOCK内核配置 */ &sysrq_SAK_op, /* k 如果有CONFIG_VT 这个调用schedule_work 来操作SAK_work 就是Secure Attention Key 了吧*/ &sysrq_showallcpus_op, /* l 如果定义了CONFIG_SMP, 就输出所有的CPU的back trace */ &sysrq_showmem_op, /* m 输出内存的信息*/ &sysrq_unrt_op, /* n 这个就给所有RT Tasks 设置NICE*/ NULL, /* o 预留,代表off吧.*/ &sysrq_showregs_op, /* p 输出寄存器的值*/ &sysrq_show_timers_op, /* q 输出时钟事件设备以及等待中的hrtimers*/ &sysrq_unraw_op, /* r 将键盘模式设置为系统默认值*/ &sysrq_sync_op, /* s 做一个临时紧急同步用*/ &sysrq_showstate_op, /* t 调用show_state和show_workqueue_state输出当前系统状态*/ &sysrq_mountro_op, /* u 调用emergency_remount做重新紧急remount*/ NULL, /* v 预留给frame buffer*/ &sysrq_showstate_blocked_op, /* w 输出blocked 的信息*/ NULL, /* x 给不同的体系的dump 预留*/ NULL, /* y 给sparc64预留*/ &sysrq_ftrace_dump_op, /* z 把ftrace中存的信息输出.*/ };
|