Skocz do zawartości

haMac.pl używa cookie. Przeczytaj Privacy Policy aby dowiedzieć się więcej. Aby usunąć tę wiadomość, proszę kliknąć w przycisk po prawej:    Akceptuję użycie cookie

Zdjęcie
- - - - -

Broadcom BCM5787M/BCM5784M i podobne


  • Zaloguj się, aby dodać odpowiedź
Brak odpowiedzi do tego tematu

#1 Astarael

Astarael
  • R.E.D.
  • 1672 postów

Napisano 22 maj 2011 - 09:56

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/

Załączone pliki


Snow Leopard 10.6.8 Retail on Lenovo ThinkPad R61i 8932-FDG - This one is resting in peace now.
Lenovo ThinkPad Edge E420s 4401-6YG | Core i5-2430M | HM65 | Intel HD 3000 | Conexant CX20590 | Realtek RTL8111/8168B | Intel Centrino 1000
MacBook Pro 13" Mid 2012 Intel Core i5 | HD 4000 | Wszystko działa OTB!
Dołączona grafika Piszę poprawnie po polsku!




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych