设为首页 加入收藏

TOP

Linux内核驱动开发之KGDB原理介绍及kgdboe方式配置
2014-11-24 03:17:14 来源: 作者: 【 】 浏览:2
Tags:Linux 内核 驱动 开发 KGDB 原理 介绍 kgdboe 方式 配置

一、KGDB原理:


Kgdb相关源码主要实现了主机上gdb远程调试所需的功能,包括命令处理、陷阱处理以及串口通信3个主要部分。Kgdb会在Linux内核中添加一个调试stub,调试stub是Linux内核中的一小段代码,是运行gdb的开发机和目标机内核之间的媒介。gdb和调试stub之间通过gdb串行协议进行通信。Gdb串行协议是一种基于消息的ASCII码协议,包含了各种调试命令。当设置断点时,kgdb将断点的指令替换为一条trap指令,当执行到断点时控制权就转移到调试stub中去。此时,调试stub的任务就是使用远程串行通信协议将当前内核环境传送给gdb,然后从gdb处接收命令。gdb命令告诉调试stub下一步该做什么,当调试stub收到继续执行的命令时,将恢复内核的运行环境,把对cpu的控制权重新交还给内核。


二、KGDB功能部件:


(1)GDB stub。


Gdb stub被称为调试插桩(简称为stub),是kgdb调试器的核心。它是Linux内核中的一小段代码,用来处理主机上gdb发来的各种请求;并且在内核处于被调试状态时,控制目标机上的处理器。


(2)陷阱处理。


当设置断点时,kgdb会提供一个异常处理函数,将断点位置的指令替换成一条异常指令。执行到该断点时该异常会发生,内核则将cpu控制权交给kgdb调试器,程序进入kgdb的提供异常处理函数中。在该异常处理函数中,可以分析内核代码的各种情况。


(3)串口通信。


Gdb和调试stub之间通过gdb串行协议进行通信。它是一种基于消息的ASCII码协议,包含了各种调试命令。


最后要说的是除了使用串口外,也可以使用网卡进行通信,也就是kgdboe方式。kgdboe方式要比kgdboc方式优越,上篇kgdboc使用流程中也提到,当u-boot加载内核执行到 kgdb: Waiting for connection from remote gdb... 要手动关闭该串口,因为gdb远程连接时也需要此串口。那么带来的影响就是我们无法看到调试过程中内核的输出信息,而网卡(kgdboe)方式刚可以避免这一缺陷。下面简单介绍下网卡方式(kgdboe)的配置流程:


(1)配置内核:


a) CONFIG_NETCONSOLE (Networking support -> Network console logging support)


b) CONFIG_DEBUG_KERNEL (Kernel hacking -> Kernel Debugging)


c) CONFIG_KGDB (Kernel hacking -> KGDB)


d) CONFIG_KGDB_ETH (Kernel hacking -> KGDB -> Method of KGDB communication -> Ethernet)


(2)修改u-boot的启动参数bootargs以支持kgdb调试(与kgdboc类似):


setenv bootargs 'console=…kgdboe=[target-port]@/[dev][target-macaddr],[host-port]@/[dev] kgdbwait … nfsroot=…


举例:kgdboe=@192.168.1.4/,@192.168.1.3/

主要增加以上红色字体部分,解释下参数的意义:


■ target-port (optional): GDB port (default 6443)
■ target-ip: target ip address (i.e DVEVM ip address)
■ dev (optional): network interface (default eth0)
■ host-port (optional): Host port use to send/recieve UDP packets (default 6442)
■ host-ip: Host IP address


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Python序列的切片操作与技巧 下一篇Java核心语法之Java类的基本构成

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·如何利用Python做数 (2025-12-24 23:48:36)
·如何使用python进行 (2025-12-24 23:48:34)
·python 爬虫入门该怎 (2025-12-24 23:48:31)
·Java 实现多个大文件 (2025-12-24 23:22:00)
·Java多线程编程在工 (2025-12-24 23:21:56)