文章目录
这里移植的是RTL8188EU,可以兼容RTL8188ETV
参考博客
Linux使用wifi(RTL8188EUS)
linux USB无线网卡(RTL8188EUS)驱动
全志A40i移植 RTL8188FTV/RTL8188FU USB-WiFi
详细记录丨Realtek RTL8188FU WiFi 移植超详细步骤
1、编译过程,部分参考资料如下:
- 【推荐】Linux 添加 WiFi 驱动(https://blog.csdn.net/sbddbfm/article/details/101222266)
- linux下wifi工具iw的交叉编译(https://blog.csdn.net/weixin_42432281/article/details/85786866)
- rtl8188 驱动移植 wifi工具移植(https://blog.csdn.net/wmdshhzsmile/article/details/102792811)
- rtl8188 驱动移植 wifi工具移植(https://blog.csdn.net/wmdshhzsmile/article/details/102792811)
- rtl8188etv 无线网卡驱动移植(https://blog.csdn.net/imlsq/article/details/72844532)
2、解决问题,部分参考资料如下:
- 【问题1】line 1: syntax error: unexpected word (expecting “)”)(https://blog.csdn.net/qq_26093511/article/details/78932765)
- 【问题2】wifi模块配置ap模式下出现的问题(https://blog.csdn.net/qq_41877422/article/details/103194360)
github上面的源码
源码一:https://github.com/quickreflex/rtl8188eus
源码二:https://github.com/lwfinger/rtl8188eu
quickreflex的github上有说:支持 rtl8188eu、rtl8188eus 和 rtl8188etv 芯片的 Wifi 驱动程序,并在新的 linux 内核 (5.1.x) 下工作。
lwfinger的代码一直在更新。
Linux无线网卡芯片RTL8188EUS驱动安装文章中指出对两种驱动都进行了安装,测试发现,lwfinger的驱动仍然无法创建ap, 而quickreflex的驱动则可以完美创建ap(使用create_ap ), 问题解决. 另外,也有一些其它的驱动,例如realtek官方提供的驱动(2013年的),其版本太老,无法编译(内核版本不支持).
神仙网站
查无线网卡芯片的网站:https://wikidevi.wi-cat.ru/Main_Page
瑞昱的无线网卡芯片:https://wikidevi.wi-cat.ru/Realtek
一、驱动移植
驱动移植常用命令:
- 配置内核:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
- 编译内核:
time make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16
- 拷贝内核到启动卡:
sudo cp ./arch/arm/boot/zImage /media/liefyuan/BOOT/
- 拷贝驱动模块到启动卡:
sudo cp ./drivers/staging/rtl8188eu/r8188eu.ko /media/liefyuan/rootfs/lib/modules/
- 安全弹出启动卡:
sudo sync&&eject /dev/sdb
下载lwfinger源码,解压出来,拷贝到kernel的drivers/net/wireless/realtek/rtlwifi目录,改个名字为rtl8188eu。
如下:
其实该目录下还有一个名为的rtl8188eufw.bin的固件到时候要拷贝到开发板的根文件系统
/lib/firmware/rtlwifi/
目录下:
编辑:drivers/net/wireless/realtek/rtlwifi/Kconfig
文件,注释掉RTL8192CU相关配置,并增加RTL8188EU配置,如下:
#config RTL8192CU
# tristate "Realtek RTL8192CU/RTL8188CU USB Wireless Network Adapter"
# depends on USB
# select RTLWIFI
# select RTLWIFI_USB
# select RTL8192C_COMMON
# ---help---
# This is the driver for Realtek RTL8192CU/RTL8188CU 802.11n USB
# wireless network adapters.
#
# If you choose to build it as a module, it will be called rtl8192cu
config RTL8188EU
tristate "Realtek 8188EU USB WiFi"
depends on USB
select RTLWIFI
select RTLWIFI_USB
select RTL8192C_COMMON
---help---
Help message of RTL8188EU
编辑:drivers/net/wireless/realtek/rtlwifi/Makefile
文件,注释掉RTL8192CU相关配置,如下:
# SPDX-License-Identifier: GPL-2.0
obj-$(CONFIG_RTLWIFI) += rtlwifi.o
rtlwifi-objs := \
base.o \
cam.o \
core.o \
debug.o \
efuse.o \
ps.o \
rc.o \
regd.o \
stats.o
rtl8192c_common-objs += \
obj-$(CONFIG_RTLWIFI_PCI) += rtl_pci.o
rtl_pci-objs := pci.o
obj-$(CONFIG_RTLWIFI_USB) += rtl_usb.o
rtl_usb-objs := usb.o
obj-$(CONFIG_RTL8192C_COMMON) += rtl8192c/
obj-$(CONFIG_RTL8192CE) += rtl8192ce/
#obj-$(CONFIG_RTL8192CU) += rtl8192cu/
obj-$(CONFIG_RTL8192SE) += rtl8192se/
obj-$(CONFIG_RTL8192DE) += rtl8192de/
obj-$(CONFIG_RTL8723AE) += rtl8723ae/
obj-$(CONFIG_RTL8723BE) += rtl8723be/
obj-$(CONFIG_RTL8188EE) += rtl8188ee/
obj-$(CONFIG_RTLBTCOEXIST) += btcoexist/
obj-$(CONFIG_RTL8723_COMMON) += rtl8723com/
obj-$(CONFIG_RTL8821AE) += rtl8821ae/
obj-$(CONFIG_RTL8192EE) += rtl8192ee/
然后,内屏配置的时候就出现了可以配置的界面了:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
拷贝.ko文件到文件系统中/lib/modules目录中:
二、内核配置
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
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设备
我的是linux5.2他的目录是:
Device Drivers --->
[*] Network device support --->
[*] Wireless LAN --->
[*] Intersil devices
<*> 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
之前用的是linux4.X的kernel,这个配置不是在Intersil devices子目录下的而是在上一个配置目录上的一眼就可以看到的。linux5.2变了,搞的找了好久都没有看到这个配置。
3、配置支持IEEE 802.11
三、编译、拷贝和运行
- 编译内核:
time make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16
- 拷贝内核到开发板:
sudo cp ./arch/arm/boot/zImage /media/liefyuan/BOOT/
- 拷贝WIFI驱动模块到开发板:
sudo cp ./drivers/staging/rtl8188eu/r8188eu.ko /media/liefyuan/rootfs/lib/modules/
- 拷贝WIFI固件到开发板:
sudo cp ./drivers/net/wireless/realtek/rtlwifi/rtl8188eu/rtl8188eufw.bin /media/liefyuan/rootfs/lib/firmware/rtlwifi
1、运行测试
参考:https://blog.csdn.net/L1643319918/article/details/125244982
安装驱动模块:
# insmod /lib/modules/r8188eu.ko
[ 29.833682] r8188eu: module is from the staging directory, the quality is unknown, you have been warned.
[ 29.860682] Chip Version Info: CHIP_8188E_Normal_Chip_TSMC_D_CUT_1T1R_RomVer(0)
[ 29.902286] usbcore: registered new interface driver r8188eu
# lsmod
Module Size Used by Tainted: G
r8188eu 368640 0
# ifconfig -a
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:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
wlan0 Link encap:Ethernet HWaddr CC:D2:9B:38:64:D6
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)
打开wlan0:
# ifconfig wlan0 up
[ 38.520346] MAC Address = cc:d2:9b:38:64:d6
#
2、连接WIFI
其他测试:
- 扫描路由器:
iwlist wlan0 scan
连接的 WIFI 热点扫描到以后就可以连接了,先在开发板根文件系统的/etc 目录下创建一个名为“wpa_supplicant.conf”的配置文件,此文件用于配置要连接的 WIFI 热点以及 WIFI 秘码,比如我要连接到“MERCURY_6666”这个热点上,因此 wpa_supplicant.conf 文件内容如下所示:
# vi /etc/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
network={
ssid="MERCURY_6666"
key_mgmt=WPA-PSK
proto=WPA2
pairwise=CCMP
psk="1234567"
}
-
ssid 是要连接的 WIFI 热点名字,这里我要连接的是“MERCURY_6666”这个 WIFI 热点。
-
psk 就是要连接的 WIFI 热点密码,根据自己的实际情况填写即可。
-
注意, wpa_supplicant.conf 文件对于格式要求比较严格,“=”前后一定不能有空格,也不要用 TAB 键来缩进,比如第 4 行和 5 行的缩进应该采用空格,否则的话会出现 wpa_supplicant.conf文件解析错误!最重要的一点!
-
wpa_supplicant.conf 文件内容要自己手动输入,不要偷懒复制粘贴!!!
-
wpa_supplicant.conf 文 件 编 写 好 以 后 再 在 开 发 板 根 文 件 系 统 下 创 建 一 个
/var/run/wpa_supplicant
目录, wpa_supplicant 工具要用到此目录!命令如下:
创建一个socket通信的目录
mkdir /var/run/wpa_supplicant -p
一切准备好以后就可以使用 wpa_supplicant 工具让 RTL8188 USB WIFI 连接到热点上,输入如下命令:
wpa_supplicant -D wext -c /etc/wpa_supplicant.conf -i wlan0 &
# wpa_supplicant -D wext -c /etc/wpa_supplicant.conf -i wlan0 &
# Successfully initialized wpa_supplicant
rfkill: Cannot get wiphy information
ioctl[SIOCSIWAP]: Operation not permitted
ioctl[SIOCSIWENCODEEXT]: Invalid argument
ioctl[SIOCSIWENCODEEXT]: Invalid argument
wlan0: Trying to associate with c8:e7:d8:34:27:84 (SSID='MERCURY_2784' freq=2462 MHz)
wlan0: Association request to the driver failed
[ 387.033540] R8188EU: assoc success
wlan0: Associated with c8:e7:d8:34:27:84
wlan0: WPA: Key negotiation completed with c8:e7:d8:34:27:84 [PTK=CCMP GTK=CCMP]
wlan0: CTRL-EVENT-CONNECTED - Connection to c8:e7:d8:34:27:84 completed [id=0 id_str=]
当 RTL8188 连接到 WIFI 热点上以后会输出“wlan0: CTRL-EVENTCONNECTED”字样。接下来就是最后一步了,设置 wlan0 的 IP 地址,这里使用 udhcpc 命令从路由器申请 IP 地址,输入如下命令:
udhcpc -i wlan0 //从路由器获取 IP 地址
# udhcpc -i wlan0
udhcpc: started, v1.27.2
udhcpc: sending discover
udhcpc: sending select for 192.168.1.103
udhcpc: lease of 192.168.1.103 obtained, lease time 7200
deleting routers
adding dns 202.96.134.33
adding dns 202.96.128.68
测试一下网络通信
# ifconfig -a
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:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
wlan0 Link encap:Ethernet HWaddr CC:D2:9B:38:64:D6
inet addr:192.168.1.103 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:11 errors:0 dropped:3 overruns:0 frame:0
TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2463 (2.4 KiB) TX bytes:1837 (1.7 KiB)
# ping www.baidu.com
PING www.baidu.com (14.215.177.39): 56 data bytes
64 bytes from 14.215.177.39: seq=0 ttl=56 time=9.775 ms
64 bytes from 14.215.177.39: seq=1 ttl=56 time=10.165 ms
64 bytes from 14.215.177.39: seq=2 ttl=56 time=9.079 ms
64 bytes from 14.215.177.39: seq=3 ttl=56 time=9.456 ms
64 bytes from 14.215.177.39: seq=4 ttl=56 time=8.884 ms
^C
--- www.baidu.com ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 8.884/9.471/10.165 ms
没有问题!!
3、设置上电自动连接WIFI
在/etc/init.d/rcS
文件中的最后一行添加
vi /etc/init.d/rcS
insmod /lib/modules/r8188eu.ko
sleep 1s
ifconfig wlan0 up
sleep 1s
wpa_supplicant -D wext -c /etc/wpa_supplicant.conf -i wlan0 &
sleep 3s
udhcpc -i wlan0
sleep 1s