移植的驱动为usb RTL8188EUS的驱动。
一、先拿到realtek的驱动源码。
realtek# tree -d
.
├── rtl8188EUS
│ ├── core
│ │ └── efuse
│ ├── hal
│ │ ├── hal_hci
│ │ ├── led
│ │ ├── OUTSRC
│ │ │ └── rtl8188e
│ │ ├── OUTSRC-BTCoexist
│ │ └── rtl8188e
│ │ └── usb
│ ├── include
│ │ ├── byteorder
│ │ └── linux
│ ├── os_dep
│ │ └── linux
│ └── platform
├── rtl8189FS
│ ├── core
│ │ └── efuse
│ ├── hal
│ │ ├── btc
│ │ ├── efuse
│ │ │ └── rtl8188f
│ │ ├── hal_hci
│ │ ├── led
│ │ ├── phydm
│ │ │ ├── rtl8188f
│ │ │ └── txbf
│ │ └── rtl8188f
│ │ └── sdio
│ ├── include
│ │ ├── byteorder
│ │ └── linux
│ ├── os_dep
│ │ └── linux
│ └── platform
├── rtl8192CU
│ ├── core
│ │ └── efuse
│ ├── hal
│ │ └── rtl8192c
│ │ └── usb
│ ├── include
│ │ ├── byteorder
│ │ └── linux
│ └── os_dep
│ └── linux
└── rtl8723BU
├── core
│ └── efuse
├── hal
│ ├── efuse
│ │ └── rtl8723b
│ ├── hal_hci
│ ├── led
│ ├── OUTSRC
│ │ └── rtl8723b
│ ├── OUTSRC-BTCoexist
│ └── rtl8723b
│ └── usb
├── include
│ ├── byteorder
│ └── linux
├── os_dep
│ └── linux
└── platform
其实我们只需要里面的rtl8188EUS目录。
二、将realtek目录加入到driver/net/wireless目录下
去除wireless下原有的rtlwifi驱动(我们加入的realtek是全新的驱动,所以不需要它了),同时加上realtek的配置
打开wireless下面的Kconfig
.....
.....
source "drivers/net/wireless/ath/Kconfig"
source "drivers/net/wireless/b43/Kconfig"
source "drivers/net/wireless/b43legacy/Kconfig"
source "drivers/net/wireless/bcmdhd/Kconfig"
source "drivers/net/wireless/brcm80211/Kconfig"
source "drivers/net/wireless/hostap/Kconfig"
source "drivers/net/wireless/ipw2x00/Kconfig"
source "drivers/net/wireless/iwlwifi/Kconfig"
source "drivers/net/wireless/iwlegacy/Kconfig"
source "drivers/net/wireless/libertas/Kconfig"
source "drivers/net/wireless/orinoco/Kconfig"
source "drivers/net/wireless/p54/Kconfig"
source "drivers/net/wireless/rt2x00/Kconfig"
#source "drivers/net/wireless/rtlwifi/Kconfig"//将它注释掉,这样就不会出现在make meunconfig中了
source "drivers/net/wireless/ti/Kconfig"
source "drivers/net/wireless/zd1211rw/Kconfig"
source "drivers/net/wireless/mwifiex/Kconfig"
source "drivers/net/wireless/cw1200/Kconfig"
source "drivers/net/wireless/rsi/Kconfig"
source "drivers/net/wireless/realtek/Kconfig"//加上realtek的
endif # WLAN
打开wireless下面的Makefile
#obj-$(CONFIG_RTLWIFI) += rtlwifi/ //注释掉rtlwifi
obj-y += realtek/ 加上realtek的
三、配置make menuconfig
将对应的rtl8188eus编译到内核中去。
当然,配置这些还是不够的,因为我们是usb wifi驱动,usb的一些支持与wifi的一些支持也是要的!(其实如果之前使用这个usb host口成功,那么也是不用配的,比如我之前使用usb host作为usb转串口,没问题,那么这里我就不需要再配了)
usb支持:
chipideal的三个都要配,原因是imx6ull的usb主控制器是使用的chipideal的。
wifi配置:
由于wifi是ieee:802.11的所以这个也要配(这个的路径和rtl8188eus配置的路径一样)
还有:
OK,按道理配完这些就能驱动usb wifi了
四、启动内核
ifconfig发现有wlan0,很开心。
但是当我ifconfig wlan0 的时候竟然usb disconnected!
#
# ifconfig wlan0 up
==> rtl8188e_iol_efuse_patch
usb 1-1: USB disconnect, device number 15
IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
RTL871X: indicate disassoc
RTL871X: rtw_cmd_thread: DriverStopped(0) SurpriseRemoved(1) break at line 478
RTL871X: rtw_ndev_uninit(wlan0)
# RTL871X: rtw_dev_unload: driver not in IPS
于是我在想:是usb 模块的原因还是 usb wifi驱动的原因?
就这样我先试了:换一个rtl8188eus驱动
于是就有了这篇:https://blog.csdn.net/m0_54657729/article/details/131766527
最后发现还是有问题!
但是我又用这个usb 模块到ubuntu和windows下使用都没问题。
就这里陷入了僵局!
其中也有在源码中打过log,最详细的发现是在读取usb wifi模块的0xeac的时候读取不到导致的usb disconnected,这不就是usb 模块的问题吗?(其实还有可能是usb wifi和我的usb host连接不稳定的原因)
之后,多次插拔usb wifi模块,竟然惊奇的发现有一次ifconfig wlan0 up成功了!(但是多数情况是失败的,而且在up上的情况下也有可能disconnected)
# ifconfig wlan0 up
==> rtl8188e_iol_efuse_patch
IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
说明原因就是我的usb wifi模块和usb host接口不稳定照成的(之后我也用过这个usb host和usb 转串口进行实现,发现也有些不稳定,可能就是我这个usb host接口有点问题了)
至此:usb wifi移植完成!
==> rtl8188e_iol_efuse_patch
IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
说明原因就是我的usb wifi模块和usb host接口不稳定照成的(之后我也用过这个usb host和usb 转串口进行实现,发现也有些不稳定,可能就是我这个usb host接口有点问题了)
# 至此:usb wifi移植完成!