0
  echo g > /proc/sysrq-trigger
  怎么让系统停下来,进入进入KDB循环?
1
  需要简单了解下:Linux Magic System Request
2
  在sysrq数组中我并没有发现注册”g”对应调用的函数,可是调试的时候确实生效了
  static struct sysrq_key_op *sysrq_key_table[36] = {
 &sysrq_loglevel_op,  /* 0 */
 &sysrq_loglevel_op,  /* 1 */
 &sysrq_loglevel_op,  /* 2 */
        ……
 &sysrq_term_op,   /* e */
 &sysrq_moom_op,   /* f */
 /* g: May be registered for the kernel debugger */
 NULL,    /* g */
 NULL,    /* h – reserved for help */
        ……
   }
   这里的时候为空,不知道在哪里绑定的
   头脑转不过弯,在内核中查找 sysrq_key_table数组(一般来说不会直接操作数据结构),结果没有发现有注册
   其实直接搜索register_sysrq_key就可以(这个后来才知道的)
3
  最后用了最笨的方法:
  3.1  driver/char/sysrq.c __handle_sysrq函数中添加打印函数地址
       void __handle_sysrq(int key, struct tty_struct *tty, int check_mask)
       {

op_p = __sysrq_get_key_op(key);
             //此行为添加的
              printk(KERN_ERR”key is %d op_p func pointer is %p , %d:\n”,key,op_p->handler,op_p->handler);
       }
       运行时输出: 
       [  184.269194] key is 103 op_p func pointer is c00c8238 , -1072922056:

3.2  objdump -s vmlinux > linux
       或者在System.map中查找
  3.3  以下是查找对应的结果:
       c00c8238 t sysrq_handle_dbg  
4
  static struct sysrq_key_op sysrq_dbg_op = {
 .handler = sysrq_handle_dbg,
 .help_msg = “debug(G)”,
 .action_msg = “DEBUG”,
  };
  //模块加载的时候,就注册到SYSRQ数组里面去了
  #ifdef CONFIG_MAGIC_SYSRQ
  register_sysrq_key(‘g’, &sysrq_dbg_op);
  #endif
5
   echo g > /proc/sysrq-trigger
              —sysrq_handle_dbg
                      —> arch_kgdb_breakpoint
   static inline void arch_kgdb_breakpoint(void)
   {
        //这个会触发一个trap:软中断,arm与X86的实现有些不一样
        //x86是直接插入0XCC(int 3),arm则是发现没有这个指令触发一个trap
         asm(“.word 0xe7ffdeff”); 
   }
6
   之后进入trap处理函数中
   kgdb_handle_exception
             —>kdb_stub
                  —>kdb_main_loop
                         —>kdb_local
   在kdb_local循环中接收用户输入的命令(go , bp , rd 等)

System Request 进入KDB模式过程详解的更多相关文章

  1. Portlet 通信过程详解

    Portlet 通信过程详解 在 Portal 的开发过程中,Theme 与 portlet 之间的通信,以及 portlet 之间的通信是开发人员常常遇到的问题.通常 Portlet 之间需要能够互 ...

  2. Java多线程编程中Future模式的详解

    Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Futu ...

  3. Java多线程编程中Future模式的详解<转>

    Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Futu ...

  4. DBA_Oracle Startup / Shutdown启动和关闭过程详解(概念)

    2014-08-07 Created By BaoXinjian

  5. Android的init过程详解(一)

    Android的init过程详解(一) Android的init过程(二):初始化语言(init.rc)解析 本文使用的软件版本 Android:4.2.2 Linux内核:3.1.10 本文及后续几 ...

  6. linux内核剖析(零)linux系统启动过程详解-开机加电后发生了什么

    本文参考了如下文章 深入理解linux启动过程 mbr (主引导记录(Master Boot Record)) 电脑从开机加电到操作系统main函数之前执行的过程 详解linux系统的启动过程及系统初 ...

  7. hadoop1.2.1+zk-3.4.5+hbase-0.94.1集群安装过程详解

    hadoop1.2.1+zk-3.4.5+hbase-0.94.1集群安装过程详解 一,环境: 1,主机规划: 集群中包括3个节点:hadoop01为Master,其余为Salve,节点之间局域网连接 ...

  8. BabyLinux制作过程详解

    转:http://www.360doc.com/content/05/0915/14/1429_12641.shtml BabyLinux制作过程详解 作者:GuCuiwen email:win2li ...

  9. (转)Linux 开机引导和启动过程详解

    Linux 开机引导和启动过程详解 编译自:https://opensource.com/article/17/2/linux-boot-and-startup作者: David Both 原创:LC ...

随机推荐

  1. ListView属性解释

    1.android:scrollbarStyle 定义滚动条的样式和位置 参考:http://www.trinea.cn/android/android-scrollbarstyle/ 2.andro ...

  2. 两个activity之间的数据传递

    1.清单文件第二个activity<activity android:name="com.example.twodatapass.ResultActivity" androi ...

  3. C# 点击窗口任意位置拖动

    代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; ...

  4. Java 多线程-生产者、消费者

    一.整体代码 ThreadDemo.java public class ThreadDemo { public static void main(String[] args) { Godown god ...

  5. [置顶] ssize_t与size_t-linux

    ssize_t: signed size_t [注释:signed 有符号] size_t: 标准C库中定义的,应为unsigned int [注释:unsigned 无符号] 一.size_t 增强 ...

  6. ASP.NET中操作SQL数据库

    在WebConfig中配置数据库连接字符串,代码如下: <connectionStrings>         <add name="ConnectionString&qu ...

  7. c++11 新特性之 autokeyword

    C++11是对眼下C++语言的扩展和修正.C++11包含大量的新特性:包含lambda表达式,类型推导keywordauto.decltype,和模板的大量改进. g++编译c++11命令加上 -st ...

  8. hdu 1102 Constructing Roads(最小生成树 Prim)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1102 Problem Description There are N villages, which ...

  9. PHP - 代码分离

    总代码: <?php /* * Version:1.0 * CreateTime:2015年11月11日 * Author:HF_Ultrastrong *///引入公共文件,在公共文件中创建, ...

  10. jQuery 3.0 的 Data

    jQuery 3.0 的 Data Snandy If you cannot hear the sound of the genuine in you, you will all of your li ...