Budowanie sterowników bezprzewodowych dla Edimax Wireless USB: EW-7811UN

33

Od kilku dni próbuję włączać i wyłączać moduł dla mojego urządzenia bezprzewodowego USB.

Jest to Edimax EW-7811UN

Znalazłem kilka zasobów dotyczących budowania modułów dla Debiana, ale żadnych dla Arch. Obecnie próbuję dokonać kompilacji krzyżowej przy użyciu ToolChain znalezionego na Raspberry Pi GitHub . Oto kroki, które podjąłem:

  • Pobrano źródła sterowników ze strony internetowej Edimax .
  • Pobrałem źródła jądra z GitHub .
  • Utworzono określoną regułę make (zgodnie z dokumentacją Edimax) w pliku Edimax MakeFile:

ifeq ($(CONFIG_PLATFORM_PI), y)
  EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
  ARCH := arm
  CROSS_COMPILE := arm-bcm2708-linux-gnueabi-
  KVER  := 3.1.9-30-ARCH+
  KSRC := /pi-sources/lib/modules/3.1.9-30-ARCH+/build 
  MODDESTDIR := /pi-sources/lib/modules/3.1.9-30-ARCH+/kernel/drivers/net/wireless/
  INSTALL_PREFIX :=
endif
  • KSRC to katalog zawierający źródła jądra.
  • MODDESTDIR to katalog, w którym moduł ma się kończyć.
  • CROSS_COMPILEto mój zestaw narzędzi (do którego dodano PATH)

Pierwsza próba makepodania tego błędu:

fatal error: linux/smp_lock.h: No such file or directory

Odkryłem, że jest to nieaktualny nagłówek i linkowanie go w celu smp.hrozwiązania problemu. Jednak kompilacja nadal kończy się niepowodzeniem z błędami źródłowymi, które wyglądają tak:

error: field 'recv_tasklet' has incomplete type

Zrobiłem wystarczająco dużo kompilacji, aby wiedzieć, że wygląda na to, że kompilacja nie obsługuje najnowszej wersji jądra, ale jeśli tak, to w jaki sposób została zbudowana dla Debiana?


Informacje dodatkowe:

Jivings
źródło
Mam ten sam adapter, ale jeszcze go nie próbowałem!
Shane Hudson,
Daj mi znać, jak sobie z tym radzisz, i dodaj swoje wrażenia później, nawet jeśli są negatywne.
Jivings
@Tomas, więcej nagród! Upewnij się, że tym razem Alex go nie dostanie :)
Jivings

Odpowiedzi:

12

Instrukcje dotyczące kompilacji krzyżowej

  1. Pobrano źródła sterowników ze strony internetowej Edimax .

  2. Sklonuj źródła jądra z GitHub .

  3. cddo twojego źródła jądra i cddo include/linux. Biegać

    ln -s smp.h smp_lock.h`.
    
  4. unzippobierz Edimax i tar -xzfpakiet sterowników. cddo driver/rtl...podkatalogu.

  5. Edytuj include/rtw_xmit.hi dodaj #include <linux/interrupt.h>w ramach innych dołączeń.

  6. Edytuj os_dep/osdep_service.ci dodaj

    #include <linux/semaphore.h>
    #define init_MUTEX(sem)         sema_init(sem, 1)
    

    w ramach innych obejmuje.

  7. Edytuj Makefiledodawanie

    ifeq ($(CONFIG_PLATFORM_PI), y)
    EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
    ARCH := arm
    CROSS_COMPILE := arm-bcm2708-linux-gnueabi-
    KVER  := 3.1.9-30-ARCH+
    KSRC := ~/pi-sources
    MODDESTDIR := ~/pi-sources/lib/modules/3.1.9-30-ARCH+/kernel/drivers/net/wireless/
    INSTALL_PREFIX :=
    endif
    

w podobnych sekcjach.

  1. Zakładając, że arm-bcm2708-linux-gnueabi-{gcc|ld}jest na twojej drodze, biegnij make CONFIG_PLATFORM_PI=y modules.

Moduł powinien być teraz skompilowany.

Alex Chamberlain
źródło
Kompilacja powiodła się! Ale do czego służy moduł? Więc mogę skopiować to na Pi.
Jivings
Myślę, że główny pakiet sterowników.
Alex Chamberlain,
1
Hm, wydaje się, że tam jest. Dziwne. Jaki jest zatem sens MODDESTDIR?
Jivings
Brak pomysłu!!!!!!!!!
Alex Chamberlain,
Aby to zbudować na Raspberry Pi, musiałem również dowiązać /lib/modules/3.1.9-30-ARCH+/buildkatalog do źródeł jądra.
Jivings
-1

Spróbuj skopiować config.gz z /proc/config.gz na swój RPi. Następnie wystrzel go z pistoletu i zmień jego nazwę na .config i wykonaj jak wyżej.

Felix Furak
źródło
3
Czy możesz podać, dlaczego jest to przydatne w odpowiedzi?
Jivings