Перейти к содержимому

内核崩了刷出三十几行日志,哪一行才是凶手? | 16 集内核课 第 2 集

DIYALL_AI

0:00 / 0:00

内核崩了刷出三十几行日志,哪一行才是凶手? | 16 集内核课 第 2 集

11 просмотров · 3 дн. назад
DIYALL_AI
2 подписчика
11 просмотров · 3 дн. назад
oops 刷出来三十几行:寄存器、调用栈、一堆十六进制。哪一行是凶手,哪一行是无关紧要的路人?这一集把它拆成四块逐字段读,再给一个可操作的方法:从 RIP 那行的「函数名+偏移」,一路定位到 .c 文件的某一行。 两个最容易搞错的地方重点讲:本机(核心内核)oops 和模块 oops 是两套解法,判据是 RIP 后面带不带 [模块名];oops 里那个 /size 是 kallsyms 报的虚高值,直接传给 faddr2line 会被拒解(本集实测:oops 印 0xff0,真实 0x33)。 实验是真的:insmod 一个空指针模块让内核真的 oops(先打现场,再按 oops=panic 升级成 panic),再用 objdump / faddr2line 把地址翻译回源码行,最后换修复版模块验证写入成功。 读懂崩溃日志是内核调试的基本功——现场都读不懂,后面的 ftrace、kprobe、kdump 更接不住。 章节 / Chapters 0:00 开场钩子 0:58 oops 和 panic 的区别 3:34 制造一个真实 oops 4:56 逐行拆解 + 地址翻译 14:50 延伸与踩坑 16:25 收尾 配套图文(oops 四区逐字段表 + error_code 位表 + Tainted 速查 + 差异判据表) 中文 → https://diyallai.com/blog/oops-reading English → https://diyallai.com/en/blog/oops-reading ★ 你机器上的输出一定和视频里不一样——寄存器值、地址、PID、偏移本来就不该一样。判断「我做对了没有」不要靠肉眼比对,看文章里的《差异判据表》。(例:RIP 里那个 +0x1c 会随 gcc 版本与内核配置变,重编一次内核它就可能变成别的值。) 「Linux 内核开发与调试」16 集:从搭环境开始,到 ftrace、kprobe、gdb、kdump、eBPF、死锁、字符设备、platform 驱动、内存分配、性能调优。 全部剧集与文字版 → https://diyallai.com/series/kernel 环境要求:Linux 主机 + root、qemu-system-x86_64,以及第 1 集编好的内核。 English: Reading Every Line of an oops — Linux Kernel Development & Debugging, Episode 2. Companion article (English) → https://diyallai.com/en/blog/oops-reading 本集配音由 AI 合成(本地部署的 TTS);画面为真实录屏,全部实验在 QEMU 中实跑。