gdb_kdb_kgdb

Kernel 调试-准备篇 近期要开始做内核调试的工作, 先热个身,总结一下几个概念: oops:Oops(也称 panic)消息包含系统错误的细节,如 CPU 寄存器的内容。在 Linux 中,调试系统崩溃的传统方法是分析在发生崩溃时发送到系统控制台的 Oops 消息。在2.4 kernel 上,将得到的消息发送到 ksymoops 程序,它将试图将代码转换为指令并将堆栈值映射到内核符号; 2.6 内核已经不用 阅读详情
kdb
ftp://oss.sgi.com/projects/kdb/download/latest
ftp://oss.sgi.com/www/projects/kdb/download/ 
内核的源代码中就有,用menuconfig重新设置内核选项,在kernel hacking中。




kdb编译,安装,使用完全手册


编译kdb
步骤1:
kdb不是Linux内核的标准配置,需要先到这个网站上去下载一个版本,2个文件
ftp://oss.sgi.com/projects/kdb/download/v4.4/
kdb-v4.4-2.6.15-common-1(kdb-v4.4-2.6.15-common-1.bz2)
kdb-v4.4-2.6.15-i386-1(kdb-v4.4-2.6.15-i386-1.bz2)

步骤2:
下载一个纯的linux内核源码文件。
记住,一定要是纯的linux内核源码,不能是什么redhat等等公司出的版本。否则在pacth时就会出现error了。
比如有一次我把patch打到了/usr/src/redhat/BUILD/kernel-2.6.15/linux-2.6.15.i686里就发生了错误,这个目录是redhat自己改过的源码,不是纯的源码,所以出错。
下载到的源码必须和步骤1的小版本一致。比如我的纯linux内核版本是2.6.15-1***。
把linux纯内核源码文件命名为linux,放到/usr/src中。

步骤3:
把步骤1得到的解压后的2个文件kdb-v4.4-2.6.15-common-1,kdb-v4.4-2.6.15-i386-1放到/usr/src/linux目录里。
这时就会很顺利的patch成功,只要不出现什么reject这样的提示就算成功。
一旦发现出现了reject这样的信息,只有2种可能:
一是你的内核不是真正的内核,是公司改进过的内核;二是kdb版本和源码版本不一致。

步骤4:
该linux配置,在这里千万不要用make menuconfig这样的命令,你可能很奇怪,为什么?我的经验表明,不同的linux/kdb版本menuconfig出来的kdb选项有很大的不同,用语言是无法准确描述,我原来参考很多网上的资料都是根据menuconfig来,造成了描述矛盾,很难搞明白。在这里,我们直接改写文件最为牢靠。
先运行make menuconfig这个命令,不更改任何选项,直接回车,然后选择yes,这样就能生成一个隐藏的文件.config了。
用vi/vim 打开这个文件,
改写如下:
CONFIG_KDB=y
CONFIG_KDB_MODULES=n
CONFIG_KDB_OFF=n
CONFIG_KALLSYMS=y
CONFIG_FRAME_POINTER=y

保存。记住,这样做比在menuconfig菜单选项里选择要安全和清晰的多。

打开kdb/kdb_cmds这个文件,全部注释掉所有:例如:
# Initial commands for kdb, alter to suit your needs.
# These commands are executed in kdb_init() context, no SMP, no
# processes.  Commands that require process data (including stack or
# registers) are not reliable this early.  set and bp commands should
# be safe.  Global breakpoint commands affect each cpu as it is booted.
# Standard debugging information for first level support, just type archkdb
# or archkdbcpu or archkdbshort at the kdb prompt.

defcmd archkdb "" "First line arch debugging"
#set BTSYMARG 1
#set BTARGS 5
#-archkdbcommon
#-bta
endefcmd

defcmd archkdbcpu "" "archkdb with only tasks on cpus"
#set BTSYMARG 1
#set BTARGS 5
#-archkdbcommon
#-btc
endefcmd

defcmd archkdbshort "" "archkdb with less detailed backtrace"
#set BTSYMARG 0
#set BTARGS 0
#-archkdbcommon
#-bta
endefcmd

为什呢,因为大家刚开始接触kdb时,非常不熟悉,如果把全部选项都注释后,kdb就变的比较容易操作,否则重启系统以后,你还以为安装出错呢,不信可以试试,呵呵。等你水平高了以后,在改过来,重新编译系统就可以了。



