System Request 进入KDB模式过程详解
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模式过程详解的更多相关文章
- Portlet 通信过程详解
Portlet 通信过程详解 在 Portal 的开发过程中,Theme 与 portlet 之间的通信,以及 portlet 之间的通信是开发人员常常遇到的问题.通常 Portlet 之间需要能够互 ...
- Java多线程编程中Future模式的详解
Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Futu ...
- Java多线程编程中Future模式的详解<转>
Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Futu ...
- DBA_Oracle Startup / Shutdown启动和关闭过程详解(概念)
2014-08-07 Created By BaoXinjian
- Android的init过程详解(一)
Android的init过程详解(一) Android的init过程(二):初始化语言(init.rc)解析 本文使用的软件版本 Android:4.2.2 Linux内核:3.1.10 本文及后续几 ...
- linux内核剖析(零)linux系统启动过程详解-开机加电后发生了什么
本文参考了如下文章 深入理解linux启动过程 mbr (主引导记录(Master Boot Record)) 电脑从开机加电到操作系统main函数之前执行的过程 详解linux系统的启动过程及系统初 ...
- 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,节点之间局域网连接 ...
- BabyLinux制作过程详解
转:http://www.360doc.com/content/05/0915/14/1429_12641.shtml BabyLinux制作过程详解 作者:GuCuiwen email:win2li ...
- (转)Linux 开机引导和启动过程详解
Linux 开机引导和启动过程详解 编译自:https://opensource.com/article/17/2/linux-boot-and-startup作者: David Both 原创:LC ...
随机推荐
- Android学习笔记:adb 与 adb shell操作 以及中文乱码解决
1.安装app >adb install xxx.apk 2.卸载app >adb uninstall app的包路径 如:>adb uninstall com.example.my ...
- 引用 移植Linux到s3c2410上
引用 bsky 的 移植Linux到s3c2410上来源:http://www.embed.com.cn/downcenter/Article/Catalog12/4000.htm 移植Linux到s ...
- zk leader选举自动完成
server 1: [root@wx03 bin]# ./zkServer.sh status ZooKeeper JMX enabled by default Using config: /zook ...
- 【Android UI】色板
Hex Code Color #FFFFFF #FFFFCC #FFFF99 #FFFF66 #FFFF33 #FFFF00 #FFCCFF #FFCCCC #FFCC ...
- 利用JNI技术在Android中调用C++形式的OpenGL ES 2.0函数
1. 打开Eclipse,File-->New-->Project…-->Android-->AndroidApplication Projec ...
- ACM第二次比赛( C )
Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Description Vanya ...
- day8 - isinstance--issubclass-异常处理-自定义异常
一.isinstance(obj, cls) 检查是否obj是否是类 cls 的对象 __author__ = 'Administrator' class Foo(object): pass obj ...
- WCF技术剖析之二十五: 元数据(Metadata)架构体系全景展现[元数据描述篇]
原文:WCF技术剖析之二十五: 元数据(Metadata)架构体系全景展现[元数据描述篇] 在[WS标准篇]中我花了很大的篇幅介绍了WS-MEX以及与它相关的WS规范:WS-Policy.WS-Tra ...
- 使用jQuery的attr方法来修改onclick值
这篇文章主要介绍了通过jQuery的attr修改onclick值的解决方法 ,需要的朋友可以参考下 var js = "alert('B:' + this.id); return false ...
- docker学习笔记6:利用dockerfile创建镜像介绍(生成简单web服务器镜像)
本文介绍如何利用dockerfile来创建镜像.下面介绍具体的操作过程: 一.创建构建环境 操作示例如下: xxx@ubuntu:~$ pwd /home/xxx xxx@ubuntu:~$ mkdi ...