admin管理员组

文章数量:1636900

文章目录

  • 参考博客
    • github上面的源码
    • 神仙网站
  • 一、驱动移植
  • 二、内核配置
    • 1、配置USB支持设备
    • 2、配置支持WIFI设备
    • 3、配置支持IEEE 802.11
  • 三、编译、拷贝和运行
    • 1、运行测试
    • 2、连接WIFI
    • 3、设置上电自动连接WIFI

这里移植的是RTL8188EU,可以兼容RTL8188ETV

参考博客

Linux使用wifi(RTL8188EUS)
linux USB无线网卡(RTL8188EUS)驱动
全志A40i移植 RTL8188FTV/RTL8188FU USB-WiFi

Linux无线网卡芯片RTL8188EUS驱动安装

rtl8188eu 驱动移植

详细记录丨Realtek RTL8188FU WiFi 移植超详细步骤

1、编译过程,部分参考资料如下:

  • 【推荐】Linux 添加 WiFi 驱动(https://blog.csdn/sbddbfm/article/details/101222266)
  • linux下wifi工具iw的交叉编译(https://blog.csdn/weixin_42432281/article/details/85786866)
  • rtl8188 驱动移植 wifi工具移植(https://blog.csdn/wmdshhzsmile/article/details/102792811)
  • rtl8188 驱动移植 wifi工具移植(https://blog.csdn/wmdshhzsmile/article/details/102792811)
  • rtl8188etv 无线网卡驱动移植(https://blog.csdn/imlsq/article/details/72844532)

2、解决问题,部分参考资料如下:

  • 【问题1】line 1: syntax error: unexpected word (expecting “)”)(https://blog.csdn/qq_26093511/article/details/78932765)
  • 【问题2】wifi模块配置ap模式下出现的问题(https://blog.csdn/qq_41877422/article/details/103194360)

github上面的源码

源码一:https://github/quickreflex/rtl8188eus
源码二:https://github/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/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
PING www.baidu (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 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

本文标签: 嵌入式模块接口Linuxusb