步骤5:
改写Makefile文件中的EXTRAVERSION,随便取个名字吧。
make all
make bzImage
make modules
make modules_install
make install

有文章说要改写什么lilo文件。
不用改写什么lilo文件,你的系统如果只支持grub,你根本在系统里找不到lilo,改什么改!!!


步骤6:
重启,在系统选项里选择这个新的系统就可以了。
在系统开始引导时,你会在屏幕上看到3-5行关于kdb的信息,其实就是kdb_cmds里的配置,我们已经注释掉了,所以光显示,不会运行(这样最安全,否则如果你对kdb不熟,改kdb_cmds错了,在启动时就会出现什么内核panic的恐怖信息,这就是总是不能启动成功的原因)。
看到其他的启动跟没安装kdb时一样,成功进入提示你输入用户名,密码进入系统时,就表明你的kdb才真正的安装成功了。





启动kdb。
用root权限进入系统。
# echo "1" > /proc/sys/kernel/kdb 回车以后没什么反映,说明启动成功了。

我有个同事运行这个命令以后,提示找不到kdb这个文件,后来我给他调试时发现kdb根本就没安装成功,最后我给他重新安装就没问题了。

按“Pause Break”键,就会出现kdb的使用接口了。如果想退出,就输入go,然后按回车即可。我后来发现通过f1进入系统后,输入go+回车后
怎么也退不出来,在f2进入系统后,输入go+回车后就很顺利的退出了,这个现象非常奇怪,我猜可能跟linux本身有关系。




使用kdb。
谁说kdb不能源码级调试,那时他没真正用过kdb.

其实kdb是可以源码级调试的,在这里的前提是对源码级调试的定义,反正你使用kdb用单步跟踪时是可以看到源码也一行一行的自动走的,对

你怀疑有bug的地方进行查看,非常方便。
关于使用kdb谁说都没用,关键看文档,记住不要看其他任何第三方的文档(有很多误导),就看上面你的Documentation/kdb里的slides等文档,这才是最没有污染和最正宗的文档。





写篇文档给想要使用kgdb调试kernel或者driver module的新手

Who may read this document?
===========================
1. People who familiar with gdb but not never use kgdb
2. People who like to debug kernel or driver module using the gdb way.
Why to Using KGDB
=================
1. Want to debug kernel
2. Want to debug driver module
What’s hardware you needed to use KGDB
=======================================
1. Target system with have serial port
2. Host system with have serial port
3. Serial line
How to Debug Kernel using KGDB
==============================
1. Download kgdb patch for your kernel at
http://kgdb.linsyssoft.com/downloads

2. Host: cd /path/to/kernel/source/
3. Host: patch –p1 –i /path/to/patch/file
4. Host: make menuconfig, to confirm you choose kgdb support in KERNEL_HACKING
5. Host: make dep;make bzImage
6. Copy built bzImage to your target system.
7. Target: boot your target using the built bzImage with gdb gdbttyS=x gdbbaud=38400
you may add these parameters to your grub menu. Here ‘x’ is the index of your serial port used to connect your host such as 0,1 or 2.
8. Host: cd /path/to/kernel/source
9. Host: gdb vmlinux
10. Host gdb: set remotebaud 38400
11. Host gdb: target remote /dev/ttySx. Here ‘x’ is the index of your serial port used to connect your target.
How to Debug Driver Module using KGDB
=====================================
1. Host: build your driver module with –g option.
2. Copy your driver.o to your target system.
3. Reboot target with kernel build in kgdb.
4. Host gdb: Set breakpoint before kernel call module’s initialization function so we can debug module’s initialization function.
Kernel call module’s initialization in kernel/module.c: sys_init_module():mod->init().
5. Target: load your driver module using insmod and will stop at breakpoint set by 4.
6. Host gdb: p/x module_list
7. Host gdb: add-symbol-file /path/to/your/driver/module/sourcecode address
where address is the value of module_list+sizeof(module_list).
This command loads symbol file of your module so you can debug it.
8. As 7 have add the symbol file of your module, so you can set breakpoints to your source code such as module’s init function and enjoy the debugging.
linux驱动调试小结 近期被赶鸭子上架整linux上的驱动,折腾了好些天,趁着还有印象将自己搜罗的尝试的学到的记录一下,以备今后查阅 一、一些基础1.驱动文件形式 --> *.ko2.安装命令   --> insmod   卸载命令--> rmmod  都需要root权限 ,也可用modprobe3.其他可能用到的命令:           modinfo --  查看模块信息        阅读详情

