Создание беспроводных драйверов для Edimax Wireless USB: EW-7811UN

33

В течение нескольких дней я пытался включить и выключить модуль для моего беспроводного USB-устройства.

Это Edimax EW-7811UN

Я нашел несколько ресурсов по созданию модулей для Debian, но ни одного для Arch. В настоящее время я пытаюсь выполнить кросс-компиляцию, используя ToolChain, найденную на Raspberry Pi GitHub . Вот шаги, которые я предпринял:

  • Загрузил источники драйверов с сайта Edimax .
  • Скачал исходники ядра с GitHub .
  • Создано специальное правило make (согласно документации Edimax) в Edimax MakeFile:

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 каталог, содержащий исходные коды ядра
  • MODDESTDIR каталог, который вы хотите, чтобы модуль заканчивал.
  • CROSS_COMPILEмой набор инструментов (который был добавлен в PATH)

Первая попытка makeдает эту ошибку:

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

Я обнаружил, что это устаревший заголовок, и ссылка на него smp.hдолжна решить проблему. Тем не менее, сборка по-прежнему не удается с исходными ошибками, которые выглядят так:

error: field 'recv_tasklet' has incomplete type

Я сделал достаточно компиляции, чтобы понять, что это выглядит так, как будто сборка не поддерживает последнюю версию ядра, но если это так, то как она была построена для Debian?


Дополнительная информация:

Jivings
источник
У меня такой же адаптер, хотя пока не удосужился его попробовать!
Шейн Хадсон
Пожалуйста, дайте мне знать, как вы справляетесь с этим и добавьте свой опыт после этого, даже если он отрицательный.
Jivings
@ Томас, больше щедрости! Убедитесь, что Алекс не получил это на этот раз :)
Jivings

Ответы:

12

Инструкция по кросс-компиляции

  1. Загрузил источники драйверов с сайта Edimax .

  2. Клонировать исходники ядра из GitHub .

  3. cdв исходный код вашего ядра и cdв include/linux. Бег

    ln -s smp.h smp_lock.h`.
    
  4. unzipзагрузка Edimax и tar -xzfпакет драйверов. cdв driver/rtl...подкаталог.

  5. Редактировать include/rtw_xmit.hи добавлять #include <linux/interrupt.h>под другие включает.

  6. Редактировать os_dep/osdep_service.cи добавлять

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

    под другим входит.

  7. Изменить Makefileдобавление

    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
    

под аналогичными разделами.

  1. Предположим arm-bcm2708-linux-gnueabi-{gcc|ld}, на вашем пути, бежать make CONFIG_PLATFORM_PI=y modules.

Модуль должен быть скомпилирован.

Алекс Чемберлен
источник
Сборка прошла успешно! Но где модуль построен? Так что я могу скопировать его на Пи.
Jivings
Корень пакета драйверов я думаю.
Алекс Чемберлен
1
Хм, кажется там. Weird. Какой смысл MODDESTDIRтогда?
Jivings
Без понятия!!!!!!!!!
Алекс Чемберлен
Для того, чтобы сделать это для сборки на Raspberry Pi, мне также пришлось символически связать /lib/modules/3.1.9-30-ARCH+/buildкаталог с исходниками ядра.
Jivings
-1

Попробуйте скопировать config.gz из /proc/config.gz на вашем RPi. Затем распакуйте его, переименуйте в .config и сделайте, как указано выше.

Феликс Фурак
источник
3
Можете ли вы указать, почему это полезно в вашем ответе?
Jivings