В течение нескольких дней я пытался включить и выключить модуль для моего беспроводного 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?
Дополнительная информация:
- Полный вывод здесь .
Ответы:
Инструкция по кросс-компиляции
Загрузил источники драйверов с сайта Edimax .
Клонировать исходники ядра из GitHub .
cd
в исходный код вашего ядра иcd
вinclude/linux
. Бегunzip
загрузка Edimax иtar -xzf
пакет драйверов.cd
вdriver/rtl...
подкаталог.Редактировать
include/rtw_xmit.h
и добавлять#include <linux/interrupt.h>
под другие включает.Редактировать
os_dep/osdep_service.c
и добавлятьпод другим входит.
Изменить
Makefile
добавлениепод аналогичными разделами.
arm-bcm2708-linux-gnueabi-{gcc|ld}
, на вашем пути, бежатьmake CONFIG_PLATFORM_PI=y modules
.Модуль должен быть скомпилирован.
источник
MODDESTDIR
тогда?/lib/modules/3.1.9-30-ARCH+/build
каталог с исходниками ядра.Попробуйте скопировать config.gz из /proc/config.gz на вашем RPi. Затем распакуйте его, переименуйте в .config и сделайте, как указано выше.
источник