Création de pilotes sans fil pour Edimax Wireless USB: EW-7811UN

33

Cela fait des jours que j'essaye de construire le module pour mon périphérique USB sans fil.

C'est un Edimax EW-7811UN

J'ai trouvé plusieurs ressources sur la construction de modules pour Debian, mais aucune pour Arch. Actuellement, je tente de compiler de manière croisée à l'aide de la ToolChain disponible sur le Raspberry Pi GitHub . Ce sont les mesures que j'ai prises:

  • Téléchargé les sources de pilotes depuis le site Web Edimax .
  • Téléchargé les sources du noyau depuis GitHub .
  • Création d'une règle de création spécifique (selon la documentation Edimax) dans le fichier 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 est le répertoire contenant les sources du noyau.
  • MODDESTDIR est le répertoire dans lequel vous souhaitez que le module se termine.
  • CROSS_COMPILEest mon toolchain (qui a été ajouté à PATH)

La première tentative makedonne cette erreur:

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

J'ai trouvé qu'il s'agit d'un en-tête obsolète, et le fait de le lier par un lien smp.hdevrait résoudre le problème. Cependant, la construction échoue toujours avec des erreurs de source, qui ressemblent à ceci:

error: field 'recv_tasklet' has incomplete type

J'ai assez compilé pour savoir que la compilation ne prend pas en charge la dernière version du noyau, mais si c'est le cas, comment a-t-elle été construite pour Debian?


Informations supplémentaires:

  • La sortie complète ici .
Jivings
la source
J'ai le même adaptateur, mais pas encore essayé de l'essayer!
Shane Hudson
S'il vous plaît, laissez-moi savoir comment vous vous en sortez et ajoutez votre expérience par la suite, même si c'est négatif.
Jivings
@ Thomas, plus de primes! Assurez-vous qu'Alex ne comprend pas cette fois-ci :)
Jivings le

Réponses:

12

Instructions pour la compilation croisée

  1. Téléchargé les sources de pilotes depuis le site Web Edimax .

  2. Clonez les sources du noyau depuis GitHub .

  3. cddans votre source de noyau et cddansinclude/linux . Courir

    ln -s smp.h smp_lock.h`.
    
  4. unzip le téléchargement Edimax et tar -xzf le package de pilotes. cddans le driver/rtl...sous - répertoire.

  5. modifier include/rtw_xmit.h et ajouter #include <linux/interrupt.h>sous les autres inclus.

  6. modifier os_dep/osdep_service.c et ajouter

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

    sous l'autre comprend.

  7. Modifier l' Makefileajout

    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
    

sous des sections similaires.

  1. En supposant arm-bcm2708-linux-gnueabi-{gcc|ld}est sur votre chemin, exécutezmake CONFIG_PLATFORM_PI=y modules .

Le module devrait maintenant être compilé.

Alex Chamberlain
la source
La construction est réussie! Mais où le module est-il construit? Je peux donc le copier sur le Pi.
Jivings
La racine du package de pilote, je pense.
Alex Chamberlain
1
Hm, semble être là. Bizarre. Quel est le point MODDESTDIRalors?
Jivings
Aucune idée!!!!!!!!!
Alex Chamberlain
Pour que cela soit construit sur le Raspberry Pi, je devais aussi faire un lien symbolique entre le /lib/modules/3.1.9-30-ARCH+/buildrépertoire et les sources du noyau.
Jivings
-1

Essayez de copier le fichier config.gz à partir de /proc/config.gz sur votre RPi. Puis gunzip et renommez-le .config et faites comme ci-dessus.

Felix Furak
la source
3
Pouvez-vous indiquer pourquoi cela est utile dans votre réponse?
Jivings