<1>Realtek RTL8188FU WiFi 驱动移植
1、芯片数据手册:TL8188FCA.pdf
2、驱动移植手册:Quick_Start_Guide_for_Driver_Compilation_and_Installation.pdf
3、【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.3.pdf
4、Linux 添加 WiFi 驱动:https://blog.csdn.net/sbddbfm/article/details/101222266
5、还有一些其他前辈的教程,十分感谢!
1、使用的新唐的 NUC980 系列 MCU ;
2、Linux 内核版本:4.4.179 ;
3、交叉编译链版本
arm-none-linux-gnueabi-gcc
gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29)
4、供应商提供的 WiFi 模块驱动源码;
1、将 RTL8188FU
驱动添加到 Linux
内核中;
在 drivers/net/wireless
路径新建文件夹 realtek_new
;
将驱动源码 RTL8188FU_Linux_v5.7.4_33085.20190626\driver\rtl8188FU_linux_v5.7.4_33085.20190419
解压后,放到 realtek_new
文件夹中;
修改文件夹名字为 rtl8188fu
;
2、修改 drivers/net/wireless/Kconfig
drivers/net/wireless/Kconfig
,在文件最后一行添加
source "drivers/net/wireless/realtek_new/Kconfig"
3、修改 drivers/net/wireless/Makefile
drivers/net/wireless/Makefile
,在文件最后一行添加
obj-y += realtek_new/
4、新增文件 drivers/net/wireless/realtek_new/Makefile
Makefile
,添加以下内容,保存
obj-$(CONFIG_RTL8188FU) += rtl8188fu/
5、新增文件 drivers/net/wireless/realtek_new/Kconfig
Kconfig
,添加以下内容,保存
menuconfig REALTEK_WIFI
tristate "Realtek wifi"
if REALTEK_WIFI
choice
prompt "select wifi type"
default RTL8189FU
config RTL8188FU
depends on REALTEK_WIFI
tristate "Realtek 8188FU USB WiFi"
endchoice
endif
6、关闭 Debug
功能
drivers/net/wireless/realtek_new/rtl8188fu/Makefile
;
CONFIG_RTW_DEBUG=y
改为
CONFIG_RTW_DEBUG=n
;
87 ########################## Debug ###########################
88 CONFIG_RTW_DEBUG = n
89 # default log level is _DRV_INFO_ = 4,
90 # please refer to "How_to_set_driver_debug_log_level.doc" to set the available level.
91 CONFIG_RTW_LOG_LEVEL = 4
92 ######################## Wake On Lan ##########################
1、配置 USB 支持设备
Device Drivers --->
[*] USB support --->
<*> Support for Host-side USB
<*> EHCI HCD (USB 2.0) support
<*> OHCI HCD (USB 1.1) support
<*> ChipIdea Highspeed Dual Role Controller
[*] ChipIdea host controller
[*] ChipIdea driver debug
2、配置支持 WiFi 设备
Device Drivers --->
[*] Network device support --->
[*] Wireless LAN --->
<*> IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP)
[*] Support downloading firmware images with Host AP driver
[*] Support for non-volatile firmware download
3、配置支持 IEEE 802.11
[*] Networking support --->
-*- Wireless --->
[*] cfg80211 wireless extensions compatibility
<*> Generic IEEE 802.11 Networking Stack (mac80211)
4、配置 RTL8188FU 驱动
Device Drivers --->
[*] Network device support --->
[*] Wireless LAN --->
<*> Realtek wifi --->
--- Realtek wifi
<*> select wifi type (Realtek 8188FU USB WiFi) --->
5、在内核源码文件夹根路径,运行命令:
make uImage -j16
6、编译完成;
1、将 WiFi 模块接入控制板;
2、使用新编译的内核,重新启动程序;
3、使用命令 ifconfig -a
测试;
4、如果可以看到 wlan0 网卡,则代表驱动可以正常工作;否则,请检查之前配置步骤是否有误;
5、我的测试结果如下:
[root]#ifconfig -a
dummy0 Link encap:Ethernet HWaddr 12:DE:F0:8F:D4:1B
BROADCAST NOARP MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
eth0 Link encap:Ethernet HWaddr 40:00:02:B3:D2:34
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:336 errors:0 dropped:138 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:95476 (93.2 KiB) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
wlan0 Link encap:Ethernet HWaddr 68:B9:D3:B2:90:C8
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
<2>Realtek RTL8188FU WiFi 连接路由
本篇文章分享一下 WiFi 连接路由的过程,希望对您能有帮助!
1、配置过程,部分参考资料如下:
2、解决问题,部分参考资料如下:
3、还有一些其他前辈的教程,十分感谢!
1、Ubuntu18.04 ,不加密环境,版本信息如下:
zhaoc@Ubuntu1804:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.5 LTS
Release: 18.04
Codename: bionic
zhaoc@Ubuntu1804:~$ uname -a
Linux Ubuntu1804 5.4.0-54-generic #60~18.04.1-Ubuntu SMP Fri Nov 6 17:25:16 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
2、Linux 内核版本:4.4.179 ;
3、交叉编译链版本
arm-none-linux-gnueabi-gcc
gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29)
在我实际调试过程中,最开始是通过命令行配置,到代码成熟后,使用脚本文件连接路由。
因此有三种方法:
命令配置过程,记录如下。
1、开启无线网卡,wlan0
ifconfig wlan0 up
2、使用配置文件自动连接,r8000.conf 配置文件可参考文章 WiFi 命令编译过程 ,或者参考文章末尾资料。
wpa_supplicant -iwlan0 -c ./r8000.conf -B
3、查看 WiFi 连接状态
wpa_cli -iwlan0 status
4、设置固定 IP 地址,子网掩码
ifconfig wlan0 192.168.60.1 netmask 255.255.255.0
5、查看 IP 地址
ifconfig
6、设置默认网关
route add default gw 192.168.60.254
备注:删除默认网关
route del default
7、查看默认网关
# 命令
route
# 测试结果
[root]#route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.60.254 0.0.0.0 UG 0 0 0 wlan0
192.168.60.0 * 255.255.255.0 U 0 0 0 wlan0
8、设置 DNS
# 编辑配置文件
vi /etc/resolv.conf
# 添加 DNS ,可自行尝试
nameserver 8.8.8.8
nameserver 223.5.5.5
nameserver 223.6.6.6
命令行修改 DNS 方法
# 修改 DNS ,根据参考资料进行配置;
echo nameserver 223.5.5.5 > /etc/resolv.conf
1、确定能正常检测到无线网卡(可正常看到网卡名)
ifconfig -a
2、停止有线网卡
ifconfig eth0 down
3、重启无线网卡
ifconfig wlan0 down
ifconfig wlan0 up
4、设置无线网卡使用配置文件连接 WiFi
wpa_supplicant -iwlan0 -c ./r8000.conf -B
5、使用无线网卡扫描 WiFi 测试
iwlist wlan0 scanning
6、配置无线网卡使用 DHCP 功能
udhcpc -i wlan0
7、查看无线网卡 IP 地址,是否获取成功
ifconfig -a
8、测试是否能正常联通外网
ping baidu.com
9、查看当前 WiFi 连接状态
wpa_cli -iwlan0 status
启动、停止过程,基本与命令行配置类似,只不过是全部封装为脚本,便于操作。
1、开启 WiFi 连接脚本
#/bin/sh
# 日志打印
echo "========================= $0 start ============================"
# 先杀死所有相关进程
killall hostapd udhcpd wpa_supplicant udhcpc
# 关闭无线网卡
ifconfig wlan0 down
# 打开无线网卡
ifconfig wlan0 up
# 延时1秒
sleep 1
# 开启WiFi连接
wpa_supplicant -iwlan0 -c /root/App/wifi.conf -B
# 配置自动获取IP
udhcpc -i wlan0
# 日志打印
echo "======================== $0 stop =============================="
2、关闭 WiFi 连接,仅杀死跟 WiFi 连接路由,有关的命令
#/bin/sh
echo "[root] killall wpa_supplicant udhcpc"
killall wpa_supplicant udhcpc
3、WiFi 基本配置文件:/root/App/wifi.conf
ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
network={
ssid="WiFi名称"
psk="WiFi密码"
}
1、r8000.conf 配置文件
(1)注意事项:
(2)配置文件内容如下:
[root]#cat r8000.conf
ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
network={
ssid="WiFi名称"
psk="WiFi密码"
}
1、刚开始调试时,由于不知道参数是否合适,就是用命令行,一句一句敲出来;直到代码基本确定了,才编写脚本。
2、现在想想,真是有点傻啊,为什么一开始不直接使用脚本?有问题,直接修改脚本里边的配置项,不就行了?
3、WiFi 连接路由,是最常使用的一个功能,期间遇到两个问题
(1)WiFi 连接路由后,网速很慢。经过测试,有几方面的原因:
(2)WiFi 连接路由后,不稳定。具体表现:ping 百度,延时忽高忽低。暂未发现具体原因。思考方向:
本篇文章介绍一下 WiFi 相关命令的交叉编译,希望对您能有帮助!
1、编译过程,部分参考资料如下:
2、解决问题,部分参考资料如下:
3、还有一些其他前辈的教程,十分感谢!
1、Ubuntu18.04 ,不加密环境,版本信息如下:
zhaoc@Ubuntu1804:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.5 LTS
Release: 18.04
Codename: bionic
zhaoc@Ubuntu1804:~$ uname -a
Linux Ubuntu1804 5.4.0-54-generic #60~18.04.1-Ubuntu SMP Fri Nov 6 17:25:16 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
2、Linux 内核版本:4.4.179 ;
3、交叉编译链版本
arm-none-linux-gnueabi-gcc
gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29)
1、简要记录驱动移植过程中,交叉编译的命令、依赖库。
2、简要说明作用及版本等信息。
1、使用的命令版本:4.9
目前发现 5.0 及以上版本用 arm-linux-gcc 编译都会报错,疑似交叉编译工具的 gcc 版本太低;
2、iw
命令是 iwconfig
命令的替代者,是 Linux 系统上的一款无线配置工具;
(1)参考资料:https://blog.csdn.net/qq_26602023/article/details/106115823
3、文件系统路径:/sbin
4、教程按照 v0.8.x_rtw_r24647.20171025
版本进行编译;
1、使用的命令版本:wpa_cli v0.8.x_rtw_r24647.20171025
2、wpa_cli
用来查看设备当前连接 WiFi 状态;
3、文件系统路径:/usr/sbin
1、使用的命令版本:未知;(应该与 wpa_cli
一致,即 v0.8.x_rtw_r24647.20171025
,使用的同一个源码包)
2、暂时未用到此命令;
3、文件系统路径:/usr/sbin
1、使用的命令版本:wpa_supplicant v2.9
2、命令作用:
(1)用于连接 WPA/WPA2
加密方式的 WiFi ;
(2)非加密方式的 WiFi ,也可使用此命令连接;
3、文件系统路径:/usr/sbin
1、使用的命令版本:hostapd v2.9
2、命令作用:
(1)配置 WiFi 开启 AP 模式;
(2)参考帮助文档,描述如下:
User space daemon for IEEE 802.11 AP management,
IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
3、文件系统路径:/bin
1、使用的命令版本:hostapd_cli v2.9
2、暂未使用;
3、文件系统路径:/bin
1、libnl-3.so.200
(1)使用的库版本:libnl-3.5.0.tar.gz
(2)作用:WiFi 相关命令依赖库;
(3)文件系统路径:/lib
2、libnl-genl-3.so.200
(1)使用的库版本:libnl-3.5.0.tar.gz
(2)作用:WiFi 相关命令依赖库;
(3)文件系统路径:/lib
3、libssl.so.1.1
(1)使用的库版本:openssl-1.1.1h.tar.gz
(2)作用:WiFi 相关命令依赖库;
(3)文件系统路径:/lib
4、libcrypto.so.1.1
(1)使用的库版本:openssl-1.1.1h.tar.gz
(2)作用:WiFi 相关命令依赖库;
(3)文件系统路径:/usr/lib
5、补充说明
(1)需要在实际使用命令时,查看缺少的依赖库;
(2)上述 4 个依赖库,是我自己在测试时,发现缺少的;
(3)测试方法:直接运行命令,查看错误提示,根据错误提示添加相应的库文件;
(4)示例代码如下:
[root]#hostapd
hostapd: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
[root]#
进行依赖库、命令的交叉编译。
1、解压并进入对应路径
# 解压文件
tar -zxvf openssl-1.1.1h.tar.gz
# 进入文件路径
cd openssl-1.1.1h/
2、配置环境变量文件
(1)创建并编辑 env_nuc980 文件
vim env_nuc980
(2)填入如下内容
export MACHINE=armv4
export RELEASE=4.4.179
export SYSTEM=linux2
export ARCH=arm
export CROSS_COMPILE="arm-none-linux-gnueabi-" # 指定交叉编译链
export HOSTCC=gcc # 指定gcc
(3)保存退出
(4)使用 source 命令使环境变量生效
source env_nuc980
3、修改相关编译配置选项
./config no-asm no-async shared --prefix=/home/zhaoc/11-Soft/13-NUC980/12-armCompileLib_2/11-install/openssl-1.1.1h_nuc980
(1)相关配置项说明
(2)安装路径需要修改为自己的安装路径;
4、make 编译;-j6 :使用 6 个逻辑内核同时编译,速度更快;
make -j6
5、安装编译后的文件,到对应路径
make install
1、解压并进入对应路径
# 解压文件
tar -zxvf libnl-3.5.0.tar.gz
# 进入对应路径
cd libnl-3.5.0/
2、Ubuntu 需安装必备工具,否则会报错
sudo aptitude install bison
sudo aptitude install flex
(1)没有安装对应软件时,报错内容如下
checking for dlfcn.h... (cached) yes
checking for pthread_mutex_lock in -lpthread... yes
checking for strerror_l... no
configure: WARNING: bison not found. Please install before continuing.
configure: WARNING: flex not found. Please install before continuing.
configure: error: Required packages are missing. Please install them and rerun /configure
root@qddytt:/opt/IPC3516EV200/libnl-3.5.0#
3、修改相关编译配置选项;注意修改为自己的安装路径
./configure --host=arm-none-linux-gnueabi --prefix=/home/zhaoc/11-Soft/13-NUC980/12-armCompileLib_2/11-install/libnl-3.5.0_nuc980
(1)相关配置项说明
(2)安装路径需要修改为自己的安装路径;
4、make 编译;-j6 :使用 6 个逻辑内核同时编译,速度更快;
make -j6
5、安装编译后的文件,到对应路径
make install
1、解压并进入对应路径
# 解压文件
tar -zxvf iw-4.9.tar.gz
# 进入对应路径
cd iw-4.9/
2、配置环境变量;对应 libnl 的安装路径下的 lib/
export PKG_CONFIG_PATH=/home/zhaoc/11-Soft/13-NUC980/12-armCompileLib_2/11-install/libnl-3.5.0_nuc980/lib/pkgconfig:$PKG_CONFIG_PATH
3、使用指定交叉编译链编译
make CC=arm-none-linux-gnueabi-gcc
4、编译完成后,可以使用 file
命令,查看下 iw 文件的属性
(1)本次使用 arm-none-linux-gnueabi-gcc
的属性如下
zhaoc@Ubuntu1804:~/11-Soft/13-NUC980/12-armCompileLib_2/12-sourcecode/iw-4.9$ file iw
iw: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /li
(2)之前使用 arm-linux-gcc
时(错误版本),类似文件( wpa_supplicant )属性如下
wpa_supplicant: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 3.2.0, BuildID[sha1]=abd215c0dc5a490e088db5fc57f26b1efa8b670e, not stripped
(3)命令属性,必须为 ARM
类型的才可以,否则 不能在板子上正常运行 。
1、解压并进入对应路径
# 解压文件
tar -zxvf wpa_supplicant_hostapd-0.8_rtw_r24647.20171025.tar.gz
# 进入对应路径
cd wpa_supplicant_hostapd-0.8_rtw_r24647.20171025/wpa_supplicant/
2、编辑 Makefile 文件,修改使用的交叉编译链(两处修改),保存退出;
ifndef CC
CC=arm-none-linux-gnueabi-gcc
endif
ifndef CFLAGS
CFLAGS = -MMD -O2 -Wall -g
endif
CC=arm-none-linux-gnueabi-gcc
export LIBDIR ?= /usr/local/lib/
make 编译;-j6 :使用 6 个逻辑内核同时编译,速度更快;
make -j6
1、解压并进入对应路径
# 解压文件
tar -zxvf hostapd-2.9.tar.gz
# 进入对应路径
cd hostapd-2.9/hostapd/
2、使用默认配置文件,创建 config 文件
cp defconfig .config
3、使用 vim 修改 .config ,(取消注释)
#CONFIG_IEEE80211N=y
改为
CONFIG_IEEE80211N=y
否则后续会报错:
~ # hostapd ./hostapd.conf
Configuration file: ./hostapd.conf
Line 7: unknown configuration item 'ieee80211n'
1 errors found in configuration file './hostapd.conf'
Failed to set up interface with ./hostapd.conf
Failed to initialize interface
显示行号路径如下:
156
157 # IEEE 802.11n (High Throughput) support
158 CONFIG_IEEE80211N=y
159
4、备份 Makefile 文件,免得误操作之后还要重新解压一份文件;
cp Makefile Makefile.bak
5、编辑 Makefile 文件,新增如下内容,注意是 新增内容 ;
CC=arm-none-linux-gnueabi-gcc
CFLAGS += -I /home/zhaoc/11-Soft/13-NUC980/14-armCompileLib_20201201/11-install/libnl-3.5.0_nuc980/include
LIBS += -L /home/zhaoc/11-Soft/13-NUC980/14-armCompileLib_20201201/11-install/libnl-3.5.0_nuc980/lib
CFLAGS += -I /home/zhaoc/11-Soft/13-NUC980/14-armCompileLib_20201201/11-install/openssl-1.1.1h_nuc980/include
LIBS += -L /home/zhaoc/11-Soft/13-NUC980/14-armCompileLib_20201201/11-install/openssl-1.1.1h_nuc980/lib -lcrypto -lssl
LDFLAGS += -lpthread
LDFLAGS += -lm
6、添加环境变量,如下所示;
export PKG_CONFIG_PATH=/home/zhaoc/11-Soft/13-NUC980/14-armCompileLib_20201201/11-install/libnl-3.5.0_nuc980/lib/pkgconfig:$PKG_CONFIG_PATH
7、make 编译;-j6 :使用 6 个逻辑内核同时编译,速度更快;
make -j6
8、编译完成后,就会在当前目录生成所需的 hostapd
,hostapd_cli
文件,不需要 make install
即可;
9、使用 file 命令,查看编译后的文件属性,如果属性为 ARM ,即代表可以在开发板上运行;
zhaoc@Ubuntu1804:~/11-Soft/13-NUC980/13-armCompileLib_20201130/12-sourcecode/hostapd-2.9/hostapd$ file hostapd
hostapd: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.16, with debug_info, not stripped
至此,所有使用到的命令均已编译完毕。
分两步进行,第一步将命令放到文件系统中;第二步测试连接 WiFi 是否正常。
1、替换 wpa_cli wpa_passphrase wpa_supplicant
# 进入对应目录
cd /usr/sbin/
# 查看当前目录文件
ls -l
# 删除文件
rm wpa_cli wpa_passphrase wpa_supplicant
# 拷贝交叉编译好的命令到当前目录
lrz
# 赋予可执行权限
chmod 777 wpa_cli wpa_passphrase wpa_supplicant
# wpa_supplicant 测试
wpa_supplicant
# wpa_passphrase 测试
wpa_passphrase
# wpa_cli 测试
wpa_cli
2、替换 iw
# 进入对应目录
cd /sbin/
# 拷贝 iw 到此目录
lrz
chmod 777 iw
# 输入命令
iw
libnl-genl-3.so.200
;
libnl
安装路径中拷贝对应库文件进来即可;
11-install\libnl-3.5.0_nuc980\lib
chmod 755 libnl-genl-3.so.200
iw
测试命令,提示缺少库文件:
libnl-3.so.200
;
1、新增连接 WiFi 的配置文件
(1)创建新文件
# 开发板没有 vim
vi r8000.conf
(2)填入如下内容
ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
network={
ssid="WIFI名称"
psk="WIFI密码明文"
}
2、配置连接 WiFi
# 查看网卡连接状态
wpa_cli -iwlan0 status
# 使用配置文件连接 WiFi
wpa_supplicant -iwlan0 -c ./r8000.conf -B
# 开启网卡(可选)
ifconfig wlan0 up
# 再次查看网卡连接状态
wpa_cli -iwlan0 status
# 设置固定 IP 地址,子网掩码
ifconfig wlan0 192.168.60.1 netmask 255.255.255.0
# 设置默认网关
route add default gw 192.168.60.254
# 修改 DNS ,根据参考资料进行配置;
echo nameserver 223.5.5.5 > /etc/resolv.conf
3、使用 ping 测试 WiFi ,验证是否正常;
ping baidu.com
4、如果可以能 ping 通,则表示命令可以正常运行。
本教程为自己在实际使用过程中的经验总结,希望能够帮到您。
好了,本期内容就是这样,祝您一切顺利,我们下期再见!
点击关注公众号,回复【1024】免费领学习资料