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

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

Это Edimax EW-7811UN

Я нашел несколько ресурсов для создания модулей для Debian, но для Arch не нужен. В настоящее время я пытаюсь перекрестно скомпилировать, используя ToolChain, найденный на малине 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

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

error: field 'recv_tasklet' has incomplete type

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


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

33 голоса | спросил Jivings 13 J0000006Europe/Moscow 2012, 00:06:20

2 ответа


12

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

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

  2. Скройте источники ядра от GitHub .

  3. cd в исходный код ядра и cd в include/linux. Run

    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.

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

ответил Alex Chamberlain 19 J000000Thursday12 2012, 15:43:11
-1

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

ответил Felix Furak 19 J000000Thursday12 2012, 16:28:02

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132