kgdb模块移植分析文档

本文详细分析了KGDB(Kernel GDB)在X86体系结构下的内核调试原理,包括其初始化、异常捕获和主控制模块。KGDB通过插入到内核中,利用异常处理机制获取内核控制权,与GDB配合进行远程调试。文章还探讨了KGDB在c-sky嵌入式平台上的移植方案,重点在于体系结构相关的kgdb.c文件移植和异常处理函数的修改。

1.概述

本文通过分析X86KGDB内核调试实现机制,理清KGDB内核调试的原理。最后给出KGDB移植至c-sky的可行性方案。

本文后续分为两个章节。第二章主要结合代码分析分析X86体系结构下,KGDB内核调试的实现机制。第三章结合第二章的分析对比,提出KGDB内核调试在c-sky嵌入式平台上的移植的实现方案。

2.原理分析

2.1简介

KgdbLinux内核本身提供的一种内核调试stub程序,kgdb通过将自身代码插入在内核中,编译后,一起作为一个整体的程序运行。所以kgdb本身运行在内核空间,因此kgdb可以访问内核空间或者用户空间,获取相应的被调试程序的数据信息。在linux-2.6.25之前kgdb作为内核的补丁存在,要使用kgdb调试,需要找到相应版本的kgdb,然后把补丁编译进linux内核;linux-2.6.25版本之后,kgdb被整合到linux内核中,要使用kgdb调试的时候只需要在配置内核的时候勾选相应的kgdb选项即可。

Kgdb作为内核调试的调试代理,与调试linux应用程序的调试代理程序gdbserver类似,需要和gdb配合,通过远程调试协议,一起完成调试。使用kgdb调试内核需要两台机器,一台作为host机,另一台作为target机,两台机器通过串口或者网络连接起来。在target机上运行配置了kgdb的待调试linux内核,在host机上运行gdbGdbkgdb采用RSP远程通信协议(RSP协议不作具体介绍,可参考相关资料),gdbkgdb发送相应的命令包,从kgdb端获取内核运行的数据信息包,从而实现对目标机上的linux内核进行控制,实现远程调试。Kgdb的调试模型如图2-1所示。

 

 

        

图2‑1 kgdb调试模型

 

2.2调试原理

2.1 kgdb简介一节中讲到kgdb是一种stub调试程序,将自身的代码插入到待调试的linux内核中,然后一起编译运行。那么linux内核运行得好好的,怎么保证一定能运行到kgdb的代码中去呢?运行到kgdb代码时kgdb会做一些什么事情?运行到kgdb代码时整个系统的运行状况又如何呢?

kgdb通过捕获掌管所有的异常来实现对linux内核的控制。具体机制如下:kgdb通过修改linux内核的异常处理程序,将自己的代码插入到异常处理程序中,这样内核发生异常,进入到异常处理程序中,由于kgdb把自己的代码插入到异常处理程序的前面部分,那么会先进入kgdb的代码(kgdb只接管内核态产生的异常,用户态的异常不会进入kgdb的主代码,只是进行正常的异常处理),待kgdb处理完退出以后,回到异常处理程序继续进行异常处理。打个比方,kgdb就相当于中断服务程序,它恢复被调试内核的过程就相当于是中断返回,在中断返回之前,由kgdb一直占用着CPU,接收调试器的命令,处理命令,返回命令结果的工作。Kgdb的调试流程如图2-2所示:

 

 

2‑2 kgdb调试流程

2.3模块分析

kgdb的代码按功能划分主要可以分为两部分:初始化模块和主控制模块。

主控制模块功能就是初始化模块将kgdb初始化以后,内核发生异常,进入kgdbkgdbhost机上运行的gdb进行通信,主控制模块负责kgdbgdb的通信,负责从gdb接收命令包、解析执行命令包并且将执行结果返回给gdb

2.3.1初始化模块

初始化模块主要包括异常捕捉初始化和底层实现初始化。异常捕捉初始化所做的工作就是修改异常的处理函数,使得内核产生异常能被kgdb捕捉,进而使得kgdb获取内核的控制权;底层实现初始化指的是host机和target机的物理连接可以通过网络或者串口,在内核启动的参数里面可以配置选择kgdbockgdb over console)或者kgdboekdgb over erthnet),底层实现初始化就是注册相关的驱动。

kgdb初始化模块的介绍主要从初始化的时机和初始化的内容进行阐述。在介绍kgdb初始化的时机前,我们先对linux内核的启动初始化过程做一个简要的回顾,如图2-3所示:

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值