NanoPi NEO Air使用十三:移植RTL8723BU驱动
Posted 丘木木
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NanoPi NEO Air使用十三:移植RTL8723BU驱动相关的知识,希望对你有一定的参考价值。
NanoPi NEO Air使用一:介绍
NanoPi NEO Air使用二:固件烧录
NanoPi NEO Air使用三:OverlayFS、CPU温度和频率、wifi、蓝牙、npi-config
NanoPi NEO Air使用四:操作GPIO
NanoPi NEO Air使用五:安装Xfce和xrdp,实现远程访问
NanoPi NEO Air使用六:使用摄像头
NanoPi NEO Air使用七:获取并编译U-boot和Linux的源码
NanoPi NEO Air使用八:编写个简单的驱动和应用程序
NanoPi NEO Air使用九:使用Linux内核自带的LED驱动
NanoPi NEO Air使用十:自己编写驱动来控制LED
NanoPi NEO Air使用十一:编写SPI驱动点亮TFT屏幕,ST7789V
NanoPi NEO Air默认只支持如下USB驱动:
序号 | 型号 |
---|---|
1 | RTL8188CUS/8188EU 802.11n WLAN Adapter |
2 | RT2070 Wireless Adapter |
3 | RT2870/RT3070 Wireless Adapter |
4 | RTL8192CU Wireless Adapter |
5 | 小米WiFi mt7601 |
6 | 5G USB WiFi RTL8821CU |
7 | 5G USB WiFi RTL8812AU |
如果要使用RTL8723BU就需要自己移植驱动了。
获取驱动
首先去github上下载RTL8723BU的驱动,链接
从redame.md文档得知4.3.16分支比主分支更好,因此也可以选择4.3.16分支来使用。
下载下来后,把驱动放到\\drivers\\net\\wireless\\目录,并解压
使驱动生效
拷贝后我们就要让内核加载这个驱动,或者我们把它编译成模块。
因此我们就需要修改\\drivers\\net\\wireless\\这个目录下的Makefile和Kconfig文件
在Kconfig文件中添加以下部分
source "drivers/net/wireless/rtl8723BU/Kconfig"
这样我们就可以在make menuconfig中配置这个驱动
在Makefile文件中添加以下部分
obj-$(CONFIG_RTL8723BU) += rtl8723BU/
修改驱动的makefile
只是修改\\drivers\\net\\wireless\\目录下的Makefile和Kconfig文件已经能正常测试了,但是wifi的信号很差,在网上了查找了半天资料才知道还需要修改驱动目录中的makefile。
首先在Platform Related下面添加CONFIG_PLATFORM_ARM_H3 = y
,并把其他的y改为n
然后在下面配置编译规则:
ifeq ($(CONFIG_PLATFORM_ARM_H3), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
#ifeq ($(CONFIG_USB_HCI), y)
#EXTRA_CFLAGS += -DCONFIG_USE_USB_BUFFER_ALLOC_TX -DCONFIG_FIX_NR_BULKIN_BUFFER
#endif
ARCH := arm
CROSS_COMPILE := arm-linux-
KVER := 4.14.111
KSRC := /home/ql/linux/H3ql/linux
MODULE_NAME := 8723bu
endif
解释:
ifeq ($(CONFIG_PLATFORM_ARM_H3), y) //将要编译的平台,与上面的平台要一致
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN //不需要更改
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT //不需要更改
#SUBARCH := $(shell uname -m | sed -e s/i.86/i386/) //不用,注释
ARCH := arm //架构(体系结构)
CROSS_COMPILE :=/usr/local/arm/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchai
n/bin/arm-fsl-linux-gnueabi- //交叉编译器,建议使用绝对路径
KVER := 4.14.111 //ARM Linux 的内核版本
KSRC := /home/ql/linux/H3ql/linux //EVB-P6UL 的内核源码路径
endif
make menuconfig设置
接下来就make menuconfig,但是我们不仅要加载这个驱动,还需要配置内核使其支持wifi和usb,因为RTL8723是通过USB接在开发板上面的。
1.支持USB设备
2.支持WIFI设备
3.支持无线网络IEEE 802.11
最后是我们的RTL8723
我们选择将其编译为模块
编译内核、使用
编译内核
make XXXconfig ARCH=arm CROSS_COMPILE=arm-linux-
make zImage ARCH=arm CROSS_COMPILE=arm-linux-
make modules ARCH=arm CROSS_COMPILE=arm-linux- //生成8723bu.ko
把8723bu.ko拷贝到开发板中执行insmod 8723bu.ko
加载
之后可以使用iwlist scan
来扫描wifi热点
查看网络设备列表
nmcli dev
注意,如果列出的设备状态是 unmanaged 的,说明网络设备不受NetworkManager管理,你需要清空 /etc/network/interfaces下的网络设置,然后重启.
-
开启WiFi
nmcli r wifi on
-
扫描附近的 WiFi 热点(按q退出列表状态)
nmcli dev wifi
-
连接到指定的 WiFi 热点
nmcli dev wifi connect "SSID" password "PASSWORD" ifname wlan0
请将 SSID和 PASSWORD 替换成实际的 WiFi名称和密码。
连接成功后,下次开机,WiFi 也会自动连接。
此时可以看到wlan0网口已经有ip了,ping百度也通了,说明网络连接已经正常了。
rtl8xxxu冲突问题
在网上看到这篇文章说RTL8723BU的驱动程序无法与标准驱动程序rtl8xxxu一起工作,因此需要将其列入黑名单。
在系统运行起来后,执行lsmod
能看到有个rtl8xxxu
,把他加入黑名单禁用就行了:
运行以下命令
sudo nano /etc/modprobe.d/blacklist-rtl8xxxu.conf
添加一行
blacklist rtl8xxxu
RTL8723BU驱动两个大坑
按照上面方法移植驱动后,能否用起来了,但是还有两个坑:
1、insmod驱动后,会出来两个wlan
看网上的说法“有两个wlan不是bug,realtek网卡驱动默认就是这样,有一个可以作为ap,关掉一个宏就只剩下一个了。”
2、网络连接不稳定,有时候突然就断了。
在网上各种找资料后发现还需要修改下驱动下的Makefile文件:
首先把省电模式关闭:(解决连接不稳定的问题)
然后并发模式关闭:(解决出来两个wlan的问题)
把EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
注释掉
以上是关于NanoPi NEO Air使用十三:移植RTL8723BU驱动的主要内容,如果未能解决你的问题,请参考以下文章
NanoPi NEO Air使用十三:使用自带的fbtft驱动点亮SPI接口TFT屏幕,ST7789V,模块加载的方式