为什么要移植?开发板不是已经提供了无线驱动吗?
貌似是这样的。。本来是好用的。加入自己第三方驱动后发现WIFI用不了。。。最后发现飞凌提供的内核里面没有8189芯片的代码。。。问售后他们说那边是好的。这么到我这里就不行了呢?妈蛋。。。郁闷了。。。智能自己动手,把驱动移植进去。。。
1 找8189es芯片的原厂驱动代码:这里我找了N久,传到网盘里。。。
http://pan.baidu.com/s/1bn7Gz6n
2 解压拷贝
tar jxvf rtl8288EUS_rtl8189ES_linux_v4.1.8_9499.20131104.tar.tgz
修改文件夹名字:8189ES
拷贝:cp -rf 8189ES /opt/linux-3.0.1/driver/net/wireless/
3 修改配置,打包进内核。
代码默认是USB接口的。。。必须改成SDIO
修改文件:8189ES/Makefile
CONFIG_USB_HCI = n CONFIG_SDIO_HCI = y
CONFIG_PLATFORM_I386_PC = n
CONFIG_PLATFORM_ARM_S3C6K4 = y
ifeq ($(CONFIG_PLATFORM_ARM_S3C6K4), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
ARCH := arm
CROSS_COMPILE := arm-none-linux-gnueabi-
KVER := 3.0.1
KSRC ?= /opt/linux-3.0.1
endif
修改8189ES/Kconfig ,为了能打包进kernel
config SDIO_HCI tristate "sdio hci default y" depends on USB ---help--- Help message of sdio hci
在/opt/linux-3.0.1/driver/net/wireless/Kconfig插入代码
source "drivers/net/wireless/8189ES/Kconfig"
在/opt/linux-3.0.1/driver/net/wireless/Makefile插入代码
obj-$(CONFIG_SDIO_HCI) += 8189ES/
4 修改驱动部分代码:
4.修改内核驱动文件,./drivers/net/wireless/rtl8189es/include/autoconf.h 4.1)去掉usb相关配置 把 #define CONFIG_USB_HCI 改成: //#define CONFIG_USB_HCI 4.2)去掉usb发送接收相关配置 把 #ifndef CONFIG_MINIMAL_MEMORY_USAGE #define CONFIG_USB_TX_AGGREGATION #define CONFIG_USB_RX_AGGREGATION #endif 改成: /*#ifndef CONFIG_MINIMAL_MEMORY_USAGE #define CONFIG_USB_TX_AGGREGATION #define CONFIG_USB_RX_AGGREGATION #endif*/ 4.3)去掉wifi关断检测相关配置 把 #define SUPPORT_HW_RFOFF_DETECTED 改成: // #define SUPPORT_HW_RFOFF_DETECTED
5.修改内核驱动文件,添加头文件包含:
5.1)修改./drivers/net/wireless/rtl8189es/hal/rtl8188e/sdio/rtl8189es_xmit.c文件,添加: #include <rtw_xmit.h> 5.2)修改,./drivers/net/wireless/rtl8189es/include/rtw_xmit.h文件,添加: #include <autoconf.h> 6.修改内核驱动文件,添加数组定义./drivers/net/wireless/rtl8189es/os_dep/linux/sdio_intf.c文件 添加: int ui_pid[3] = {0, 0, 0};
6 cp 8189ES/autoconf_rtl8189e_sdio_linux.h /opt/linux-3.0.1
7编译后wifi正常工作。。。
但只要操作IO口,WIFI启动就会失败。。
最后看原理图发现SDIO与GPIO都用了GPP10,GP11
把 这2口去了。。完事大吉