Linux 内核开发人员正在努力使调试早期启动问题(如 Kexec 故障)变得更加容易,因为目前处理此类情况可能会令人沮丧且耗时,因为在内核完全上线之前找出问题可能令人沮丧且耗时。
星期二发出的是 x86/boot 拉取请求,其中包含此方向的初始工作,以增强早期启动调试体验。x86/boot 摘要说明:
“一个大型的、参与其中的准备系列,为添加 relocate_kernel 的异常处理铺平了道路 – 这将是一个调试工具,在现场帮助调试一个非常难以调试的早期启动错误。加上 David Woodhouse 在此过程中发现的各种清理和修复。
Amazon/AWS 的 David Woodhouse 在最初的补丁系列中进一步阐述了 relocate_kernel 的异常处理:
“调试 kexec 失败是痛苦的,因为在执行关键的 relocate_kernel() 函数时出现的任何错误往往只会导致三重错误。因此,我生命中的*几周*我无法挽回。在删掉了一些东西供自己使用后,我想我应该分享它……
添加一个 CONFIG_KEXEC_DEBUG 选项,该选项在该环境中设置一个普通的异常处理程序,并输出到 early_printk 串行控制台(如果已配置)。目前仅支持基于 I/O 的 8250 串行端口,但可以扩展。
当我们在这里时,请稍微清理一下代码并修复一些其他问题。最值得注意的是,在 KEXEC_PRESERVE_CONTEXT 调用后返回内核的途中加载合适的 GDT,而不是信任被调用的代码这样做。并且(v4 中的新功能)修复了 PTI 和 identmap 代码的交互,以便它不会在分配给 PGD 的 4KiB 区域的末尾涂鸦,期望那里有一个用户空间 PGD。
因此,对于那些必须处理调试早期引导内核问题的人来说,未来会有一些增强功能,以使其不那么痛苦。这些初始补丁已合并为正在开发的 Linux 6.14 内核。
转自 Linux 6.14 Working To Make It Less Painful Debugging Early Boot Issues – Phoronix
凡是不提‘延迟分配’的,就不是真的在说linux内存。