Erstellen von Wireless-Treibern für Edimax Wireless USB: EW-7811UN

33

Ich habe tagelang versucht, das Modul für mein drahtloses USB-Gerät zu bauen.

Es ist ein Edimax EW-7811UN

Ich habe mehrere Ressourcen zum Erstellen von Modulen für Debian gefunden, aber keine für Arch. Gegenwärtig versuche ich mit dem ToolChain des Raspberry Pi GitHub zu kompilieren . Dies sind die Schritte, die ich unternommen habe:


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 ist das Verzeichnis, das die Kernelquellen enthält.
  • MODDESTDIR ist das Verzeichnis, in das das Modul gelangen soll.
  • CROSS_COMPILEist meine Toolchain (die hinzugefügt wurde PATH)

Erster Versuch makegibt diesen Fehler:

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

Ich fand, dass dies ein veralteter Header ist, und das Verknüpfen mit diesem smp.hsollte das Problem beheben. Der Build schlägt jedoch immer noch mit folgenden Quellfehlern fehl:

error: field 'recv_tasklet' has incomplete type

Ich habe genug kompiliert, um zu wissen, dass dies so aussieht, als ob der Build die neueste Kernel-Version nicht unterstützt, aber wenn dies so ist, wie wurde es dann für Debian erstellt?


Zusatzinformation:

  • Die volle Leistung hier .
Jivings
quelle
Ich habe den gleichen Adapter, habe ihn aber noch nicht ausprobiert!
Shane Hudson
Bitte lassen Sie mich wissen, wie Sie damit umgehen, und fügen Sie anschließend Ihre Erfahrungen hinzu, auch wenn diese negativ sind.
Jivings
@Tomas, mehr Kopfgeld!
Stellen

Antworten:

12

Anleitung zum Cross-Compilieren

  1. Die Treiberquellen wurden von der Edimax-Website heruntergeladen .

  2. Klonen Sie die Kernelquellen von GitHub .

  3. cdin deine Kernelquelle und cdin include/linux. Lauf

    ln -s smp.h smp_lock.h`.
    
  4. unzipden Edimax-Download und tar -xzfdas Treiberpaket. cdin das driver/rtl...Unterverzeichnis.

  5. Bearbeiten include/rtw_xmit.hund #include <linux/interrupt.h>unter den anderen Includes hinzufügen .

  6. Bearbeiten os_dep/osdep_service.cund hinzufügen

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

    unter den anderen beinhaltet.

  7. Bearbeiten Sie das MakefileHinzufügen

    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
    

unter ähnlichen Abschnitten.

  1. Vorausgesetzt, es arm-bcm2708-linux-gnueabi-{gcc|ld}liegt auf Ihrem Weg, rennen Sie make CONFIG_PLATFORM_PI=y modules.

Das Modul sollte jetzt kompiliert sein.

Alex Chamberlain
quelle
Build ist erfolgreich! Aber wohin wird das Modul gebaut? Also kann ich es auf den Pi kopieren.
Jivings
Die Wurzel des Treiberpakets finde ich.
Alex Chamberlain
1
Hm, scheint da zu sein. Seltsam. Worum geht es MODDESTDIRdann?
Jivings
Keine Ahnung!!!!!!!!!
Alex Chamberlain
Damit dies auf dem Raspberry Pi aufbaut, musste ich auch das /lib/modules/3.1.9-30-ARCH+/buildVerzeichnis mit den Kernel-Quellen verknüpfen .
Jivings
-1

Versuchen Sie, die Datei config.gz von /proc/config.gz auf Ihr RPi zu kopieren. Dann gunzip es und benenne es in .config um und mach es wie oben.

Felix Furak
quelle
3
Können Sie angeben, warum dies in Ihrer Antwort nützlich ist?
Jivings