数周以来,我一直尝试在安装有 Ubuntu 服务器 13.04 的机器上让 WOL 运行,但似乎不起作用。
我注意到,当我使用“sudo pm-suspend”或通过桌面 GUI 暂停服务器时,NIC 卡会关闭。也就是说,网络端口上没有闪烁的指示灯。我不知道这是否是问题所在,但在我的 中/var/log/syslog
,我还看到我的以太网不是具有“由 ACPI 启用系统唤醒”的 PCI 之一:
Oct 2 16:46:10 JAMFS1 kernel: [26462.745615] PM: suspend of devices complete after 519.955 msecs
Oct 2 16:46:10 JAMFS1 kernel: [26462.745743] PM: late suspend of devices complete after 0.126 msecs
Oct 2 16:46:10 JAMFS1 kernel: [26462.745953] ehci-pci 0000:00:1d.0: System wakeup enabled by ACPI
Oct 2 16:46:10 JAMFS1 kernel: [26462.761576] ehci-pci 0000:00:1a.0: System wakeup enabled by ACPI
Oct 2 16:46:10 JAMFS1 kernel: [26462.793491] xhci_hcd 0000:00:14.0: System wakeup enabled by ACPI
Oct 2 16:46:10 JAMFS1 kernel: [26462.809491] PM: noirq suspend of devices complete after 63.784 msecs
Oct 2 16:46:10 JAMFS1 kernel: [26462.809695] ACPI: Preparing to enter system sleep state S3
.......
Oct 2 16:46:10 JAMFS1 kernel: [26463.464575] ACPI: Waking up from system sleep state S3
Oct 2 16:46:10 JAMFS1 kernel: [26463.510511] xhci_hcd 0000:00:14.0: System wakeup disabled by ACPI
Oct 2 16:46:10 JAMFS1 kernel: [26463.542498] ehci-pci 0000:00:1a.0: System wakeup disabled by ACPI
Oct 2 16:46:10 JAMFS1 kernel: [26463.574474] ehci-pci 0000:00:1d.0: System wakeup disabled by ACPI
Oct 2 16:46:10 JAMFS1 kernel: [26463.590562] PM: noirq resume of devices complete after 125.527 msecs
Oct 2 16:46:10 JAMFS1 kernel: [26463.590650] PM: early resume of devices complete after 0.071 msecs
但是根据“cat /proc/acpi/wakeup”,我的以太网卡应该启用:
Device S-state Status Sysfs node
USB1 S3 *disabled
RP01 S4 *enabled pci:0000:00:1c.0
RP03 S4 *enabled pci:0000:00:1c.2
GLAN S4 *disabled
EHC1 S4 *enabled pci:0000:00:1d.0
EHC2 S4 *enabled pci:0000:00:1a.0
XHC S4 *enabled pci:0000:00:14.0
HDEF S4 *enabled pci:0000:00:1b.0
PEG0 S4 *disabled
PEGP S4 *disabled
从我的“lspci -tv”中,您可以看到“pci:0000:00:1c.2”是 Atheros 以太网卡:
+-14.0 Intel Corporation Lynx Point USB xHCI Host Controller
+-16.0 Intel Corporation Lynx Point MEI Controller #1
+-1a.0 Intel Corporation Lynx Point USB Enhanced Host Controller #2
+-1b.0 Intel Corporation Lynx Point High Definition Audio Controller
+-1c.0-[01]--
+-1c.2-[02]----00.0 Qualcomm Atheros QCA8171 Gigabit Ethernet
+-1d.0 Intel Corporation Lynx Point USB Enhanced Host Controller #1
+-1f.0 Intel Corporation Lynx Point LPC Controller
我还将其设置/sys/class/net/p2p1/device/power/wakeup
为“启用”。以及运行sudo ethtool -s p2p1 wol g
并将其插入到我的/etc/rc.local
我已经在 ASRock Bios 中启用了等效的 LAN/PCI 唤醒。
ethtool p2p1
(p2p1 是我的 Qualcomm Atheros QCA8171 千兆以太网名称)显示以下内容:
Supports Wake-on: pg
Wake-on: g
那么我该怎么办?我遵循了找到的所有指南和建议。你认为这是驱动程序问题吗?有没有办法更新 Atheros 驱动程序?如果 NIC 卡没有闪烁的灯,有人能够在局域网上唤醒吗?系统启动后,我使用 wireshark 并能够通过命令检测到从我的本地 dd-wrt 发送的 WOL 数据包/usr/sbin/wol -i 192.168.1.254 -v bc:5f:f4:be:38:e4 -p 9
。我还能够从带有 WOL 生成器的 Windows 机器接收数据包。任何人都有什么建议,因为我没有主意了……提前感谢您的阅读。
最后,lspci -vv
如果这对任何人都有帮助的话,我的观点是这样的:
02:00.0 Ethernet controller: Qualcomm Atheros QCA8171 Gigabit Ethernet (rev 10)
Subsystem: ASRock Incorporation Device 10a1
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx+
Latency: 0, Cache Line Size: 64 bytes
Interrupt: pin A routed to IRQ 18
Region 0: Memory at f0400000 (64-bit, non-prefetchable) [size=256K]
Region 2: I/O ports at e000 [size=128]
Capabilities: [40] Power Management version 3
Flags: PMEClk- DSI- D1- D2- AuxCurrent=375mA PME(D0+,D1+,D2+,D3hot+,D3cold+)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [58] Express (v1) Endpoint, MSI 00
DevCap: MaxPayload 4096 bytes, PhantFunc 0, Latency L0s unlimited, L1 unlimited
ExtTag- AttnBtn+ AttnInd+ PwrInd+ RBE+ FLReset-
DevCtl: Report errors: Correctable+ Non-Fatal+ Fatal+ Unsupported+
RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
MaxPayload 128 bytes, MaxReadReq 512 bytes
DevSta: CorrErr- UncorrErr+ FatalErr- UnsuppReq+ AuxPwr+ TransPend-
LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Latency L0 unlimited, L1 unlimited
ClockPM+ Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
Capabilities: [c0] MSI: Enable- Count=1/16 Maskable+ 64bit+
Address: 0000000000000000 Data: 0000
Masking: 00000000 Pending: 00000000
Capabilities: [d8] MSI-X: Enable+ Count=16 Masked-
Vector table: BAR=0 offset=00002000
PBA: BAR=0 offset=00003000
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq+ ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP- SDES+ TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
AERCap: First Error Pointer: 14, GenCap+ CGenEn- ChkCap+ ChkEn-
Capabilities: [180 v1] Device Serial Number ff-be-38-f4-bc-ef-f4-df
Kernel driver in use: alx
答案1
因此,经过一番折腾之后,我发现当我通过以下方式休眠 Ubuntu 时
sudo pm-hibernate
NIC 灯保持亮起,我能够 WOL。但是,这对我来说没有用,因为我有 LVM 加密,所以它需要在现场输入密钥,而我无法通过远程输入来做到这一点。在比较休眠和挂起例程时,我注意到在挂起时
/usr/lib/pm-utils/sleep.d/50unload_alx
其中有一行:
‘modunload alx’
我发现这是卸载 atheros NIC 驱动程序的原因。注释掉它就可以解决问题,挂起时指示灯仍然亮着,现在我可以 WOL 了。
然而,我发现 modunload alx 的原因是由于一个错误导致机器无法正常挂起,因此它可能是被添加进来的。
因此,我现在的新情况是,我可以从挂起模式切换到 WOL,但第一次之后就无法挂起机器了。有趣的是,休眠模式工作正常,并且每次从休眠模式切换到 WOL 都可以正常工作。
我无法暂停和 WOL 并一遍又一遍地重复。第一次暂停适用于
sudo pm-suspend
但从那以后,情况就不再如此了。
但是,我发现我可以通过桌面(然后是 WOL)正常暂停,我觉得很奇怪......
所以新的问题是(也许我应该创建一个新线程):
有什么区别
sudo pm-suspend
与通过桌面暂停相比?
另外,如果我这样做
sudo pm-suspend-hybrid
它会挂起,我也可以 WOL。如果我将桌面上的计时器设置为 XX 分钟后挂起,它也会正常挂起,我可以 WOL。
那么所有这些例程与 sudo pm-suspend 所做的有什么区别呢?