Linux内核分析之基础知识-7
第7章:调试技巧
诊断和分析内核启动问题的方法
本章概述
内核启动问题可能发生在任何阶段,从早期汇编代码到用户空间启动。本章提供各种调试技术和工具来诊断这些问题。
调试阶段划分
1 | ┌─────────────────────────────────────────────────────────────┐ |
7.1 早期调试技术
7.1.1 earlyprintk 和 earlycon
1 | # x86_64 earlyprintk |
7.1.2 调试级别控制
1 | # 内核日志级别 |
7.1.3 启用调试选项
1 | # 调试选项配置 |
7.2 QEMU 调试
7.2.1 QEMU 基础调试
1 | # x86_64 QEMU 调试 |
7.2.2 GDB 连接和调试
1 | # 启动 GDB |
7.2.3 GDB Python 扩展
1 | # gdb 脚本示例 |
7.3 ftrace 跟踪
7.3.1 ftrace 基础
1 | # 挂载 debugfs |
7.3.2 trace-cmd 工具
1 | # 记录启动过程 |
7.3.3 启动时跟踪
1 | # 内核参数 |
7.4 initcall 调试
7.4.1 initcall 时间分析
1 | # 启用 initcall 时间 |
7.4.2 延迟初始化
1 | # 延迟 initcall |
7.5 crash/kdump 分析
7.5.1 配置 kdump
1 | # 1. 保留崩溃内存 |
7.5.2 使用 crash 分析
1 | # 分析 vmcore |
7.5.3 分析示例
1 | # 查找崩溃原因 |
7.6 ARM64 特定调试
7.6.1 ARM64 串口调试
1 | # U-Boot 环境变量设置 |
7.6.2 ARM64 JTAG 调试
1 | # 硬件要求 |
7.7 性能分析
7.7.1 启动性能分析
1 | # initcall 时间分析 |
7.7.2 perf 分析
1 | # 启动时 perf 记录 |
7.8 常见问题和解决方案
7.8.1 启动卡住
1 | 症状: 系统启动到某处停止 |
7.8.2 内核恐慌
1 | 症状: 内核崩溃并重启 |
7.8.3 设备检测失败
1 | 症状: 设备未被识别 |
7.9 调试工具清单
调试工具总结
| 工具 | 用途 | 阶段 |
|---|---|---|
| QEMU | 虚拟化调试 | 所有 |
| GDB | 源码级调试 | 汇编/C |
| crash | 崩溃分析 | 运行时 |
| ftrace | 函数跟踪 | 内核 |
| trace-cmd | 事件跟踪 | 内核 |
| perf | 性能分析 | 内核 |
| SystemTap | 动态插桩 | 内核 |
| eBPF | 运行时跟踪 | 内核 |
| JTAG | 硬件调试 | 早期 |
实用脚本
1 |
|
7.10 本章小结
调试策略
1 | ┌─────────────────────────────────────────────────────────────┐ |
快速参考
1 | # 添加详细日志 |
- Title: Linux内核分析之基础知识-7
- Author: 韩乔落
- Created at : 2026-01-08 02:47:13
- Updated at : 2026-01-19 13:40:35
- Link: https://jelasin.github.io/2026/01/08/Linux内核分析之基础知识-7/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments