Skocz do zawartości
sunset

Problem z kompilacją sterownika do WiFi

    Rekomendowane odpowiedzi

    sunset

    Cześć wszystkim!

    Prosiłbym bardzo o wsparcie w następującym problemie, który nie daje mi spokoju już od paru dni. Mianowicie - posiadam telefon Sony Xperia E. Potrzebuję zmodyfikować jego sterownik do WiFi (ath6kl), tak aby logował pewne specyficzne dane. Niestety utknąłem na 1 kroku, a mianowicie nie mogę wrzucić skompilowanego modułu tego sterownika na telefon. Wersja jądra w systemie to: 3.4.0-perf, numer kompilacji to 11.3.A.0.47. Ściągnąłem więc sobie udostępnione źródła tej kompilacji stąd: Open source archive for build 11.3.A.0.47 – Developer World. Są tam 2 katalogi: kernel, zawierający źródła jądra i external, zawierający pakiet compat-wireless. Od razu co mnie zaskoczyło to fakt, że wersja jądra to rzeczywiście 3.4.0, ale wersja pakietu compat to 3.3 (jak to możliwe, żeby była niższa niż wersja jądra ?). Skopiowałem z androida plik /proc/config zawierającą domyślną konfigurację dla kompilacji i skompilowałem jądro używając cross-kompilacji na architekturę ARM:

    [email protected]:/home/michael/Sources/kernel# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- KLIB=. KLIB_BUIILD=.

    Na telefonie w katalogu /system/lib/modules/ath6kl mam 2 moduły:

    ath6kl_sdio.ko i cfg80211.ko. Poglądając te binarki (strings xxx.ko) widzę, że zostały skompilowane z pakietu compat-wireless. Pokrywa się to z plikiem Makefile w katalogu external modułu ath6kl - rzeczywiście tworzy on moduł ath6kl_sdio.ko i zależy od modułu cfg80211.ko. Gdy jednak skompiluje ten moduł z katalogu kernela to plik Makefile ath6kl tworzy moduł ath6kl_sdio.ko i dodatkowo ath6kl_core.ko od którego zależy, a dopiero sam core zależy od cfg80211.ko. Są to więc inne zupełnie struktury. Gdy próbuję skompilować obydwa moduły (cfg80211.ko i ath6kl_sdio.ko), tak, żeby zastąpić je po prostu na androidzie w katalogu /system/lib/modules/ath6kl lecą mi co chwila błedy kompilacji wynikające z różniących się plików nagłówkowych. Kompiluję z poziomu pakietu compat-wireless:

    [email protected]:/home/michael/Sources/external/compat-wireless# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -C ../../kernel/ M=/home/michael/ources/external/compat-wireless/net/wireless/

    oraz

    [email protected]:/home/michael/Sources/external/compat-wireless# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -C ../../kernel/ M=/home/michael/ources/external/compat-wireless/drivers/net/wireless/ath/ath6kl

    Obydwie ścieżki na końcu poleceń są katalogami modułów (cfg80211 i ath6kl_sdio). Kompilacja bierze pod uwagę pliki z katalogu danego modułu, ale pliki nagłówkowe są brane z katalogu kernela - ponieważ różnią się one wyraźnie od tych samych plików nagłówkowych z katalogu external to co chwila musze poprawiać błędy kompilacji poprzez mergowanie plików nagłówkowych (np. brakujące struktury z pliku cfg80211.h kopiuję do tego samego pliku w kernelu). Jest to oczywiście średnio rozsądne i nawet gdy udało mi się w ten sposób skompilować obydwa moduły to po wrzuceniu ich na telefon WiFi mi nie wstaje, bo lecą błędy typu: unknown symbol bądź disagrees about symbol version itp. itd. Próbowałem kilka razy i ciągle to samo. Pytanie podstawowe to czemu jest taki rozjazd w strukturze plików kernela i compat-wireless udostępnionych przez Sony, przez co kompilacja sie nie udaje, czy jednak coś źle rozumuję? Tak jak napisałem na początku chcę tylko w małym stopniu zmodyfikować jeden z plików sterownika ath6kl, żeby móc logować pewne rzeczy, co w żaden sposób nie zdestabilizuje obsługi wirelessu. Sprawa z pozoru mało skomplikowana okazała się być większą ścianą. Byłbym bardzo wdzięczny za pomoc, bo już kilka dni się z tym męczę, przez co nie mogę zając się główną funkcjonalnością. Z góry dzięki, ponieważ zależy mi na czasie, to mogę zachęcić gratyfikacją finansową :)

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x