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调试工具为内核开发者提供了强大的调试能力。通过合理配置和使用这些工具,开发者可以更高效地诊断和解决内核问题。本文介绍了从编译配置到实际使用的完整流程,希望能帮助您更好地利用这些调试工具进行内核开发工作。
登录后查看全文
热门项目推荐
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0133- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
GLM-5.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
MiniCPM-V-4.6这是 MiniCPM-V 系列有史以来效率与性能平衡最佳的模型。它以仅 1.3B 的参数规模,实现了性能与效率的双重突破,在全球同尺寸模型中登顶,全面超越了阿里 Qwen3.5-0.8B 与谷歌 Gemma4-E2B-it。Jinja00
MiniMax-M2.7MiniMax-M2.7 是我们首个深度参与自身进化过程的模型。M2.7 具备构建复杂智能体应用框架的能力,能够借助智能体团队、复杂技能以及动态工具搜索,完成高度精细的生产力任务。Python00
MusicFreeDesktop插件化、定制化、无广告的免费音乐播放器TypeScript00
热门内容推荐
最新内容推荐
项目优选
收起
暂无描述
Dockerfile
725
4.66 K
Ascend Extension for PyTorch
Python
597
749
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
425
376
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
992
984
Claude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed.
Get Started
Rust
921
133
昇腾LLM分布式训练框架
Python
160
188
暂无简介
Dart
968
246
deepin linux kernel
C
29
16
Oohos_react_native
React Native鸿蒙化仓库
C++
345
393
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.65 K
970