当前内核版本为:
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即可。
注意:本文归作者所有,未经作者允许,不得转载