当我的网络控制器使用 sky2 模块时,如何使 WakeOnLAN 工作?

当我的网络控制器使用 sky2 模块时,如何使 WakeOnLAN 工作?

我有一块 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_ONY2_HW_WOL_OFF寄存器写入而失败sky2_wol_init

我绝不是 Linux 开发人员,但使用lspcisetpci命令的组合,我嗅出了 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如果我知道如何在我的系统上构建内核驱动程序,我会修复该驱动程序……

相关内容