当前位置: 首页>>技术教程>>正文


如何调试挂起?

问题描述

我已经使用 Ubuntu 大约五年了,但我仍然无法让它在我想暂停的时候暂停。我可以编写一个风暴,以许多其他方式破解机器,但是当我试图让它挂起或调试挂起时,我会惨败。

我需要帮助。

我从哪里开始发现问题?我该怎么做才能修复它?我对此给予了赏金,因为我实际上已经为这个问题浪费了几个小时的时间,而且一直让我的电脑开着是很糟糕的。

症状:

  • 按下挂起使我的计算机进入一个光标闪烁的状态,风扇正在运行,似乎 HD 已关闭(我认为),我无法将其从该状态恢复(缺少硬重启)。

  • 可能相关:我的风扇即使在关机后仍保持开机状态,即便如此,我必须按住电源按钮五秒钟才能再次启动它。

  • 我不知道要查看哪些日志来调试问题,而且我想他们无论如何都会在重新启动时遭到核弹。

请,请帮助。这让我完全发疯,我已经和它一起生活了一年多。

最佳方法

https://wiki.ubuntu.com/UnderstandingSuspend

  • 最大的问题是图形硬件

  • 尝试在没有受限设备的情况下挂起(nvidia、fglrx)

  • 内核不知道如何处理图形设备

  • BIOS 知道如何恢复图形状态

    • 通过 16 位分段模式,C000:xxxx 包含可见的 64k 视频 ROM。

    • 在 C000:0003 开始​​执行,通常是 re-POSTs 视频 BIOS (/usr/sbin/vbetool post)

      • 在 64 位模式下更困难,因为需要模拟 16 位调用。

      • 一些内存在 3-4G 范围内,在仿真时需要重新映射以避免碰到映射在同一空间中的内核。 o 视频 BIOS 可能已将 POST 代码分页到 C000 窗口之外 o nvidia BIOS 重写 ROM 以返回停止 re-POSTing 尝试从控制台挂起(通过 /etc/acpi/sleep.sh)

    • 确保您已退出 Xorg(或使用 “force” 参数运行 sleep.sh)

    • 如果视频 BIOS 没有处于正常状态,返回 Xorg 可能会挂起硬件

    • 在简历上测试大写锁定(如果没有大写锁定,内核挂起)

    • 如果背光没有恢复,可能是视频 BIOS 没有重新初始化

    • 如果屏幕是空白的,但有背光,请尝试按 Enter 键或在虚拟终端之间切换

    • 尝试 single-user 模式(通过将 “single” 附加到 grub 内核引导选项)

    • 有关操作的详细信息,请尝试 bash -x /etc/acpi/sleep.sh >/root/sleep.log 2>&1

    • 查看与 /usr/share/acpi-support/*.config 中的设置匹配的 dmidecode 信息

    • 如果 single-user 模式控制台挂起或恢复失败

    • PM 跟踪 (echo “1” > /sys/power/pm_trace) 会将设备哈希写入系统计时器

    • 尝试暂停

    • 失败后,在重新启动时,检查 dmesg 输出中的 “device hash” 条目以跟踪在恢复期间挂起系统的设备。

    • 请注意,这将重置系统时钟,并且 fsck 会崩溃(“已经 31337 天没有 fsck”)。考虑 tune2fs -c 0 /dev/your/filesystems。

次佳方法

您可以找到很多指南/建议 herehere

根据您的描述,听起来好像您的 ACPI 工作不正常,或者内核驱动程序正在阻止完全挂起。第二个链接显示了如何处理此类问题。

第三种方法

症状:

  • 按下挂起使我的计算机进入一个光标闪烁的状态,风扇正在运行,似乎 HD 已关闭(我认为),我无法将其从该状态恢复(缺少硬重启)。

  • 可能相关:我的风扇即使在关机后仍保持开机状态,即便如此,我必须按住电源按钮五秒钟才能再次启动它。

  • 我不知道要查看哪些日志来调试问题,而且我想他们无论如何都会在重新启动时遭到核弹。


对于许多 Linux 问题,我访问的站点是 Arch Linux。以下是与您类似的关于 suspend/resume problems 的内容:

从挂起瞬间唤醒

对于某些带有 LynxPoint 和 LynxPoint-LP 芯片组的 Intel Haswell 系统,会报告挂起后的瞬时唤醒。它们与错误的 BIOS ACPI 实现以及 xhci_hcd 模块在引导期间如何解释它相关联。作为 work-around 报告的受影响系统被内核 case-by-case 添加到黑名单(名为 XHCI_SPURIOUS_WAKEUP )。 [ 2 ]

例如,如果在挂起期间插入 USB 设备并启用 ACPI 唤醒触发器,则可能会发生瞬时恢复。对于这样的系统,一个可行的 work-around,如果它还没有在黑名单上,就是禁用唤醒触发器。通过 USB 禁用唤醒的示例如下所述。 [ 3 ]

查看当前配置:

$ cat /proc/acpi/wakeup

Device  S-state   Status   Sysfs node
...
EHC1      S3    *enabled  pci:0000:00:1d.0
EHC2      S3    *enabled  pci:0000:00:1a.0
XHC       S3    *enabled  pci:0000:00:14.0

相关设备为 EHC1EHC2XHC (用于 USB 3.0)。要切换它们的状态,您必须以 root 身份将设备名称回显到文件中。

# echo EHC1 > /proc/acpi/wakeup
# echo EHC2 > /proc/acpi/wakeup
# echo XHC > /proc/acpi/wakeup

这应该会导致暂停再次工作。但是,此设置只是临时的,必须在每次重新启动时进行设置。要自动执行此操作,请查看 systemd#Writing unit files 。有关可能的解决方案和更多信息,请参阅 BBS thread


上面关于 Suspend/Resume 的整篇 Arch Linux 文章对于许多领域来说都是很好的参考:

1 Low level interfaces
    1.1 kernel (swsusp)
    1.2 uswsusp
2 High level interfaces
    2.1 systemd
3 Hibernation
    3.1 About swap partition/file size
    3.2 Required kernel parameters
        3.2.1 Hibernation into swap file
    3.3 Configure the initramfs
4 Troubleshooting
    4.1 ACPI_OS_NAME
    4.2 VAIO Users
    4.3 Suspend/hibernate doesn't work, or not consistently
    4.4 Wake-on-LAN
    4.5 Instantaneous wakeups from suspend

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/12668.html,未经允许,请勿转载。