arm linux内核源码级调试器kgdb配置与使用

2024-03-04 01:48

本文主要是介绍arm linux内核源码级调试器kgdb配置与使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0x1 介绍

  kgdb是源码级调试器,与gdb配合调试linux kenrel,就像使用gdb调试应用程序一样,停止内核运行,可以查看内存,变量和调用栈信息。它可以在源码处设置断点,进行单步调试,函数进入等。
  kgdb需要两台机器,目标机和调试主机。调试主机运行gdb时加载含有符号表的vmlinux,调试运行时的目标机内核,gdb指定连接参数连接到kgdb,需要通过目标架构内核中的kgdb I/O modules进行连接,可以是rs232或以太网。

0x2 使用方法

0x21 内核配置

  CONFIG_KGDB使能KGDB
  Kernel hacking —>
    [*] KGDB: kernel debugger —>

  CONFIG_KGDB_SERIAL_CONSOLE选项确定串口为KGDB的I/O modules driver
  Kernel hacking —>
    [*] KGDB: kernel debugger —>
      <*> KGDB: use kgdb over the serial console(kgdboc)
  
  CONFIG_DEBUG_RODATA选项会标记某些内存区域为只读属性,影响软件断点的使用,这时候需要关闭。如果处理器支持硬件断点,该选项可以打开
  System Type —>
    [ ] Make kernel text and rodata read-only

  CONFIG_FRAME_POINTER选项更好的支持栈回溯,该选项依赖于CONFIG_HAVE_FUNCTION_GRAPH_TRACER
  Kernel hacking —>
    [*] Tracers —>
      [*] Kernel Function Tracer
      [*] Kernel Function Graph Tracer
  CONFIG_HAVE_FUNCTION_GRAPH_TRACER选中后CONFIG_FRAME_POINTER默认选中

  CONFIG_DEBUG_INFO选项在内核中加入调试信息
  Kernel hacking —>
    Compile-time checks and compiler options —>
      [*] Compile the kernel with debug info

  CONFIG_KALLSYMS选项可以在运行时通过name访问符号信息
  General setup —>
    [*] Configure standard kernel features (expert users) —>
       -*- Load all symbols for debugging/ksymoops

#CONFIG_DEBUG_RODATA is not set
CONFIG_KGDB=y
CONFIG_KGDB_SERIAL_CONSOLE=y
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
CONFIG_FRAME_POINTER=y
CONFIG_DEBUG_INFO=y
CONFIG_KALLSYMS=y

0x22 激活

  内核启动参数:
  kgdboc=<tty-device>,[baud]
  示例1:
  添加到内核引导参数

kgdboc=ttyAMA0,115200

  示例2:
  运行时激活

echo ttyAMA0 > /sys/module/kgdboc/parameters/kgdboc

  运行时关闭

echo "" > /sys/module/kgdboc/parameters/kgdboc

0x23 触发

  发生oops或fault触发kgdb。或者手动触发kgdb,手动进入命令:

echo g > /proc/sysrq-trigger

0x3 qemu参数

清单 3-1. qmeu运行时 ttyAMA0作为服务器通信IO,控制台转换为tcp服务器

qemu-system-arm -M vexpress-a9 \ -m 512M -kernel ~/src/linux/kernel/vex

这篇关于arm linux内核源码级调试器kgdb配置与使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/771640

相关文章

Python解析器安装指南分享(Mac/Windows/Linux)

《Python解析器安装指南分享(Mac/Windows/Linux)》:本文主要介绍Python解析器安装指南(Mac/Windows/Linux),具有很好的参考价值,希望对大家有所帮助,如有... 目NMNkN录1js. 安装包下载1.1 python 下载官网2.核心安装方式3. MACOS 系统安

CSS @media print 使用详解

《CSS@mediaprint使用详解》:本文主要介绍了CSS中的打印媒体查询@mediaprint包括基本语法、常见使用场景和代码示例,如隐藏非必要元素、调整字体和颜色、处理链接的URL显示、分页控制、调整边距和背景等,还提供了测试方法和关键注意事项,并分享了进阶技巧,详细内容请阅读本文,希望能对你有所帮助...

Linux find 命令完全指南及核心用法

《Linuxfind命令完全指南及核心用法》find是Linux系统最强大的文件搜索工具,支持嵌套遍历、条件筛选、执行动作,下面给大家介绍Linuxfind命令完全指南,感兴趣的朋友一起看看吧... 目录一、基础搜索模式1. 按文件名搜索(精确/模糊匹配)2. 排除指定目录/文件二、根据文件类型筛选三、时间

使用Folium在Python中进行地图可视化的操作指南

《使用Folium在Python中进行地图可视化的操作指南》在数据分析和可视化领域,地图可视化是一项非常重要的技能,它能够帮助我们更直观地理解和展示地理空间数据,Folium是一个基于Python的地... 目录引言一、Folium简介与安装1. Folium简介2. 安装Folium二、基础使用1. 创建

Nginx配置location+rewrite实现隐性域名配置

《Nginx配置location+rewrite实现隐性域名配置》本文主要介绍了Nginx配置location+rewrite实现隐性域名配置,包括基于根目录、条件和反向代理+rewrite配置的隐性... 目录1、配置基于根目录的隐性域名(就是nginx反向代理)2、配置基于条件的隐性域名2.1、基于条件

Linux配置IP地址的三种实现方式

《Linux配置IP地址的三种实现方式》:本文主要介绍Linux配置IP地址的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录环境RedHat9第一种安装 直接配置网卡文件第二种方式 nmcli(Networkmanager command-line

Java中Runnable和Callable的区别和联系及使用场景

《Java中Runnable和Callable的区别和联系及使用场景》Java多线程有两个重要的接口,Runnable和Callable,分别提供一个run方法和call方法,二者是有较大差异的,本文... 目录一、Runnable使用场景二、Callable的使用场景三、关于Future和FutureTa

Spring 中 BeanFactoryPostProcessor 的作用和示例源码分析

《Spring中BeanFactoryPostProcessor的作用和示例源码分析》Spring的BeanFactoryPostProcessor是容器初始化的扩展接口,允许在Bean实例化前... 目录一、概览1. 核心定位2. 核心功能详解3. 关键特性二、Spring 内置的 BeanFactory

使用EasyExcel实现简单的Excel表格解析操作

《使用EasyExcel实现简单的Excel表格解析操作》:本文主要介绍如何使用EasyExcel完成简单的表格解析操作,同时实现了大量数据情况下数据的分次批量入库,并记录每条数据入库的状态,感兴... 目录前言固定模板及表数据格式的解析实现Excel模板内容对应的实体类实现AnalysisEventLis

使用国内镜像源优化pip install下载的方法步骤

《使用国内镜像源优化pipinstall下载的方法步骤》在Python开发中,pip是一个不可或缺的工具,用于安装和管理Python包,然而,由于默认的PyPI服务器位于国外,国内用户在安装依赖时可... 目录引言1. 为什么需要国内镜像源?2. 常用的国内镜像源3. 临时使用国内镜像源4. 永久配置国内镜