数天来我一直在尝试为我的USB无线设备构建模块。

这是Edimax EW-7811UN

我在Debian的构建模块上发现了一些资源,但Arch却没有。目前,我正在尝试使用Raspberry Pi GitHub上的ToolChain进行交叉编译。这些是我已采取的步骤:


从Edimax网站下载了驱动程序源。
从GitHub下载了内核源。 (根据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会出现此错误:

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


我发现这是过时的标头,并将其符号链接到make应该可以解决此问题。但是,该构建仍会失败,并显示源错误,如下所示:

error: field 'recv_tasklet' has incomplete type


我已经完成了足够的编译,以了解该看起来好像该构建不支持最新的内核版本,但是如果是这样,那么它是如何为Debian构建的?


ation:


完整输出在这里。


评论

我有相同的适配器,尽管还没有尝试使用它!

请让我知道您如何处理它,并在以后添加您的经验,即使它是负面的。

@Tomas,更多赏金!确保Alex这次没有得到它:)

#1 楼

交叉编译说明


从Edimax网站下载了驱动程序源。
从GitHub克隆内核源。

cd到您的内核源中和cdinclude/linux中。运行

ln -s smp.h smp_lock.h`.


unzip Edimax下载和tar -xzf驱动程序包。将cd放入driver/rtl...子目录。
编辑include/rtw_xmit.h并在其他包含项下添加#include <linux/interrupt.h>

编辑os_dep/osdep_service.c并添加
其他包含。 br />
假设Makefile在您的路径中,请运行arm-bcm2708-linux-gnueabi-{gcc|ld}

现在应该编译模块了。

评论


构建成功!但是模块建立在哪里?所以我可以将其复制到Pi上。

–活动
2012年7月19日在12:12



我认为驱动程序包的根目录。

–亚历山大·张伯伦
2012年7月19日在12:19

嗯,似乎在那里。奇怪的。那么,MODDESTDIR有什么意义呢?

–活动
2012年7月19日在12:20

不知道!!!!!!!!!

–亚历克斯·张伯伦
2012年7月19日在12:20

为了在Raspberry Pi上构建它,我还不得不将/lib/modules/3.1.9-30-ARCH+/build目录符号链接到内核源代码。

–活动
2012年7月24日17:42

#2 楼




尝试从RPi上的/proc/config.gz复制config.gz。然后将其进行枪压压缩,并将其重命名为.config并按上述进行制作。

评论


您能否说明为什么这对您的回答很有用?

–活动
2012年7月19日在12:34