Linux内核在Pentium 4上的“切换到时钟源tsc”处挂起


11

硬件:Dell Dimension 4500S:i845G,奔腾4,现货+ 2GB RAM和最新的(大约于2002年)BIOS更新。

我一直在从源代码构建Linux系统,到目前为止,该书是LFS 7.0。我构建的第一个内核可以正常工作,但是有很多绒毛和膨胀,所以我现在针对目标硬件优化内核(请参见上文)。

我最新的配置尝试以及一些反复的试验和错误尝试一直挂在printk的“切换到clocksource tsc”语句上。我的“好”内核从未遇到过问题……这是3.1.0 btw版本。两者都是从同一个源代码树,没有补丁,建make mrpropermake menuconfig等等,所以很明显,我只是缺少一些关键的CONFIG_XXX标志。

我已经盯着这个问题呆了一天多了,我建立了知道多少次但无济于事的内核。

我发现有趣的一件事是获得的良好内核:

# cat /sys/devices/system/clocksource/clocksource0/current_clocksource
tsc

另外,了解它可能会很有用。

# cat /sys/devices/system/clocksource/clocksource0/available_clocksource
tsc acpi_pm

我尝试了使用各种选项进行构建配置,但是目前我不记得任何细节,所以请不要问。通过搜索,我发现并测试了几个内核参数,例如clocksource=pitnotsc,但是所有这些参数也都失败了。再一次,我希望我写下迄今为止我已经尝试过的每件事,事后回想...

大多数论坛示例都是针对2.x内核的,并且通过一些不同的引导选项得以解决,但我的好内核仅使用root=/dev/sdaX ro。因此,我知道如果我能找到正确的构建配置,那么我对这种硬件和内核3.1.0的组合很满意。

而且,大多数发布了类似问题的人都说,几分钟后,系统将继续加载,一切都变了。我已经让它闲置了足够长的时间来煮晚餐,但它仍然没有恢复加载。

我希望你们中的一位大师能够读到这句话,然后说:“是的,我刚刚在我的P4恐龙上设置了CONFIG_XXX = y,效果很好。” :)

让我知道您需要我尝试或检查的内容,我们将很乐意发布结果。


@tripleee我在哪里可以查看该信息...密切投票的原因?
rfmodulator 2012年

也许您做不到,您的声誉可能不足。无论如何,由于这与编程无关,因此有意义的做法是,但只需要多加一些票即可。我也会添加我的。
2012年

我在奔腾4的新内核中也遇到了类似的问题。如果禁用超线程,一切都会正常。花了两个晚上的调试时间,不确定细节。
choroba 2012年

@choroba帮noht不了我。让我知道您是否还有其他想法。
rfmodulator 2012年

实际上,我必须在BIOS级别关闭ht或指定acpi=off
choroba 2012年

Answers:


8

通过快速搜索,该问题似乎有很多可能的原因,并且似乎表明以下事实:您的主板错误地使用了新内核的时钟源默认值。

某些人有用的一个建议是使用clocksource=hpetclocksource=acpi_pm

另一个线程中,有人用修复了此问题clocksource=jiffies,另一个人建议尝试noapicnolapic,另一个人在BIOS中关闭acpi,还有一个人指责Synaptics触摸板并通过删除Xorg.conf解决了他的问题。

一位内核构建器通过不使用fbcondecor来重新编译initrd来解决了他的问题。

希望这会有所帮助,因为看来此问题可能有很多原因。


感谢您的回答,但是我正在寻找内核构建配置选项,这些选项将导致(或防止)我观察到的启动时挂起,而不是变通。我尝试了各种论坛线程中提到的所有relavent引导参数(clocksource=no*等),但没有任何效果。我做了这些尝试以试图缩小我的实际问题。我已经有一个可以完美启动的内核,并且没有从同一源代码树中构建的任何特殊参数(除了root=和之外ro),但是该内核包含的我不需要的东西比我需要的东西还要多...
rfmodulator

...除了一个CONFIG_可以解决我的问题的关键标志。
rfmodulator 2012年

您的问题是否可能是您关闭了太多的内核选项?
harrymc

精确地 :)这就是我正在寻找的答案,我禁用了实际需要的功能。我已经完成了几次,结果没有变化。
rfmodulator 2012年

我帮不了你一个魔咒。看来您当前的时钟源是acpi_pm,但是您需要深入研究内核的源,才能找到所使用的内核配置。另一个选择是返回有效的配置,并逐步关闭选项,以定位问题。为了“振作起来”,我也可以说这可能不是一个选择,而是几个选择,这意味着冲突,无效的配置组合或未记录的依赖性。
harrymc

0

我在这里遇到了完全相同的问题,并阅读了很多。@harrymc做了一个很好的总结。

我将添加我从研究中学到的两件事:

  • 问题来自您的Linux内核,该内核不知道如何处理处理器,因为它无法弄清楚您的处理时钟是多少。您可以通过检出内核引导日志来观察此情况。看来内核正在尝试测量您的处理时钟(对我来说,它就像“ 2997.1333”,但每次启动都更改为“ 2997.1445”,“ 2997.1379”等)。

  • 经过很多尝试之后,我终于来到这里,了解了BIOS。我的是GYGABITE UEFI。我将参数设置回“优化的默认设置”,并将“英特尔虚拟化技术”设置为“启用”。

现在,一切对我来说都恢复了正常!希望这会有所帮助。


0

我花了几分钱,不确定这是否很普遍,但是我能够通过在BIOS中禁用“高精度计时器”来使Ubuntu正常工作。我的mb是技嘉z77x-d3h


OP的系统不支持高精度事件计时器。它是在2005年推出的,原始海报的系统要早几年。
ChrisInEdmonton

-2

我通过添加以下kernelparameter解决了该问题:

noapic

5
欢迎来到超级用户。您能否通过解释这样做/如何解决OP的问题来扩展答案?
我说恢复莫妮卡

没关系,只是玩弄内核参数。
基洛
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.