Побудова бездротових драйверів для бездротового USB Edimax: 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

@Tomas, ще більше щедрості! Переконайтесь, що Алекс цього разу не отримає :)
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
Гм, здається, є. Дивно. У чому сенс MODDESTDIRтоді?
Відхилення

Не маю уявлення!!!!!!!!!
Алекс Чемберлен

Для того, щоб зробити це на основі Raspberry Pi, мені довелося також посилати /lib/modules/3.1.9-30-ARCH+/buildкаталог на джерела ядра.
Відхилення

-1

Спробуйте скопіювати config.gz з /proc/config.gz у свій RPi. Потім натисніть і перейменуйте його на .config та зробіть, як зазначено вище.


3
Чи можете ви сказати, чому це корисно у вашій відповіді?
Стрибки
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.