当前内核版本为:

    Linux raspberrypi 4.1.15+ #831 Tue Jan 19 18:36:09 GMT 2016 armv6l GNU/Linux   

    假设驱动包在/home/pi目录

 unzip RTL8192EU_linux_v4.3.8_12406.20140929.zip
 cd RTL8192EU_linux_v4.3.8_12406.20140929
 cd driver
 tar -xzf rtl8192EU_linux_v4.3.8_12406.20140929.tar.gz
 cd RTL8192EU_linux_v4.3.8_12406.20140929
 nano Makefile

    

    在Makefile中确认CONFIG_RTL8192E = y存在,然后搜索                                        CONFIG_PLATFORM_I386_PC将其设为n,并添加一行                                         CONFIG_PLATFORM_ARM_RPI = y。

    继续搜索CONFIG_PLATFORM_I386_PC的处理代码块,在其后面添加以下处理脚本:

 ifeq ($(CONFIG_PLATFORM_ARM_RPI), y)
 EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
 ARCH := arm
 CROSS_COMPILE :=
 KVER  := $(shell uname -r)
 KSRC := /lib/modules/$(KVER)/build
 MODDESTDIR := /lib/modules/$(KVER)/kernel/drivers/net/wireless/
 endif

    保存退出,到现在准备活动终于完成,可以开始编译驱动:

 make
 sudo make install
 sudo modprobe 8192eu

    以上是正常编译Linux内核模块的步骤,同样make的时候可以加上-j4参数。

    实际上在树莓派上编译的时候有两个坑。首先是编译的时候会报错:

 -Werror=date-time/macro “__DATE__” might prevent reproducible builds

    解决这个错误只需要在Makefile中查找EXTRA_CFLAGS,并添加一行                        EXTRA_CFLAGS += -Wno-error=date-time即可。

    其次,我这个版本的驱动引用了strnicmp函数,但是目前的树莓派Linux内核源码(4.1.15+)并没有定义这个函数,不过定义了strncasecmp,功能是相同的。os_dep/linux/rtw_android.c驱动代码找到所有的strnicmp替换为strncasecmp即可。



注意:本文归作者所有,未经作者允许,不得转载