Jump to content
Sign in to follow this  
Astarael

Broadcom BCM5787M/BCM5784M i podobne

Recommended Posts

Broadcomy ponoć lubią OS X, a OS X lubi broadcomy, tyle że kilka kart sieciowych z serii BCM57xx stanowi od tej reguły ewidentny wyjątek. Jak je nakłonić do współpracy ze Śnieżną Panterą? O tym właśnie traktuje ten miniporadnik.

Ponieważ w Internecie można znaleźć wiele sprzecznych opinii na temat wspomnianych chipsetów, postanowiłem zadać sobie odrobinę trudu i zebrać w jednym miejscu mniej lub bardziej sprawdzone rozwiązania.

 

Podstawy

Do zastosowania wymienionych tutaj metod potrzebna Ci będzie następująca wiedza:

- kext to tak naprawdę folder z dziwnym rozszerzeniem; aby dostać się do środka należy użyć prawego klawisza myszki i wybrać Pokaż zawartość pakietu

- jak naprawić uprawnienia / odświeżyć cache (najprościej programem KextWizard)

- jak zdobyć device id swojej karty sieciowej (polecam użycie w terminalu komendy lspci -nn pod linuksem / OS X z zainstalowaną paczką)

- co to jest DSDT, jak je wydobyć i modyfikować (mamy o tym cały dział na forum)

 

Sposób 1.

Edycja Info.plist

 

Jak w zdecydowanej większości przypadków, wszelkie starania odpalenia niedziałającego sprzętu (którego rodacy znaleźli się w komputerach Apple) warto zacząć od próby załadowania sterowników dostępnych w systemie - robimy to, edytując Info.plist odpowiedniego kexta, w naszym przypadku AppleBCM5701Ethernet.kext znajdującego się w IONetworkingFamily.kext

Odszukujemy w Info.plist coś, co wygląda jak:

IONameMatch

pci14e4,1659
pci14e4,166A
pci14e4,1693

i dopisujemy tam swoje id lub zmieniamy istniejące. Zapisujemy, naprawiamy uprawnienia i przebudowujemy cache, a potem restart. Jeśli ta metoda nie zadziała, przechodzimy dalej.

Uwaga! W przypadku BCM5784M, 5787M i wyżej, nie ma sensu nawet próbować - nie zadziała.

 

Sposób 2.

Wykorzystanie zmodyfikowanego pluginu dla OS X 10.6.3+

 

Na insanelymac jakiś czas temu zawiązał się spisek przeciwko niedziałaniu karty BCM5787M. W ruch poszedł hexeditor i efekt jest taki, że mamy działający kext do tego broadcoma, a także dla BCM5784M - działa w zasadzie to samo. Przez działający mam na myśli pracę w 32 i 64 bitach, usypianie i wybudzanie, funkcję Wake on LAN, odczytywanie adresu mac z karty i takie tam. Po prostu pobieramy archiwum, rozpakowujemy i... pod żadnym pozorem nie wolno przeciągnąć tego do KextWizarda/KextUtility ani wrzucić luzem do /S/L/E - po prostu nie zadział i tyle, a na forum będą się mnożyć tematy z problemami, które jakiś mądry użytkownik insanely dawno rozwiązał.

Pobrany plugin należy podmienić z oryginalnym w IONetworkingFamily - po naprawieniu uprawnień i restarcie albo mamy lan, albo nie. Jeśli mamy, to się cieszymy, jeśli zaś nie - czytamy dalej, bo rozwiązania istnieją i mają się całkiem dobrze.

Jest też opcja dla wygodnych, a mianowicie paczka instalacyjna która przenosi wspomniany plugin we właściwe miejsce. Wystarczy kliknąć kilka razy Dalej oraz podać hasło administratora. Nie trzeba nawet zaglądać do folderu System ;)

 

2.1 użycie IOPCMCIAFamily.kext poprawiającego wykrywanie kart pci

Tutaj żadnej filozofii nie ma, po prostu instalujemy kext dowolną metodą. Rozwiązanie mało eleganckie, ale za to proste i szybkie. W niektórych przypadkach się sprawdza.

 

2.2 użycie starszej wersji zmodyfikowanego pluginu - 10.6.2+

Podobnie jak w punkcie 2. podmieniamy oryginalny plugin w IONetworkingFamily. Starsza wersja jest dużo mniej stabilna (u mnie co jakieś piętnaście-dwadzieścia minut powodowała kernel panic) oraz nie odczytuje adresu mac z karty, co niektóre routery wyprowadza z równowagi - możemy go oczywiście ustawić ręcznie, ale będziemy to musieli robić co uruchomienie systemu.

