我有一块 Aopen i945GMM-HL 主板。它仍然运行良好,BIOS 设置为允许 WakeOnLAN 启动机器,但自从最近的操作系统更新后,那些魔法包就不再起作用了。
以下是 NIC 的 lspci -v 输出:
03:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8053 PCI-E Gigabit Ethernet Controller (rev 22)
Subsystem: AOPEN Inc. Device 0607
Flags: bus master, fast devsel, latency 0, IRQ 43
Memory at fdefc000 (64-bit, non-prefetchable) [size=16K]
I/O ports at ce00 [size=256]
[virtual] Expansion ROM at fdd00000 [disabled] [size=128K]
Capabilities: [48] Power Management version 2
Capabilities: [50] Vital Product Data
Capabilities: [5c] MSI: Enable+ Count=1/2 Maskable- 64bit+
Capabilities: [e0] Express Legacy Endpoint, MSI 00
Capabilities: [100] Advanced Error Reporting
Kernel driver in use: sky2
运行内核版本 3.4.6-1。
答案1
下面的信息来自原帖者,因为他还需要 7 个小时才能回答他自己的问题。
这个问题的解决方案很简单。显然,当我以前使用的内核制作时,电源管理选项从未从 BIOS 中读取过。所有这些都改变了,但一些 BIOS 错误地报告了它们的数据,导致一些用户的某些电源管理功能被破坏。解决方法作为补丁发布到 Linux 内核邮件列表,但决定改为添加一个模块选项。
因此,如果您很难让 wakeonlan 与系统配合使用,无论 ethtool 和 BIOS 设置如何,请尝试将其放入 /etc/modprobe.d/ 中的 .conf 文件(例如 sky2.conf)中
options sky2 legacy_pme=1
仅供参考,如果卸载 sky2 模块并亲自尝试使用 legacy_pme 选项,请务必使用以下命令重新设置 wakeonlan:
sudo ethtool -s eth0 wol g
在关闭系统电源之前
答案2
我想分享一些信息 - 这可能有助于解决 Marvell 设备的 wakeonlan (WOL) 问题。
我有一台 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 驱动程序由于函数运行过程中的参数处理Y2_HW_WOL_ON
和Y2_HW_WOL_OFF
寄存器写入而失败sky2_wol_init
。
我绝不是 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
如果我知道如何在我的系统上构建内核驱动程序,我会修复该驱动程序……