Creazione di driver wireless per Edimax Wireless USB: EW-7811UN


33

Ho provato e spento per giorni per costruire il modulo per il mio dispositivo wireless USB.

È un Edimax EW-7811UN

Ho trovato diverse risorse sulla costruzione di moduli per Debian, ma nessuna per Arch. Attualmente sto tentando di eseguire la compilazione incrociata utilizzando ToolChain disponibile su Raspberry Pi GitHub . Questi sono i passi che ho preso:

  • Scaricate le fonti dei driver dal sito Web Edimax .
  • Scaricato i sorgenti del kernel da GitHub .
  • Creata una specifica regola make (come da documentazione Edimax) nel MakeFile Edimax:

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 è la directory che contiene i sorgenti del kernel.
  • MODDESTDIR è la directory in cui si desidera che il modulo finisca.
  • CROSS_COMPILEè la mia toolchain (che è stata aggiunta a PATH)

Il primo tentativo di makedà questo errore:

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

Ho scoperto che si tratta di un'intestazione obsoleta e il collegamento simbolico a smp.hdovrebbe risolvere il problema. Tuttavia, la generazione non riesce ancora con errori di origine, che assomigliano a questo:

error: field 'recv_tasklet' has incomplete type

Ho fatto abbastanza compilazioni per sapere che sembra che la build non supporti l'ultima versione del kernel, ma se è così allora come è stata costruita per Debian?


Ulteriori informazioni:

  • L'output completo qui .

Ho lo stesso adattatore, anche se non sono ancora riuscito a provarlo!
Shane Hudson,

Per favore fatemi sapere come andare avanti con esso e aggiungere la vostra esperienza in seguito, anche se è negativo.
Jivings,

@Tomas, più generosità! Assicurati che Alex non
capisca

Risposte:


12

Istruzioni per la compilazione incrociata

  1. Scaricate le fonti dei driver dal sito Web Edimax .

  2. Clonare i sorgenti del kernel da GitHub .

  3. cdnel sorgente del kernel e cdin include/linux. Correre

    ln -s smp.h smp_lock.h`.
    
  4. unzipil download Edimax e tar -xzfil pacchetto driver. cdnella driver/rtl...sottodirectory.

  5. Modifica include/rtw_xmit.he aggiungi #include <linux/interrupt.h>sotto gli altri include.

  6. Modifica os_dep/osdep_service.ce aggiungi

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

    sotto l'altro include.

  7. Modifica l' Makefileaggiunta

    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
    

in sezioni simili.

  1. Supponendo che arm-bcm2708-linux-gnueabi-{gcc|ld}sia sul tuo cammino, corri make CONFIG_PLATFORM_PI=y modules.

Il modulo dovrebbe ora essere compilato.


Build ha successo! Ma da dove viene costruito il modulo? Quindi posso copiarlo sul Pi.
Jivings,

La radice del pacchetto driver penso.
Alex Chamberlain,

1
Hm, sembra essere lì. Strano. Qual è il punto MODDESTDIRallora?
Jivings,

Nessuna idea!!!!!!!!!
Alex Chamberlain,

Per far sì che questo si basasse su Raspberry Pi, ho anche dovuto ricollegare la /lib/modules/3.1.9-30-ARCH+/builddirectory ai sorgenti del kernel.
Jivings,

-1

Prova a copiare config.gz da /proc/config.gz sul tuo RPi. Quindi decomprimilo e rinominalo in .config e crea come sopra.


3
Puoi indicare perché questo è utile nella tua risposta?
Jivings,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.