Creación de controladores inalámbricos para USB inalámbrico Edimax: EW-7811UN

33

He estado intentando encender y apagar durante días para construir el módulo para mi dispositivo inalámbrico USB.

Es un Edimax EW-7811UN

He encontrado varios recursos en la construcción de módulos para Debian, pero ninguno para Arch. Actualmente estoy intentando realizar una compilación cruzada utilizando ToolChain que se encuentra en Raspberry Pi GitHub . Estos son los pasos que he tomado:

  • Descargado las fuentes del controlador del sitio web de Edimax .
  • Descargado las fuentes del núcleo de GitHub .
  • Creó una regla de creación específica (según la documentación de Edimax) en el MakeFile de 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 es el directorio que contiene las fuentes del núcleo.
  • MODDESTDIR es el directorio donde desea que termine el módulo.
  • CROSS_COMPILEes mi cadena de herramientas (que se ha agregado a PATH)

El primer intento de makeda este error:

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

Encontré que este es un encabezado desactualizado, y simularlo smp.hdebería solucionar el problema. Sin embargo, la compilación todavía falla con errores de origen, que se ven así:

error: field 'recv_tasklet' has incomplete type

He compilado lo suficiente como para saber que esto parece que la compilación no es compatible con la última versión del kernel, pero si es así, ¿cómo se ha creado para Debian?


Información extra:

  • La salida completa aquí .
Jivings
fuente
Tengo el mismo adaptador, ¡aunque todavía no he podido probarlo!
Shane Hudson
Por favor, hágame saber cómo le va y agregue su experiencia después, incluso si es negativo.
Jivings
@Tomas, ¡más generosidad! Asegúrese de que Alex no lo
entienda

Respuestas:

12

Instrucciones para la compilación cruzada

  1. Descargado las fuentes del controlador del sitio web de Edimax .

  2. Clone las fuentes del núcleo de GitHub .

  3. cden su fuente de kernel y cden include/linux. correr

    ln -s smp.h smp_lock.h`.
    
  4. unzipla descarga de Edimax y tar -xzfel paquete del controlador. cden el driver/rtl...subdirectorio.

  5. Editar include/rtw_xmit.hy agregar #include <linux/interrupt.h>debajo de los otros incluye.

  6. Editar os_dep/osdep_service.cy agregar

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

    bajo el otro incluye.

  7. Edite la Makefilesuma

    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
    

bajo secciones similares.

  1. Asumiendo que arm-bcm2708-linux-gnueabi-{gcc|ld}está en tu camino, corre make CONFIG_PLATFORM_PI=y modules.

El módulo ahora debería estar compilado.

Alex Chamberlain
fuente
¡La construcción es exitosa! Pero, ¿dónde se construye el módulo? Entonces puedo copiarlo en el Pi.
Jivings
La raíz del paquete de controladores, creo.
Alex Chamberlain
1
Hm, parece estar ahí. Extraño. ¿Cuál es el punto MODDESTDIRentonces?
Jivings
¡¡¡¡¡¡¡¡¡Ni idea!!!!!!!!!
Alex Chamberlain
Para que esto se construya en la Raspberry Pi también tuve que vincular el /lib/modules/3.1.9-30-ARCH+/builddirectorio a las fuentes del núcleo.
Jivings
-1

Intente copiar el config.gz de /proc/config.gz en su RPi. Luego, descomprímalo y cámbiele el nombre a .config y realice como se indicó anteriormente.

Felix Furak
fuente
3
¿Puedes decir por qué esto es útil en tu respuesta?
Jivings