StarFive Linux内核调试指南:使用kgdb和kdb
2025-06-19 14:56:02作者:尤辰城Agatha
前言
在Linux内核开发过程中,调试是一个至关重要的环节。本文将详细介绍如何在StarFive Linux内核中使用kgdb和kdb这两种强大的调试工具。通过本文,您将了解如何配置和使用这些工具来调试内核问题。
内核调试工具概述
StarFive Linux内核提供了两种主要的调试前端:
-
kdb:一个简单的shell风格接口,可直接在系统控制台使用
- 支持内存检查、寄存器查看、进程列表查看等功能
- 可以设置断点进行基本的运行控制
- 主要用于开发分析和问题诊断
-
kgdb:一个源码级调试器
- 与gdb配合使用调试Linux内核
- 支持断点设置、单步执行等高级调试功能
- 需要开发机和目标机两台设备配合使用
内核编译配置
基本配置要求
要启用内核调试功能,首先需要在编译时进行正确配置:
- 启用
CONFIG_KGDB选项(位于"Kernel hacking → Kernel debugging"菜单) - 建议启用
CONFIG_DEBUG_INFO以包含调试符号信息 - 建议启用
CONFIG_FRAME_POINTER以获得更准确的调用栈信息 - 考虑禁用
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]
常用配置示例:
-
仅使用串口:
kgdboc=ttyS0,115200 -
使用键盘和串口:
kgdboc=kbd,ttyS0,115200 -
仅使用键盘:
kgdboc=kbd
运行时配置示例:
# 启用kgdboc
echo ttyS0 > /sys/module/kgdboc/parameters/kgdboc
# 禁用kgdboc
echo "" > /sys/module/kgdboc/parameters/kgdboc
其他重要参数
kgdbwait:使内核在启动时等待调试器连接kgdbcon:允许在gdb中查看printk消息nokaslr:禁用地址空间随机化,便于符号解析kgdboc_earlycon:支持早期调试的控制台
使用kdb进行调试
串口调试快速入门
-
配置kgdboc:
console=ttyS0,115200 kgdboc=ttyS0,115200 nokaslr -
通过SysRq-G进入调试器:
echo g > /proc/sysrq-trigger -
常用kdb命令:
lsmod:显示加载的内核模块ps:显示活动进程bt:获取当前进程的调用栈dmesg:查看内核日志缓冲区go:继续执行内核
键盘调试快速入门
-
配置kgdboc使用键盘:
kgdboc=kbd -
通过键盘快捷键进入调试器:
- 按住
Alt - 按下并释放
SysRq键 - 按下并释放
g键 - 释放
Alt
- 按住
使用kgdb/gdb进行调试
要使用kgdb,必须首先通过kgdb I/O驱动程序激活它。基本使用流程:
- 在目标机上配置并加载kgdb I/O驱动
- 在开发机上使用gdb连接目标机
- 使用标准gdb命令进行调试
调试会话示例:
(gdb) target remote /dev/ttyS0
(gdb) break sys_open
(gdb) continue
调试技巧与注意事项
- 对于长时间调试会话,注意系统时间相关应用可能受到影响
- 调试完成后,使用
go命令恢复内核执行或考虑重启系统 - 在调试图形相关问题时,可考虑启用kms(Kernel Mode Setting)集成
- 确保使用的串口线质量良好,避免通信问题
总结
StarFive Linux内核提供的kgdb和kdb调试工具为内核开发者提供了强大的调试能力。通过合理配置和使用这些工具,开发者可以更高效地诊断和解决内核问题。本文介绍了从编译配置到实际使用的完整流程,希望能帮助您更好地利用这些调试工具进行内核开发工作。
登录后查看全文
热门项目推荐
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
MiniMax-M2.7MiniMax-M2.7 是我们首个深度参与自身进化过程的模型。M2.7 具备构建复杂智能体应用框架的能力,能够借助智能体团队、复杂技能以及动态工具搜索,完成高度精细的生产力任务。Python00- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
HY-Embodied-0.5这是一套专为现实世界具身智能打造的基础模型。该系列模型采用创新的混合Transformer(Mixture-of-Transformers, MoT) 架构,通过潜在令牌实现模态特异性计算,显著提升了细粒度感知能力。Jinja00
LongCat-AudioDiT-1BLongCat-AudioDiT 是一款基于扩散模型的文本转语音(TTS)模型,代表了当前该领域的最高水平(SOTA),它直接在波形潜空间中进行操作。00
项目优选
收起
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
663
4.27 K
deepin linux kernel
C
28
15
Ascend Extension for PyTorch
Python
506
612
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
941
868
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
394
292
暂无简介
Dart
911
219
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.54 K
894
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
124
198
昇腾LLM分布式训练框架
Python
142
168
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
1.07 K
557