我正在运行 16.04 服务器,并且已通过以下方式设置了局域网唤醒
{ethtool - s <NIC> wol g}
和
{auto <NIC>
iface <NIC> inet dhcp
up ethtool -s <NIC> wol g}
在/etc/network/interfaces
。
我用rtcwake -m mem
它来测试,但无法启动服务器。我使用 ngrep 来控制服务器接收魔术包,并尝试在服务器上安装 Windows 以确认硬件支持 WOL。
其他人报告说,他们可以通过电源按钮关闭来解决此问题,但这没有任何效果。
我错过了什么?
答案1
我找到了解决方案
该问题是由于 sky2 NIC 驱动程序中的一个错误而引起的,该错误显然已经存在好几年了。
可以使用评论中描述的 setpci 方法解决本文:
我有一台 Shuttle 设备,配有 Marvell Technology Group Ltd. 88E8056 PCI-E 千兆以太网控制器(修订版 12)。我一直在运行 Ubuntu 10.04 LTS 和 XBMC,使用 Sky2 驱动程序 v1.25。在此设置下,WOL 运行良好。
作为另一个故事的一部分,我最近不得不升级到 12.04 LTS,并遇到了 WOL 问题,Sky2 v1.30 不再起作用
在 sky2_wol_init 函数期间,Sky2 驱动程序由于 Y2_HW_WOL_ON 和 Y2_HW_WOL_OFF 的参数处理以及寄存器写入而失败。
我绝不是 Linux 开发人员,但使用
lspci
和setpci
命令的组合,我嗅出了 Marvell 设备中由驱动程序 v1.25 和驱动程序 v1.30 设置的寄存器,现在在运行 v1.30 驱动程序时使用 setpci 手动设置寄存器。Wakeonlan 再次与 12.04 LTS 和 v1.30 驱动程序配合使用,无需重新编译!该寄存器(在我的系统中)位于 0x41,需要将其值设置为 0x80。我的 Marvell 芯片位于 PCI 总线上的 02:00.0,使用 可以找到
lspci
。我在用于运行 ethtool 序列的相同启动脚本中添加了此命令:
setpci -s 02:00 41.b=80
所以,这是一个卑鄙的黑客行为,但效果很好。如果我知道如何在我的系统上构建内核驱动程序,我会修复 sky2.c 驱动程序……
尽管我没有与海报相同的控制器,但它仍然有效。