MietasSR Opublikowano 10 Października 2012 Zgłoś Udostępnij Opublikowano 10 Października 2012 Okej, start Dzisiaj opiszę problem, z którym boryka się 99% posiadaczy mobilnych Radeonów serii 5xxx i (być może) 6xxx. Odkryłem sposób na pełne uruchomienie naszych kart, co najważniejsze - czynność wcale nie jest trudna, choć może tak wyglądać Zaczynamy. A więc, po odpaleniu systemu z GraphicsEnablerem jest czarny ekran z podświetleniem. Dlaczego tak się dzieje? GraphicsEnabler z Chameleona ładuje do mobilnych grafik (tyczy się to głównie serii 5xxx którą ludzie przywykli w ten sposób odpalać) framebuffer do zwykłych desktopowych układów. Skutkuje to tym, że obraz z VGA jest mirrorowany na LVDS - po podłączeniu zewnętrznego monitora pojawia się na nim obraz. W większości przypadków wystarczy zrobić injekcję EDID (o tym będzie w innym wątku) i zmienić rozdzielczość na prawidłową naszej matrycy. Jednak takie rozwiązanie przynosi wiele problemów: bardzo często będziemy mieli na ekranie dość mocne artefakty, nie będzie działał sleep, usypianie monitora, nie będziemy też mogli w żaden sposób załadować AppleBacklightDisplay a co za tym idzie - regulację jasności z poziomu systemu możemy sobie odpuścić. Prawidłowe rozwiązanie Rozwiązanie jest tak proste, że aż śmieszne - dziwię się że nikt wcześniej na to nie wpadł, oraz że dochodziłem do tego prawie rok. Potrzebujemy ATY_Init, w którym zmieniamy edytorem hex ID karty na nasze (kext przygotowany pod Radeona 5650 w załączniku). W kextcie o którym mowa jest ID 0x68C1 , czyli przygotowane pod Radeona HD 5650M. Podmieniamy je na swoje ID - uwaga, występuje 2 razy. Kolejnym krokiem który musimy wykonać jest podmiana EDID na swój - znajduje się on w pliku Info.plist, w gałęzi Radeon 4600 Series, klucz AAPL00,override-no-connect. W kextcie jest już dodany patch duallink - właściciele laptopów z rozdzielczością powyżej 1366x768 powinni się ucieszyć Po takich modyfikacjach grafika nam odpali w 99% - będziemy mieli problemy z niektórymi aplikacjami, np. odtwarzaczem DVD. Aby uruchomić ją do końca - musimy zmodyfikować framebuffer. Patch framebuffera To już takie proste nie jest, jednak też nie jest wcale trudne. Trzeba wiedzieć co się robi - i tyle. Podejrzewam że większości z Was patch wyjdzie za pierwszym razem - czynność wcale trudna nie jest. Co będzie potrzebne? - narzędzia radeon_bios_decode i redsock_bios_decoder (w załączniku) - działającego OS X - BIOS naszej karty Będę wzorował się na karcie z serii 5xxx, i będziemy modyfikować framebuffer Hoolock który ma oryginalnie 3 wejścia: 2xDisplayPort i DVI. Tak wygląda on w oryginale: 00 04 00 00 04 06 00 00 00 01 00 00 21 03 05 01 00 04 00 00 04 06 00 00 00 01 00 00 11 02 04 02 04 00 00 00 14 02 00 00 00 01 00 00 02 04 01 03 Mała rozpiska co za co odpowiada: 00 04 00 00 - connector-type - część odpowiedzialna za rozpoznanie typu gniazda, w tym przypadku DisplayPort. 04 06 00 00 - tzw. ATY,ControlFlags - odpowiada za sterowanie pracą monitora który jest podłączony do danego portu. WAŻNE! 00 01 - features - ustawienia funkcji podłączonego monitora, 00 00 - nikt nie wie co to jest, 21 - Transmitter, wartość bardzo ważna, ustala miejsce w jakim gniazdo jest podłączone do karty, 03 - Encoder ID, podobna wartość do Transmitter (są ze sobą powiązane!), 05 - Hotplug ID, wartość która ustala kolejność kart w personalizacji - polecam liczyć od 00 po kolei przy modyfikacji, 01 - Sense ID - ostatecznie rozpoznanie podłączenia gniazda do układu, nie aż tak ważne, ale jednak. Rozpiska możliwych ustawień: connector-type LVDS - 02 00 00 00 DVI - 04 00 00 00 VGA - 10 00 00 00 S-Video - 80 00 00 00 DisplayPort - 00 04 00 00 HDMI - 00 08 00 00 ATY,ControlFlags (wartości wybieramy doświadczalnie) LVDS: 40 00 00 00 / 00 01 00 00 DVI: 14 00 00 00 / 14 02 00 00 VGA: 10 00 00 00 S-Video: 02 00 00 00 DisplayPort: 04 02 00 00 / 04 06 00 00 HDMI: 00 02 00 00 features (tyczy się głównie laptopów, w przypadku desktopów polecam zostawić 00) (wartości się sumują!) ekran wbudowany: 0x01 używa podświetlenia: 0x08 przy laptopach używa się 09 01 , przy desktopach - 00 01. Resztę wartości musimy ustawić zgodnie ze swoją kartą graficzną. Teraz część praktyczna. Wrzucamy BIOS naszej karty, radeon_bios_decode i redsock_bios_decoder do jednego katalogu. Uruchamiamy terminal, przechodzimy do tego katalogu, i wydajemy polecenia: chmod +x *decode* ./radeon_bios_decode < nazwa_pliku_z_biosem > radeon.txt ./redsock_bios_decoder < nazwa_pliku_z_biosem > redsock.txt Po tym, w danym katalogu pojawią się 2 pliki: radeon.txt i redsock.txt. Przykładowa zawartość obu (na podst. mojej karty): radeon.txt: ATOM BIOS Rom: SubsystemVendorID: 0x1025 SubsystemID: 0x036d IOBaseAddress: 0x3000 Filename: BR37698.001 BIOS Bootup Message: Acer JV52_CP PARK XT DDR3 64Mx16/128Mx16 512MB/1GB PCI ID: 1002:68e0 Connector at index 0 Type [@offset 45254]: LVDS (7) Encoder [@offset 45258]: INTERNAL_UNIPHY (0x1e) i2cid [@offset 45328]: 0x96, OSX senseid: 0x7 Connector at index 1 Type [@offset 45264]: HDMI-A (11) Encoder [@offset 45268]: INTERNAL_UNIPHY1 (0x20) i2cid [@offset 45351]: 0x90, OSX senseid: 0x1 Connector at index 2 Type [@offset 45274]: VGA (1) Encoder [@offset 45278]: INTERNAL_KLDSCP_DAC1 (0x15) i2cid [@offset 45378]: 0x93, OSX senseid: 0x4 najważniejsze dla nas z tego pliku są wartości: 0x7, 0x1 i 0x4. Zapisujemy sobie je gdzieś, przy okazji odnotowując którego portu się tyczą (u mnie odpowiednio LVDS, HDMI i VGA). redsock.txt: BR37698.001 : Acer JV52_CP PARK XT DDR3 64Mx16/128Mx16 512MB/1GB Subsystem Vendor ID: 1025 Subsystem ID: 36d Object Header Structure Size: 199 Connector Object Table Offset: 34 Router Object Table Offset: 0 Encoder Object Table Offset: 99 Display Path Table Offset: 12 Connector Object Id [14] which is [LVDS] encoder obj id [0x1e] which is [iNTERNAL_UNIPHY (osx txmit 0x10 [duallink 0x0] enc 0x0)] linkb: false Connector Object Id [12] which is [HDMI_TYPE_A] encoder obj id [0x20] which is [iNTERNAL_UNIPHY1 (osx txmit 0x11 [duallink 0x1] enc 0x2)] linkb: false Connector Object Id [5] which is [VGA] encoder obj id [0x15] which is [iNTERNAL_KLDSCP_DAC1 (osx txmit 0x00 enc 0x10?)] linkb: false z tego pliku najważniejsze są wartości txmit i enc, oczywiście zapisujemy je odnotowując do jakiego portu należą, przykład: LVDS: txmit 0x10, enc 0x0 HDMI: txmit 0x11, enc 0x2 VGA: txmit 0x00, enc 0x10 Sumujemy dane zebrane z obu plików, co daje nam (przykład): LVDS: txmit 0x10, enc 0x0, senseid 0x7 HDMI: txmit 0x11, enc 0x2, senseid 0x1 VGA: txmit 0x00, enc 0x10, senseid 0x4 Mając te dane, mamy już prawie kompletną personalizację txmit to pole Transmitter (0x10 = 10), enc to Encoder ID (0x0 = 00), senseid to Sense ID (0x7 = 07). Przykładowa zmodyfikowana personalizacja: 02 00 00 00 40 00 00 00 09 01 00 00 10 00 00 07 00 08 00 00 00 02 00 00 00 01 00 00 11 02 01 01 10 00 00 00 10 00 00 00 00 01 00 00 00 10 02 04 Kto będzie chciał rozczyta sobie z tego przykładu jak powinna wyglądać personalizacja, i w sumie do tego dążyłem. Kiedy będziemy już mieli zmodyfikowaną personalizację, po prostu podmieniamy hexedytorem oryginalne wartości na nasze zmodyfikowane (zamieniając oczywiście całymi ciągami). Mój przykład tyczy się framebuffera Hoolock, który jest wykorzystywany do kart serii 5xxx, czyli modyfikujemy kexta ATI5000Controller. Po zapisaniu obu kextów wrzucamy je do /S/L/E, naprawiamy uprawnienia, usuwamy cache, wyłączamy GraphicsEnablera (jeśli był włączony) i restartujemy system. Po restarcie powinniśmy ujrzeć pięknie działającą grafikę, z QE/CI i wszystkimi innymi dobrodziejstwami typu sleep etc. UWAGA! Po modyfikacji framebuffera, musimy również zmienić w ATY_Init odniesienia z ATY,RadeonFramebuffer (podstawowy framebuffer który jednak nie daje pełni możliwości) na ATY,nazwa_fb_który_modyfikujemy. Wyciąganie personalizacji z kextów Potrzebne rzeczy: - Xcode - skrypt ati-personality.pl autorstwa bcc9 Polecam skrypt przenieść do katalogu domowego. Odpalamy terminal, po czym: (zakładam że skrypt jest w katalogu domowym) chmod +x ati-personality.pl ./ati-personality.pl > personality.txt W pliku personality.txt znajdziemy wszystkie personalizacje jakie znajdują się w kextach systemowych. Skrypt w załączniku. Wiedza którą posiadam pochodzi z: - świetnego tematu na insanelymac, z rozpiską funkcji framebuffera ATI, autorstwa @mucha: http://www.insanelymac.com/forum/topic/252061-mobility-radeon-hd-4650full-resolution-with-qe-ci-working-on-internal-lvds-screen/ - tematu @bcc9 również na insanelymac, w którym po raz pierwszy został poruszony temat modyfikacji framebuffera i w którym znajduje się skrypt radeon_bios_decode oraz ati_personality.pl (który pozwala wyciągać personalizacje z kextów), polecam dla rozwinięcia wiedzy, świetna lektura: http://www.insanelymac.com/forum/topic/249642-editing-custom-personalities-for-ati-radeon-hd45xxx/ - na pomysł z injekcją EDID przez AAPL00,override-no-connect wpadłem dzięki Cloverowi - brawa dla @Slice za chęci i stworzenie tego świetnego bootloadera. Powodzenia w wykonywaniu własnych modyfikacji! [ Komentarz dodany przez: 314TeR: 2013-01-05, 18:46 ] Polecam też zapoznać się z tym tutorialem: http://rampagedev.wordpress.com/2012/12/12/editing-atiamd-framebuffer-personalities/ Jest w nim zawarte parę dodatkowych informacji, które uzupełniają powyższy poradnik. narzedzia.zip ATY_Init.kext.zip ati-personality.pl.zip Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
rzooff Opublikowano 10 Października 2012 Zgłoś Udostępnij Opublikowano 10 Października 2012 Super tekst. Przyklejam! Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MietasSR Opublikowano 10 Października 2012 Autor Zgłoś Udostępnij Opublikowano 10 Października 2012 Dziękuję za pochwałę. Powiem jeszcze tylko tyle: będę dopisywał rzeczy których zapomniałem (a na pewno są takie, taki już jestem, zapominam). Wydaje mi się że napisałem to w miarę przejrzyście i każdy wyczyta sobie z tego to, co najważniejsze. W razie jakichkolwiek pytań pisać tutaj, postaram się w miarę moich możliwości i wiedzy na nie odpowiedzieć. Aktualnie potwierdzone przypadki działania to: - eMachines E730G (ta sama karta jest w Acer Aspire 5740G/5742G), Radeon 5470, rozdzielczość natywna 1366x768 - Sony Vaio VPCEC3M1E, Radeon 5650, rozdzielczość natywna 1600x900 (epic win! ). Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
oswaldini Opublikowano 10 Października 2012 Zgłoś Udostępnij Opublikowano 10 Października 2012 Super tekst. Przyklejam! Przecież już przykleiłem zaraz po napisaniu Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
314TeR Opublikowano 10 Października 2012 Zgłoś Udostępnij Opublikowano 10 Października 2012 Rewelacja... W pierwszej kolejności dopisz jak i czym wyciągać personalizacje z kextów systemowych - jest do tego stosowny skrypt. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MietasSR Opublikowano 10 Października 2012 Autor Zgłoś Udostępnij Opublikowano 10 Października 2012 Z tym, że do wyciągnięcia personalizacji z kextów potrzebne jest Xcode, a dokładniej narzędzie które się w nim znajduje - otool... jednak faktycznie, przydałby się opis wykonania tego kiedy już Xcode jest - się dopisze. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
rzooff Opublikowano 11 Października 2012 Zgłoś Udostępnij Opublikowano 11 Października 2012 Super tekst. Przyklejam! Przecież już przykleiłem zaraz po napisaniu Najwyraźniej w trakcie mojego czytania - bo guziczek do przyklejania miałem aktywny. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
BrT Opublikowano 11 Października 2012 Zgłoś Udostępnij Opublikowano 11 Października 2012 Można dodać do listy działających: Asus K72DR Turion II P520 HD 5470M 1600x900 Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
druteron Opublikowano 11 Października 2012 Zgłoś Udostępnij Opublikowano 11 Października 2012 Jednego momentu nie trybię, w którym miejscu mam zmienić ID karty? Przeszukałem całe ATY_Init, a nie mogę tego znaleźć Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
314TeR Opublikowano 11 Października 2012 Zgłoś Udostępnij Opublikowano 11 Października 2012 MietasSR, wiesz o tym, że możesz wyciągnąć z ioreg'a to co wstrzykuje ATY_Init i na podstawie tego dump'u zrobić własny wpis do DSDT lub EFI String? Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MietasSR Opublikowano 12 Października 2012 Autor Zgłoś Udostępnij Opublikowano 12 Października 2012 314TeR, ja to mogę wyciągnąć z Info.plist ATY_Init... jednak wydaje mi się że lepszym rozwiązaniem jest te ATY_Init. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
314TeR Opublikowano 12 Października 2012 Zgłoś Udostępnij Opublikowano 12 Października 2012 314TeR, ja to mogę wyciągnąć z Info.plist ATY_Init... jednak wydaje mi się że lepszym rozwiązaniem jest te ATY_Init. Nie jestem przekonany, nie wiemy co i jak wstrzykuje sama binarka... Zrób zrzut darwindumperem i porównaj to co masz w dumpie z tym co masz w pliście... Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kamillo1888 Opublikowano 14 Października 2012 Zgłoś Udostępnij Opublikowano 14 Października 2012 Dziękuję za pochwałę. Powiem jeszcze tylko tyle: będę dopisywał rzeczy których zapomniałem (a na pewno są takie, taki już jestem, zapominam). Wydaje mi się że napisałem to w miarę przejrzyście i każdy wyczyta sobie z tego to, co najważniejsze. W razie jakichkolwiek pytań pisać tutaj, postaram się w miarę moich możliwości i wiedzy na nie odpowiedzieć. Aktualnie potwierdzone przypadki działania to: - eMachines E730G (ta sama karta jest w Acer Aspire 5740G/5742G), Radeon 5470, rozdzielczość natywna 1366x768 - Sony Vaio VPCEC3M1E, Radeon 5650, rozdzielczość natywna 1600x900 (epic win! ). Ja ze swojej strony potwierdzę co wyżej kolega napisał, z jego pomocą około tygodnia temu udało mi się odpalić na moim VPCEC3M1E 5650m z 1600x900 z działającymi external złączami, czego poprzednio w żaden inny sposób nie udało mi się uruchomić. Dzięki! Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
BKluba1 Opublikowano 23 Października 2012 Zgłoś Udostępnij Opublikowano 23 Października 2012 Witam, a czy zadziała ten sposób na Ati Mobility Radeon HD 4330? Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
oswaldini Opublikowano 23 Października 2012 Zgłoś Udostępnij Opublikowano 23 Października 2012 A czy napisane jest gdzieś, że jest to do jednego modelu ATI ? Nie wiem czy sterowniki mają FB do tej grafiki ale spróbować można. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MietasSR Opublikowano 24 Października 2012 Autor Zgłoś Udostępnij Opublikowano 24 Października 2012 Zadziała na HD4330, spróbuj najpierw wystartować za pomocą GraphicsEnablera z parametrem ATIConfig=Shrike, jeśli nie zadziała to modyfikujesz ATI4600Controller i framebuffer Shrike. Część o wyciąganiu personalizacji jest w trakcie tworzenia... proszę uzbroić się w cierpliwość. EDIT: Okej, wyciąganie personalizacji jest opisane w pierwszym poście. Teraz jest już chyba wszystko co trzeba Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
mariuk Opublikowano 16 Listopada 2012 Zgłoś Udostępnij Opublikowano 16 Listopada 2012 Super opis, ale ja nie umie sobie z tym poradzić, mam sony vaio vpcec2m1e, więc powinno chodzić, coś robię zle, w związku z tym mam prośbę czy ktoś mógłby podesłać mi kexty do radeon 5650m, który jest w moim Vaio. Pozdrawiam Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MietasSR Opublikowano 16 Listopada 2012 Autor Zgłoś Udostępnij Opublikowano 16 Listopada 2012 Wrzuc do systemu ATY_Init z zalacznika z pierwszego postu. Oczywiscie musisz zmienic EDID w kextcie! Na Sony nie jestes w stanie prawidlowo zmodyfikowac framebuffera, musisz zadowolic sie "proteza". PS. Przepraszam za brak polskich znakow, ale pisze z klawiatury ktora nie ma prawego Alt Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
mariuk Opublikowano 16 Listopada 2012 Zgłoś Udostępnij Opublikowano 16 Listopada 2012 Dzięki, udało mi się uruchomić ale bez QE/CI, nie wiem w którym miejscu podmienić EDID, chyba już jestem za stary na takie zabawy To i tak wielkie osiągnięcie, od dwóch lat walczyłem co jakiś czas aby uruchomić tę kartę. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MietasSR Opublikowano 16 Listopada 2012 Autor Zgłoś Udostępnij Opublikowano 16 Listopada 2012 Kolejnym krokiem który musimy wykonać jest podmiana EDID na swój - znajduje się on w pliku Info.plist, w gałęzi Radeon 4600 Series, klucz AAPL00,override-no-connect. Jesteś pewien, że wyłączyłeś GraphicsEnablera i włączasz system w normalnym trybie (tzn. bez -x)? Bo QE/CI po podgraniu tego ATY_Init powinno zatrybić. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
mariuk Opublikowano 16 Listopada 2012 Zgłoś Udostępnij Opublikowano 16 Listopada 2012 Kolejnym krokiem który musimy wykonać jest podmiana EDID na swój - znajduje się on w pliku Info.plist, w gałęzi Radeon 4600 Series, klucz AAPL00,override-no-connect. Jesteś pewien, że wyłączyłeś GraphicsEnablera i włączasz system w normalnym trybie (tzn. bez -x)? Bo QE/CI po podgraniu tego ATY_Init powinno zatrybić. Tak, mam na pewno wyłączony, ale nie wiem jaki mam swój EDID NIe wiem czy chodzi o 0x68c1? Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MietasSR Opublikowano 16 Listopada 2012 Autor Zgłoś Udostępnij Opublikowano 16 Listopada 2012 EDID to 128-bitowy identyfikator ekranu. Musisz go wyciągnąć pod Windowsem. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
mariuk Opublikowano 16 Listopada 2012 Zgłoś Udostępnij Opublikowano 16 Listopada 2012 Dzięki wielkie, załapałem, miałem jakieś zaćmienie, ogromne dzięki. EDIT: Chodzi jak ta lala, Pozdrawiam Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kometa Opublikowano 9 Grudnia 2012 Zgłoś Udostępnij Opublikowano 9 Grudnia 2012 EDID to 128-bitowy identyfikator ekranu. Musisz go wyciągnąć pod Windowsem. A czy można to zrobić pod OS X lub Linuksem? Bo rozumiem, że do instalacji karty trzeba: 1. Wgrać ATY_Init(co jeśli tam już jest ID karty? W sensie, że jest tam wiele ID w tym ID mojej, nadal muszę zmieniać w tych dwóch miejscach?), wcześniej jeszcze w Info.plist tegoż pliku zmienić EDID 2. Edytować framebuffer 3. Ponownie edytować ATY_Init i koniec? Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MietasSR Opublikowano 9 Grudnia 2012 Autor Zgłoś Udostępnij Opublikowano 9 Grudnia 2012 Tak. EDID możesz wyciągnąć pod Linuksem albo Windowsem - pod OS X nie, bo przecież karta nie działa Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.