我在自定义硬件上使用Linux内核3.0.21。
当我第一次启动硬件时,它成功启动了。
如果我正确关闭并再次启动硬件,它会成功启动。
但是一旦系统运行起来,当我输入reboot
命令重启内核并挂起
Starting kernel ...
Uncompressing Linux... done, booting the kernel.
我不知道为什么我在每次软重启时面对这个问题。为避免这种情况,我需要硬重置(关闭电源并再次打开电源)。
为什么我要面对这个问题? 内核中是否缺少任何清理功能? 如何调试此问题?
答案 0 :(得分:2)
是的,这听起来像平台中的某个地方支持你的硬件,你缺少一些逻辑来应对软重启。
添加清理代码无法解决问题,因为系统可能会崩溃,然后再软启动。
因此,需要编写启动系统的代码以应对软重启的系统。
要调试,首先需要找出内核在软重启过程中遇到的问题。最简单的方法是使用硬件调试器。
另一种选择是通读启动代码并尝试发现可能依赖冷启动工作的任何区域,例如。期望TLB在启动时或类似情况下被清除的代码。
答案 1 :(得分:2)
在重新启动之前听起来像是无法中和硬件。可能的候选者是MMU,TLB,缓存或中断。崩溃将在内核启动的早期发生,当它们被重新启用时(这可能是内核未能在重新启动之前将它们全部禁用,或者引导加载程序依赖于硬重置状态,当然你没有软件 - 重启)。
正如其他人所指出的那样,JTAG硬件调试探测器只是你走到这一点底部的唯一方法。
答案 2 :(得分:0)
开始调试我已启用
CONFIG_DEBUG_LL=y
在内核构建中。这给了一些额外的调试启用...在挂断情况下和成功的启动情况下我正在比较日志和调试调整ma内核被困的地方....以及为什么