相关推荐

KGDB使用

kgdb提供了一种使用 gdb调试 Linux 内核的机制。使用KGDB可以象调试普通的应用程序那样,在内核中进行设置断点、检查变量值、单步跟踪程序运行等操作。使用KGDB调试时需要两台机器,一台作为开发机(Development Machine),另一台作为目标机(Target Machine),两台机器之间通过串口或者以太网口相连。串口连接线是一根RS-232接口的电缆,在其内部两端的第2脚(TXD)与第3脚(RXD)交叉相连,第7脚(接地脚)直接相连。调试过程中,被调试的内核运行在目标机上,gdb调试

RZer的博客 1165

【linux】调试工具介绍

在Linux内核调试过程中,可以使用各种工具和技术来诊断和解决问题。以下是一些常用的Linux内核调试方法:printk:printk是Linux内核中的打印函数,可以在代码中插入打印语句来输出调试信息。这些信息将被发送到内核日志缓冲区,可以使用dmesg命令或/var/log/messages文件查看。kdb:kdb是Linux内核的调试器,可以在运行时对内核进行调试。它提供了命令行接口,可以查看和修改内核的状态、寄存器值、堆栈跟踪等信息。

墨染锦年的博客 1341

linux内核debug(二)在线调试内核kdb/kgdb工具使用及环境搭建

本文来详细讲一下,如何使用kgdb与kdb调试内核

文艺小少年的博客 805

VCS&Verdi:KDB文件的生成和导入

在复杂的设计中,很难在HDL或测试平台级别(如使用系统函数)找到与逻辑相关的错误。调试过程包括定位与错误相关的设计逻辑、隔离错误原因,并理解设计应该如何表现以及为何未按预期表现。设计和验证工程师需要复杂的工具来查找仿真器生成的数据中的错误。Verdi调试工具提供了全面的调试支持,适用于所有设计和验证流程。。

保持终身学习的能力,温故而知新 5944

37、使用 GDB 进行调试

本文介绍了如何使用 GDB 进行应用程序和内核代码的调试。内容包括核心转储的分析、GDB 查看核心文件的方法,以及使用不同用户界面(如 TUI、DDD 和 Eclipse)进行调试的技巧。同时,还探讨了通过 kgdb 和 kdb 进行内核调试的配置和操作步骤,并详细讲解了如何分析内核 Oops 消息以定位代码问题。适用于嵌入式开发和 Linux 内核调试的场景。

time3的博客 62

AXI VIP配置全指南:从报错到成功仿真的完整流程(Vivado 2023版)

本文详细解析了在Vivado 2023环境中配置AXI Verification IP(VIP)进行协议仿真的完整流程。针对常见的include和import报错问题,提供了具体的解决方案和代码示例,指导用户从IP核创建、参数化配置,到构建可工作的仿真测试平台,最终实现成功仿真。

gpt4scribbler的博客 233

Linux内核调试工具:Kdb应用指南

