内核启动卡住与Panic问题实战指南
📚 共计 30 章节
第1章
内核启动流程全景
从BIOS/UEFI到init进程的完整链路,理解启动卡住和panic发生的宏观阶段。
宏观
阶段
第2章
内核解压与入口
vmlinuz解压、start_kernel函数入口,早期串口调试环境的搭建。
解压
串口
第3章
早期内核初始化陷阱
setup_arch、trap_init、mm_init等早期函数中的常见卡住点。
陷阱
卡住
第4章
中断与定时器初始化
local_irq_enable的时机、时钟中断丢失导致的启动hang。
中断
时钟
第5章
控制台与printk调试
early_printk、printk实现机制、console_loglevel设置、dmesg查看技巧。
printk
dmesg
第6章
内核配置裁剪问题
编译选项导致驱动缺失、SMP/UP配置错误、PREEMPT配置不当。
Kconfig
裁剪
第7章
设备树(Device Tree)解析
DTB加载、解析失败、reg属性错误、中断控制器配置错误。
DTB
中断
第8章
PCIe子系统初始化
PCI总线扫描、设备枚举、BAR空间分配失败、AER错误处理。
PCIe
BAR
第9章
内存管理初始化
memblock分配器、伙伴系统建立、SLUB分配器初始化、CMA区域配置。
memblock
SLUB
第10章
调度器初始化
sched_init、cgroup设置、RT throttling、idle线程创建失败。
调度
idle
第11章
VFS与根文件系统挂载
rootfs准备、initramfs加载、块设备驱动、root=参数错误。
VFS
rootfs
第12章
init进程启动
kernel_init、用户空间第一个进程、/sbin/init缺失、SELinux策略阻塞。
init
SELinux
第13章
内核Panic机制详解
panic函数调用链、oops信息解读、panic_timeout、kdump配置。
Panic
kdump
第14章
Oops信息分析
寄存器状态、栈回溯、指令指针定位、模块符号解析。
Oops
栈回溯
第15章
内核Oops常见模式
NULL指针解引用、use-after-free、栈溢出、死锁。
NULL
死锁
第16章
Kdump与Crash工具
kdump原理、crash工具使用、vmcore分析、log提取。
kdump
crash
第17章
KGDB调试
内核源码级调试、断点设置、单步执行、远程调试环境搭建。
KGDB
断点
第18章
ftrace与trace-cmd
function tracer、function_graph、irqsoff、wakeup tracer使用。
ftrace
trace-cmd
第19章
动态调试(dynamic debug)
pr_debug开启、模块级调试、文件级调试、函数级调试。
dyndbg
pr_debug
第20章
内核锁与并发问题
spinlock、mutex、rwsem死锁检测、lockdep使用、RCU stall。
lockdep
RCU
第21章
内存踩踏与KASAN
KASAN原理、out-of-bounds检测、use-after-free检测、性能开销。
KASAN
内存
第22章
UBSAN与KCSAN
未定义行为检测、数据竞争检测、KCSAN配置与报告解读。
UBSAN
KCSAN
第23章
驱动加载失败分析
module_init顺序、依赖缺失、probe失败、resource冲突。
驱动
probe
第24章
电源管理相关问题
suspend/resume卡住、cpuidle、cpufreq、ACPI D-state。
PM
ACPI
第25章
文件系统损坏与恢复
超级块损坏、journal回放失败、fsck修复、只读挂载。
fsck
journal
第26章
网络栈初始化
net_dev_init、协议注册、网卡驱动probe、IP配置、DHCP超时。
网络
DHCP
第27章
SMP与CPU热插拔
CPU bringup失败、cpu_online_mask、cpu_stop、stop_machine。
SMP
热插拔
第28章
initramfs制作与调试
cpio格式、init脚本、busybox、设备节点创建、模块加载。
initramfs
busybox
第29章
内核启动参数详解
console、earlycon、root、init、quiet、debug、ignore_loglevel。
cmdline
参数
第30章
实战案例复盘
三个真实内核启动panic案例的完整分析过程与解决方案。
实战
复盘