Portál AbcLinuxu, 6. května 2025 06:20
Ahoj vsichni,
uz se delsi dobu snazim rozjet WOL na moji sitovce
02:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8056 PCI-E Gigabit Ethernet Controller (rev 13)
avsak bez uspechu. Pouzivam Arch, kde po zapnuti aplikuju
ethtool -s eth0 wol g
a do rc.shutdown jsem pridal pred samotne vypnuti PC nasledujici:
ip link set eth0 up
ethtool -s eth0 wol g
/sbin/poweroff -d -f -h
Sitovka vsak po vypnuti pocitace neblika (po vypnuti z Widli ano) a magic packety neprijima. Nasel jsem jiz i vic jak rok stary odkaz, kde je patch modulu sky2.ko, avsak kdyz jsem stahnul zdrojaky kernelu 2.6.30 ktere pouzivam, tak jsem zjistil ze je jiz pouzity. V BIOSu mam samozrejme WOL povolene, i ve Windowsech mi chodi. Nemate nekdo nejaky napad? Predem dekuji.
Já jsem měl kdysi problém s inteláckou e100, kdy bylo naopak třeba shodil linku dolů, jinak se karta nepřepnula do šetřícího režimu a nepřijímala WOL.
Zkuste před vypnutím prozkoumal výstup z lspci na Power Management registry. Především v jakém je „D“ stavu.
zatim jsem neprisel na to jak se to dela ... jedine co jsem zjistil u sitovky je nasledujici:
Capabilities: [48] Power Management version 3
# lspci -s 00:0c.0 -vv 00:0c.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10) Subsystem: Realtek Semiconductor Co., Ltd. RT8139 Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR+ INTx- Latency: 32 (8000ns min, 16000ns max) Interrupt: pin A routed to IRQ 11 Region 0: I/O ports at ec00 [size=256] Region 1: Memory at de000000 (32-bit, non-prefetchable) [size=256] Capabilities: [50] Power Management version 2 Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=375mA PME(D0-,D1+,D2+,D3hot+,D3cold+) Status: D0 PME-Enable- DSel=0 DScale=0 PME- Kernel driver in use: 8139too
Na konci je vypsán D-stav. PCI sběrnice definuje různé napěťové stavy a karta musí být před vypnutím přepnuta do patřičného stavu. Měl by to dělat ovladač a jádro by před vypnutím mělo přes ACPI nechat dané zařízení v běhu. To asi bude ten váš patch. Podrobnosti si ale teď nepamatuju. Myslím, že nástroj setpci nebo pci-config umožňuje ručně přepínat stavy zařízení.
Aha, no bohužel příkaz mi neposkytne podrobnější informace, ale zkusím si pohrát s tím setpci ...
# lspci -s 02:00.0 -v
02:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8056 PCI-E Gigabit Ethernet Controller (rev 13)
Subsystem: Biostar Microtech Int'l Corp Device 2700
Flags: bus master, fast devsel, latency 0, IRQ 29
Memory at fddfc000 (64-bit, non-prefetchable) [size=16K]
I/O ports at bc00 [size=256]
[virtual] Expansion ROM at fdc00000 [disabled] [size=128K]
Capabilities: [48] Power Management version 3
Capabilities: [50] Vital Product Data
Capabilities: [5c] MSI: Enable+ Count=1/1 Maskable- 64bit+
Capabilities: [e0] Express Legacy Endpoint, MSI 00
Capabilities: [100] Advanced Error Reporting
Kernel driver in use: sky2
Kernel modules: sky2
Omlouvám se, zapomněl jsem na to -vv ... už to tam vidím. Děkuji za radu ! Ještě napíšu jak jsem pokročil...
no snažím se již dýl přijít příkazu setpci nakloub, ale moc ho nechápu vím že setpci -v -s 02:00.0 nastavuji mojí LAN kartu, ale co dát potom jako další parametry teda nevím... v registrech se moc nevyznám.
tady je kdyžtak můj vstup z lspci ...
# lspci -s 02:00.0 -vv 02:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8056 PCI-E Gigabit Ethernet Controller (rev 13) Subsystem: Biostar Microtech Int'l Corp Device 2700 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 29 Region 0: Memory at fddfc000 (64-bit, non-prefetchable) [size=16K] Region 2: I/O ports at bc00 [size=256] [virtual] Expansion ROM at fdc00000 [disabled] [size=128K] Capabilities: [48] Power Management version 3 Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0+,D1+,D2+,D3hot+,D3cold+) Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=1 PME- Capabilities: [50] Vital Product Data Product Name: Marvell Yukon 88E8056 Gigabit Ethernet Controller Read-only fields: [PN] Part number: Yukon 88E8056 [EC] Engineering changes: Rev. 1.3 [MN] Manufacture ID: 4d 61 72 76 65 6c 6c [SN] Serial number: AbCdEfG749788 [CP] Extended capability: 01 10 cc 03 [RV] Reserved: checksum good, 9 byte(s) reserved Read/write fields: [RW] Read-write area: 121 byte(s) free End Capabilities: [5c] MSI: Enable+ Count=1/1 Maskable- 64bit+ Address: 00000000fee0300c Data: 4181 Capabilities: [e0] Express (v1) Legacy Endpoint, MSI 00 DevCap: MaxPayload 128 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 #3, Speed 2.5GT/s, Width x1, ASPM L0s L1, Latency L0 <256ns, L1 unlimited ClockPM+ Surprise- LLActRep- BwNot- LnkCtl: ASPM Disabled; RCB 128 bytes Disabled- Retrain- CommClk+ ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt- LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt- Capabilities: [100] 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: 1f, GenCap- CGenEn- ChkCap- ChkEn- Kernel driver in use: sky2 Kernel modules: sky2
Kdysi jsem si hrál s pci-config (byl součástí balíku nástrojů pro 3com karty od Donalda Beckera, nemůžu ho teď najít), který na přepínání D stavu měl pěkné rozhraní.
Z dotazu na Google „linux wol pci "d0" "d3"“ jsem našel, jak někteří ladili tento problém: 1, 2.
Zkuste pomocí lspci -xxx zjistit, zda zapnutí WOL pomocí ethtool skutečně mění konfiguraci v zařízení. Zjistěte, zda při ip link set down nebo vytažení modulu se D stav přepne z D0 do D3.
Zeptejte se správce ovladače sky2 nebo na příslušném mailing listu, jak je na tom s podporu WOL.
hmm... je to zajimave, vypada to opravdu jakoby se po shozeni linky, vytazeni modulu ci nastaveni WOL enable pomoci ethtool se stavem D nic nezmenilo. Je porad 0. Jeste zkusim pohledat pci-config a poptat se maintainera. Tak zatím dík moc za pomoc, teď se budu snažit teda dostat D do 3 a potom se uvidi.
tak uz jsem si vcera myslel ze je to hotove, ale porad WOL nefunguje . Na tomto FTP serveru jsem konečně našel pci-config, který jsem si zkompiloval a pak již nebylo těžké zjistit si přes
$ lspci | grep Ethernet 02:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8056 PCI-E Gigabit Ethernet Controller (rev 13)
číslo Bus, Device a Function (02,00,0) a najít si v pci-config odpovídající zařízení
# ./pci-config -B2 -a pci-config.c:v2.05 2/23/2005 Donald Becker (becker@scyld.com) http://www.scyld.com/diag/index.html Device #1 at bus 2 device/function 0/0, 436411ab.
které jsem pak shodil
# ifconfig eth0 down
a pomocí pci-config uspal
# ./pci-config -S -B2 -#1
z výstupu lspci jsem si pak ověřil, že se konečně změnil status z D0 na D3 a u PME-Enable se objevilo + ...
# lspci -s 02:00.0 -vvv 02:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8056 PCI-E Gigabit Ethernet Controller (rev 13) ... Capabilities: [48] Power Management version 3 Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0+,D1+,D2+,D3hot+,D3cold+) Status: D3 NoSoftRst- PME-Enable+ DSel=0 DScale=1 PME- ...
avšak po vypnutí počítače stále LEDky nesvítí a WOL balíčky karta nepřijímá, ani když jsem je zkusil poslat na převrácenou MAC adresu, což jsem našel také někde na netu... Pro informaci ještě výpis z rc.shutdown:
# Power off or reboot if [ "$RUNLEVEL" = "0" ]; then printsep printhl "${C_H2}POWER OFF" # ip link set eth0 up ipconfig eth0 down /home/kolage/Programs/pci-config/pci-config -S -B2 -#1 /sbin/poweroff -d -f -h else ...
Takže teďka mi zase došly nápady... Jestli by někoho něco napadlo, budu moc rád ...
a ještě jsem na něco přišel... kontroloval jsem LEDky u LAN karty a když shodím link a uspím kartu do D3, nic nesvítí, když ji však opět pomocí pci-config nastavím do D0:
# ./pci-config -W -B2 -#1
tak se v lspci změní D3 na D0, avšak PME-Enable zůstane + ... když v tomto stavu nahodím opět link, svítí karta pouze oranžově... avšak stejně když jsem pak provedl příkaz
# poweroff -d -h
a v rc.shutdown nechal link up, tak karta po vypnutí zhasne
děkuji, bohužel už je mi to známé, toto nepomáhá :(
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.