Linux内核版本算是蛮多的,版本越高其内核自带的驱动也是越多,对于低版本如何使用高版本中的驱动是个问题,左栋提醒使用backports来做移植,尝试一下。
/************************************************************************
* backports移植rtlwifi驱动
* 说明:
* Linux内核版本算是蛮多的,版本越高其内核自带的驱动也是越多,对于低版本
* 如何使用高版本中的驱动是个问题,左栋提醒使用backports来做移植,尝试一下。
*
* 2017-9-13 深圳 龙华樟坑村 曾剑锋
***********************************************************************/
一、参考文档:
1. backports: Linux kernel backports
http://drvbp1.linux-foundation.org/~mcgrof/rel-html/backports/
2. ubuntu15.04安装Atheros AR8161网卡驱动
https://jingyan.baidu.com/article/3ea51489d814c052e71bba7a.html
3. ath10k backports releases
https://wireless.wiki.kernel.org/en/users/drivers/ath10k/backports
4. Linux wifi backports cross compile
https://stackoverflow.com/questions/18855554/linux-wifi-backports-cross-compile
5. compat: exports duplicate symbol clk_disable (owned by kernel)
corehtml5canvas.com/code-live/
6. cfg80211: exports duplicate symbol __ieee80211_get_channel (owned by kernel)
http://blog.csdn.net/wuqingwei/article/details/53374309
7. Beaglebone Black fails in installing RTL8892CU WIfi module
https://github.com/beagleboard/kernel/issues/39
二、backports编译、测试:
1. Download backports:
http://www.kernel.org/pub/linux/kernel/projects/backports/stable/v4.2.6/backports-4.2.6-1.tar.xz
2. 参考教程:https://wireless.wiki.kernel.org/en/users/drivers/ath10k/backports
3. 配置交叉编译器和硬件架构:
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
4. 修改Makefile,主要是修改内核目录,编译后库目录:
...
KMODDIR ?= updates
KLIB := /home/Qt/kernel/RTL8188/backports-4.2.6-1/
ifneq ($(origin KLIB), undefined)
KMODPATH_ARG := "INSTALL_MOD_PATH=$(KLIB)"
else
# KLIB := /lib/modules/$(shell uname -r)/
KLIB := /home/Qt/kernel/RTL8188/backports-4.2.6-1/
KMODPATH_ARG := "INSTALL_MOD_PATH=$(KLIB)"
endif
KLIB=/home/Qt/kernel/RTL8188/backports-4.2.6-1/
# KLIB_BUILD ?= $(KLIB)/build/
KLIB_BUILD ?= /home/Qt/kernel/linuxQt_kernel/
...
5. make defconfig-rtlwifi
6. make
7. 拷贝当前目录下lib目录到文件系统lib目录
8. 下载rtl8192cufw.bin,并拷贝到文件系统/lib/firmware/rtlwifi/:
https://github.com/beagleboard/kernel/issues/39
9. wpa_supplicant:
1. configure:
[zengjf@root ~]# cat /etc/wpa_supplicant.conf
network={
ssid="LTE_CPE_EDEDBE"
psk="EDEDBED2"
}
2. wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf
3. wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf &
4. wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf > /dev/null 2>&1 &
10. dhcpcd wlan0 获取ip,路由;
11. 如果有双网卡,需要检查route表,是否将无线网卡的路由放在第一个,路由表默认采用第一个通信;
三、注意事项:
* 主要是要注意解决其中的duplicate symbol之类的问题,因为内核中可能选择了,在backports中有选择了,导致双重声明,或者没有声明之类的错误。
* 在移植的时候,有将内核中80211功能关闭,保存config,然后又打开,保存config,这样内核中的80211的选项就是默认的,之后内核就可以了。