Rozwiązanie jeszcze mniej eleganckie niż poprzednie, zdecydowanie nie polecam. Wspominam o tej możliwości tylko i wyłącznie ze względu na jej prostotę i niemalże pewność odpalenia 5787M.

 

2.3 modyfikacja DSDT

Metoda, którą sam stosuję, bo nie wymaga wrzucania/modyfikowania dodatkowych kextów.

W tym miejscu jedną rzecz musimy sobie wyjaśnić: jeśli po wrzuceniu pluginu BCM5787/4 jeszcze nie działa, to nie dlatego, że kext jest zły, ale dlatego, że system "nie skapnął się", że mamy tę kartę w ogóle podłączoną do pci. Trzeba więc mu o tym powiedzieć w sposób na tyle bezpośredni, aby nie śmiał się z nami nie zgodzić.

Za pomocą programu IORegistryExplorer lokalizujemy port, pod jaki podpięta jest nasza karta sieciowa. Wyszukujemy więc ethernet, jeśli nic nie znajdziemy, próbujemy LAN, 1693 i co nam jeszcze przyjdzie do głowy. Gdy już mamy nazwę portu, odszukujemy w DSDT Device (NAZWA_PORTU) i dopisujemy sekcję lanu wyglądającą m/w tak:

Device (LAN) 
{ 
Name (_ADR, Zero) 
Method (_DSM, 4, NotSerialized)   //jeśli LAN już jest, to dodajemy tylko tę metodę
{ 
	Store (Package (0x04) 
	{ 
       	"model",
           Buffer () 
           { 
           	"Broadcom BCMxxxx" //tutaj możemy wstawić co chcemy
           },

           "built-in",
           Buffer () 
           { 
           	0x01
           } 
       }, Local0) 
       DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) 
       Return (Local0) 
   } 
}

Ta poprawka sprawi, że system zaakceptuje egzystencję naszej karty i załaduje sterowniki, które wcześniej zainstalowaliśmy. Oczywiście koniecznością jest posiadanie w DSDT metody DTGP - "poprawkę" tę można znaleźć w odpowiednim dziale na forum.

Jeśli ktoś czuje potrzebę zapoznania się z całą historą BCM5701.kext modyfikowanego hexeditorem, znajdzie ją na insanelymac:

http://www.insanelymac.com/forum/index.php?showtopic=127903

 

Sposób 3.

BCM5722D, kext oparty na kodzie źródłowym sterowników innego broadcoma oraz Linuksowego tg3 i if_bge pod FreeBSD

 

Natknąłem się na ten projekt przypadkiem i postanowiłem przetestować. O dziwo, działa, ponadto wszystko sprowadza się do instalacji kexta w /S/L/E. Niczego nie usuwamy ani nie podmieniamy. W niektórych wypadkach należy jednak dopisać kartę do DSDT (lub zastosować kext poprawiający wykrywanie kart pci).

Autor twierdzi, że obsługiwane są następujące modele: 5787, 5784, 5754, 5755, 5906, 5787M, 5784M, 5754M, 5755M, 5906M. W temacie jednak przewija się jeden czy dwa działające pod dopisaniu pci id, których na tej liście nie znajdziemy. Osobiście mogę potwierdzić działanie tej pierwszej, którą sam mam w laptopie oraz ostatniej (dzięki uprzejmości znajomego). Zmiana kexta nie wpłynęła negatywnie na działanie sleepu, wystąpiło natomiast zauważane spowolnienie działania systemu, jednak błąd zgłosiłem i autor coś z nim zrobił, tak że już jest dobrze :-P. Projekt jest stosunkowo młody i chyba wiele można mu wybaczyć - moim zdaniem ten kext to i tak niemały sukces. W końcu niecodziennie ktoś przerabia sterowniki z Linuksa i FreeBSD na OS X ;) Zainteresowanych projektem odsyłam tutaj:

http://osx86.co/f36/10-6-x-broadcom-nic-driver-for-bcm5754-t6946/

BCM5722D.kext.zip

BCM5787M.pkg.zip

BCM5787M (AppleBCM5701) for 10.6.3+.zip

BCM5787M (AppleBCM5701) for 10.6.2+.zip

Pci detection.kext.zip

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.