作者:胡风华   kdb是一个Linux系统的内核调试器,它是由SGI公司开发的遵循GPL许可证的开放源码调试工具。kdb嵌入在Linux内核中,为内核程序员提供调试手段。它适合于调试内核空间的程序代码,譬如进行设备驱动程序调试,内核模块的调试等。目前kdb支持包括x86(

xulin_2005的专栏 1439

人工势场法在自动驾驶避障中的实践与优化

本文深入探讨了人工势场法在自动驾驶避障中的核心原理与实践优化。通过解析引力与斥力模型,揭示了经典算法在局部最优和目标不可达等问题上的局限性,并重点介绍了改进斥力场函数、引入道路边界斥力及动态参数调整等关键优化策略,有效提升了该局部路径规划算法在复杂动态场景下的实用性与鲁棒性。

weixin_29208327的博客 926

Linux内核调试之如何用kdb调试

为了更加方便内核调试,社区开发了内核级的调试模块kdb和kgdb,通过它们可以实现对内核的在线调试。1、调试支持:KDB支持多进程、多线程调试,可以在多CPU上进行调试,同时支持几种核心调试技术,包括单步、断点、进程状态检查、运行状态检查、记录系统调用、跟踪系统调用等。

weixin_44458100的博客 1571

手把手教你用AirSim生成无人机训练数据集:RGB/深度图/分割图全攻略

本文详细介绍了如何使用AirSim仿真插件在UE4环境中生成无人机训练数据集,涵盖RGB、深度图和分割图等多种模态数据的采集与处理。通过实战指南,读者可以掌握环境配置、多模态数据采集、自动化流程设计及数据后处理等关键技术,为无人机视觉算法开发提供高质量训练数据。

weixin_29008805的博客 449

技术解析:ChangeFormer——基于Transformer的孪生网络在遥感变化检测中的创新应用

本文深入解析了ChangeFormer模型在遥感变化检测中的创新应用,该模型基于Transformer架构和孪生网络(Siamese Network),显著提升了变化检测的精度和效率。通过详细的技术实现和实战经验分享,展示了其在建筑物变化、森林监测等场景中的卓越表现,为相关领域的研究和应用提供了有力工具。

weixin_29102619的博客 496

linux 内核三种调试方法比较(gdb、kdb、kgdb)

1. kdb:只能在2.6版旧内核使用,需要打上补丁;优点是不需要两台机器进行调试,直接在本机进行操作。Kdb(Kernel Debug)是SGI公司开发的遵循GPL的内建Linux内核调试工具。标准的Linux内核不包括kdb,需要从ftp://oss.sgi.com/www/projects/kdb/download/ix86 下载对应标准版本内核的kdb补丁,对标准内核打补丁,然后,编译打过...

ARM-Linux 1万+

手把手教你学simulink(8.3)--实例:基于 Simulink 的自动驾驶汽车速度控制系统设计与仿真

基于 Simulink 的自动驾驶汽车速度控制系统设计与仿真。

MHD0815的博客 1208

linux kdb内核调试器,DDD的博客:内核调试器kdb与kgdb模式相互切换 - 哲思

自从kdb集成到内核后,调试内核就多了一种选择,可以选择仅需要目标机,自己调试自己的kdb,或选择需要额外一台机器来辅助调试的kgdb。引人kdb,也引发一个新功能需求,即调试器之间的切换选择,如从kdb模式切换到kgdb模式或者反过来。而且由于kdb和kgdb并不互斥,可在系统中同时存在,而kdb不需要额外的机器来辅助调试这一便利性,所以在kgdb和kdb同时被使能的情况下,系统调试器缺省设置为...

weixin_34355933的博客 451

量化交易 米筐 案例:市值因子选股策略

案例:市值因子的选股策略 1.结果 获得超额收益 年化 49% 2. 从股票中选择市值小的股票 选定财务数据筛选 进行每日调仓(多因子选股调仓 周期频率会小一些) 3. 代码 估值有关指标 # 在沪深300股票中,选出市值比较小的10只股票 # 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。 def init(context): # 沪深300组合 stocks = index_components('000300.XSHG') # 沪深3

廷益_飞鸟的博客 2311

【Unity-UGUI控件全面解析】| Layout自动布局组件详解

UGUI中有个自动布局组件Auto Layout,主要包含下面几个模块(点击可进入官方文档下查看描述): 自动布局 布局元素 (Layout Element) 水平布局组 (Horizontal Layout Group) 垂直布局组 (Vertical Layout Group) 网格布局组 (Grid Layout Group) 内容大小适配器 (Content Size Fitter) 自动布局系统 基于布局元素和布局控制器的概念。一个布局元素是具有矩形变换以及其他可选组件的游戏对象。布局元素对自身

努力前行,总会成为自己心中的那道光 2万+

kgdb+gdb+vmware调试内核,比kdb好用,因为可以用gdb来看栈,局部变量等

准备两台虚拟机,一台编译内核,编译后将vmlinux system.map拷贝到另一台在boot下建立软连接这样在调试端用gdb vmlinux还可以找到代码看代码 配置两台虚拟机的串口为pipe形式,名字相同,一个为server,一个为client被调试的虚拟机(client): 在grub中最后加kgdboc=ttyS0,115200 kgdbwaitserver端的虚拟机

2032

智能制造之物料详解

制造业业务系统中的物料流转贯穿需求、采购、生产到交付全流程,各系统协同实现精准追踪。需求阶段由CRM/ERP/PLM生成物料计划;采购入库阶段SCM/WMS/QMS完成采购质检;生产阶段MES/APS协调领料加工;成品交付阶段WMS/SCM处理出库物流。整个流程以BOM为蓝图,ERP为调度中心,通过数据联动实现物料状态、位置和数量的全链路可追溯。

cdfunlove的博客 654

Linux 内核调试子系统深度解析:KGDB 与 KDB

KGDB/KDB 子系统是 Linux 内核工程学的一个杰作。它巧妙地解决了在最底层、最脆弱的环境中进行复杂交互和控制的难题。通过理解其分层架构、SMP 协调机制、协议实现和安全考量,我们不仅能更有效地使用这些强大的调试工具,也能从中学习到构建高可靠、高复杂度系统的核心思想。

u011171245的博客 1360

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Using kgdb, kdb and the kernel debugger internals

Using kgdb, kdb and the kernel debugger internals

张同光 (Tongguang Zhang):Hello everyone ! 759

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

关于kdb和kgdb的合并

kgdb和kdb现在已经合并了。对于一个正在运行的kgdb而言,可以使用gdbmonitor命令来使用kdb命令。比如(gdb)gdb monitor ps -A就可以运行kdb的ps命令了。分析一下kdb补丁和合入主线的kdb有啥不同kdb跟kgdb合并之后,也可以使用kgdb的IO驱动(比如键盘),但是同时也kdb也丧失了一些功能,合并之后的kdb不在支持汇编级的源码调...

weixin_33895516的博客 380

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

GDB 调试 Linux 内核模块

与用户空间程序不同,内核模块直接操作硬件并管理系统资源,因此调试内核代码时,我们需要使用特定的工具和方法。然而,使用 GDB 调试内核模块,可以让我们深入了解内核的运行机制,查找和修复硬件驱动、内存管理等底层问题。掌握内核调试技术,不仅能提升你的系统级编程技能,还能让你在开发高性能、稳定的系统时游刃有余。调试内核就像修复一台复杂的机器:它是一个由无数细小部件组成的庞大系统,任何一处小问题都有可能导致系统的整体故障。KDB 是 Linux 内核的交互式调试器,允许你在内核崩溃时调试内核。

底层软件设计内幕 1389

OK6410A 开发板 (八) 85 linux-5.11 OK6410A kdb 调试 linux

kdb 已经和 kgdb 合入到内核的同一个模块,代码已经合并 CONFIG_KGDB_KDB=y // kgdboc=ttyS0,115200 不知道 需不需要这个??? TODO 在启动过程中会自动进入 在 挂载 procfs后手动 "echo g > /proc/sysrq-trigger" 进入 // 默认进入kdb kdb> 进入 kdb 交互式 shell 之后,可以使用 help 命令查看 kdb 支持的调试功能,并尝试使用之。 前面说过 kdb 和 kgdb 可

u011011827的博客 323

GDB 调试

嵌入式 linux 应用程序 和内核 gdb 调试

weixin_44579363的博客 2万+

KDB调试记录

最近发现我的内核调试方法除了printk就是触发内核panic的oops信息,调试手段太单一,就想着能不能像调试用户程序一样单步调试内核。网上找了一些资料,发现在linux2以后就合入了KDB/KGDB工具,可以单步调试内核,查看全部变量,局部变量等。它的主要功能是在系统挂起、无响应或进入锁死状态时,通过特定按键组合向内核发送指令,用于执行紧急操作,如安全重启、关机或收集调试信息。可以看到这里并没有g的sysrq_key_op,所以当我们echo g的时候没有任何响应。不过内核提供了动态注册key的功能。

weixin_42772031的博客 706

KDB调试Linux4.2.6内核过程记录

KDB调试内核代码步骤记录: 一、配置内核,内核版本为Linux4.2.6 Kernel hacking  ---> printk and dmesg options  ---> [*] Show timing information on printks (4) Default message log level (1-7) [ ] Delay each bo

yuanxinfei920的博客 963
上一篇: System.map文件
下一篇: diff和patch使用指南
bamboolsu
博客等级 码龄22年 200粉丝 394原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值