当软重启Linux内核挂起在“解压Linux …完成,启动内核”

我在我的自定义硬件上使用Linux内核3.0.21。

  • 当我第一次启动硬件,它成功启动。

  • 如果我正确地closures并重新启动硬件,它会成功启动。

但是,一旦系统运行,当我键入reboot命令重新启动内核并挂在

 Starting kernel ... Uncompressing Linux... done, booting the kernel. 

我不知道为什么我每次软重启都面临这个问题。 为了避免这种情况,我需要硬复位(closures电源并再次打开电源)。

为什么我面临这个问题? 内核中有没有清理function? 如何debugging这个问题?

是的,这听起来像在平台支持硬件的某个地方,你错过了一些逻辑来应对软重启。

添加清理代码并不能解决问题,因为系统可能会崩溃,然后软重启。

所以需要编写引导系统的代码来应对软重启的系统。

要进行调试,首先需要找出软重启过程中内核卡住的位置。 最简单的方法是使用硬件调试器。

另一种选择是读取启动代码,并尝试找出任何可能依靠冷重启工作的区域,例如。 希望TLB在引导或类似时被清除的代码。

听起来像在重新引导之前无法消除硬件。 可能的候选人是MMU,TLB,缓存或中断。 如果重新启用内核启动,内核启动可能会发生崩溃(这可能是内核在重新启动之前无法将其全部禁用,或者依赖于硬重置状态的启动加载程序,当然,重启)。

正如其他人所指出的那样,JTAG硬件调试探头只是您不能完成这一任务的唯一方法。

要开始调试,我已启用

 CONFIG_DEBUG_LL=y 

在内核构建。 这给了一些额外的调试启用…在挂断的情况下,succesfull启动的情况下,我比较日志和调试调整内核卡在哪里….以及为什么