首页
/ StarFive Linux内核调试指南:使用kgdb和kdb

StarFive Linux内核调试指南:使用kgdb和kdb

2025-06-19 11:09:33作者:尤辰城Agatha

前言

在Linux内核开发过程中,调试是一个至关重要的环节。本文将详细介绍如何在StarFive Linux内核中使用kgdb和kdb这两种强大的调试工具。通过本文,您将了解如何配置和使用这些工具来调试内核问题。

内核调试工具概述

StarFive Linux内核提供了两种主要的调试前端:

  1. kdb:一个简单的shell风格接口,可直接在系统控制台使用

    • 支持内存检查、寄存器查看、进程列表查看等功能
    • 可以设置断点进行基本的运行控制
    • 主要用于开发分析和问题诊断
  2. kgdb:一个源码级调试器

    • 与gdb配合使用调试Linux内核
    • 支持断点设置、单步执行等高级调试功能
    • 需要开发机和目标机两台设备配合使用

内核编译配置

基本配置要求

要启用内核调试功能,首先需要在编译时进行正确配置:

  1. 启用CONFIG_KGDB选项(位于"Kernel hacking → Kernel debugging"菜单)
  2. 建议启用CONFIG_DEBUG_INFO以包含调试符号信息
  3. 建议启用CONFIG_FRAME_POINTER以获得更准确的调用栈信息
  4. 考虑禁用CONFIG_STRICT_KERNEL_RWX以支持软件断点

典型配置示例

# CONFIG_STRICT_KERNEL_RWX is not set
CONFIG_FRAME_POINTER=y
CONFIG_KGDB=y
CONFIG_KGDB_SERIAL_CONSOLE=y

kdb特有配置

如需使用kdb,还需额外配置:

CONFIG_KGDB_KDB=y  # 启用kdb前端
CONFIG_KDB_KEYBOARD=y  # 如需使用键盘输入

内核启动参数配置

kgdboc参数

kgdboc(kgdb over console)是配置kgdb和kdb通信的主要机制:

基本语法:

kgdboc=[kms][[,]kbd][[,]serial_device][,baud]

常用配置示例:

  1. 仅使用串口:

    kgdboc=ttyS0,115200
    
  2. 使用键盘和串口:

    kgdboc=kbd,ttyS0,115200
    
  3. 仅使用键盘:

    kgdboc=kbd
    

运行时配置示例:

# 启用kgdboc
echo ttyS0 > /sys/module/kgdboc/parameters/kgdboc

# 禁用kgdboc
echo "" > /sys/module/kgdboc/parameters/kgdboc

其他重要参数

  1. kgdbwait:使内核在启动时等待调试器连接
  2. kgdbcon:允许在gdb中查看printk消息
  3. nokaslr:禁用地址空间随机化,便于符号解析
  4. kgdboc_earlycon:支持早期调试的控制台

使用kdb进行调试

串口调试快速入门

  1. 配置kgdboc:

    console=ttyS0,115200 kgdboc=ttyS0,115200 nokaslr
    
  2. 通过SysRq-G进入调试器:

    echo g > /proc/sysrq-trigger
    
  3. 常用kdb命令:

    • lsmod:显示加载的内核模块
    • ps:显示活动进程
    • bt:获取当前进程的调用栈
    • dmesg:查看内核日志缓冲区
    • go:继续执行内核

键盘调试快速入门

  1. 配置kgdboc使用键盘:

    kgdboc=kbd
    
  2. 通过键盘快捷键进入调试器:

    • 按住Alt
    • 按下并释放SysRq
    • 按下并释放g
    • 释放Alt

使用kgdb/gdb进行调试

要使用kgdb,必须首先通过kgdb I/O驱动程序激活它。基本使用流程:

  1. 在目标机上配置并加载kgdb I/O驱动
  2. 在开发机上使用gdb连接目标机
  3. 使用标准gdb命令进行调试

调试会话示例:

(gdb) target remote /dev/ttyS0
(gdb) break sys_open
(gdb) continue

调试技巧与注意事项

  1. 对于长时间调试会话,注意系统时间相关应用可能受到影响
  2. 调试完成后,使用go命令恢复内核执行或考虑重启系统
  3. 在调试图形相关问题时,可考虑启用kms(Kernel Mode Setting)集成
  4. 确保使用的串口线质量良好,避免通信问题

总结

StarFive Linux内核提供的kgdb和kdb调试工具为内核开发者提供了强大的调试能力。通过合理配置和使用这些工具,开发者可以更高效地诊断和解决内核问题。本文介绍了从编译配置到实际使用的完整流程,希望能帮助您更好地利用这些调试工具进行内核开发工作。

登录后查看全文
热门项目推荐

项目优选

收起
openHiTLS-examplesopenHiTLS-examples
本仓将为广大高校开发者提供开源实践和创新开发平台,收集和展示openHiTLS示例代码及创新应用,欢迎大家投稿,让全世界看到您的精巧密码实现设计,也让更多人通过您的优秀成果,理解、喜爱上密码技术。
C
53
466
kernelkernel
deepin linux kernel
C
22
5
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
349
381
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
7
0
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
133
186
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
878
517
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
336
1.1 K
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
180
264
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
612
60
note-gennote-gen
一款跨平台的 Markdown AI 笔记软件,致力于使用 AI 建立记录和写作的桥梁。
TSX
83
4