Construindo drivers sem fio para Edimax Wireless USB: EW-7811UN

33

Estou há dias tentando e montando o módulo para o meu dispositivo sem fio USB.

É um Edimax EW-7811UN

Eu encontrei vários recursos na construção de módulos para o Debian, mas nenhum para o Arch. Atualmente, estou tentando fazer uma compilação cruzada usando o ToolChain encontrado no Raspberry Pi GitHub . Estas são as etapas que eu tomei:

  • Baixou as fontes de driver no site da Edimax .
  • Baixou as fontes do kernel do GitHub .
  • Criou uma regra de make específica (conforme a documentação do Edimax) no MakeFile do 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 é o diretório que contém as fontes do kernel.
  • MODDESTDIR é o diretório que você deseja que o módulo termine.
  • CROSS_COMPILEé minha cadeia de ferramentas (que foi adicionada a PATH)

A primeira tentativa de makefornecer esse erro:

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

Descobri que este é um cabeçalho desatualizado e o link simbólico para ele smp.hdeve corrigir o problema. No entanto, a construção ainda falha com erros de origem, que se parecem com isso:

error: field 'recv_tasklet' has incomplete type

Eu fiz a compilação suficiente para saber que isso parece que a compilação não suporta a versão mais recente do kernel, mas se é assim, então como foi criada para o Debian?


Informação extra:

  • A saída completa aqui .
Jivings
fonte
Eu tenho o mesmo adaptador, embora ainda não tenha tentado!
21712 Shane Hudson
Por favor, deixe-me saber como você o segue e adicione sua experiência posteriormente, mesmo que seja negativa.
Jivings
@ Tomas, mais recompensa! Faça faz certeza Alex não obtê-lo desta vez :)
Jivings

Respostas:

12

Instruções para compilação cruzada

  1. Baixou as fontes de driver no site da Edimax .

  2. Clone as fontes do kernel do GitHub .

  3. cdem sua fonte de kernel e cdem include/linux. Corre

    ln -s smp.h smp_lock.h`.
    
  4. unzipo download do Edimax e tar -xzfo pacote do driver. cdno driver/rtl...subdiretório.

  5. Edite include/rtw_xmit.he adicione #include <linux/interrupt.h>sob as outras inclusões.

  6. Edite os_dep/osdep_service.ce adicione

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

    sob o outro inclui.

  7. Edite a Makefileadição

    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
    

em seções semelhantes.

  1. Assumindo que arm-bcm2708-linux-gnueabi-{gcc|ld}está no seu caminho, corra make CONFIG_PLATFORM_PI=y modules.

O módulo agora deve ser compilado.

Alex Chamberlain
fonte
A compilação foi bem-sucedida! Mas para onde o módulo é construído? Para que eu possa copiá-lo no Pi.
Jivings
A raiz do pacote de drivers, eu acho.
Alex Chamberlain
1
Hum, parece estar lá. Esquisito. Qual é o sentido MODDESTDIRentão?
19412 Jivings
Nenhuma idéia!!!!!!!!!
Alex Chamberlain
Para que isso fosse desenvolvido no Raspberry Pi, eu também tive que vincular o /lib/modules/3.1.9-30-ARCH+/builddiretório às fontes do kernel.
Jivings
-1

Tente copiar o config.gz de /proc/config.gz no seu RPi. Em seguida, descompacte e renomeie para .config e faça como acima.

Felix Furak
fonte
3
Você pode dizer por que isso é útil em sua resposta?
Jivings