WIFI(usb接口)驱动rtf8723bu移植到S5PV210的开发板上

WIFI(usb接口)驱动rtf8723bu移植到S5PV210的开发板上

所需源码:
1.rtl8723BU_WiFi_linux_v4.3.9.3.tar.gz (WIFI_USB接口驱动源码包)
2.iwlist_for_visteon-master.zip (wireless tools工具源码包)
3.wpa_supplicant-2.7.tar.gz
4.openssl-OpenSSL_1_1_1-stable.zip
5.libnl-3.2.25.tar.gz

以上软件可以在我的网盘中下载,提取码:crg0

一、安装rtf8723bu驱动

1、进入驱动源码目录,修改Makefile文件

A.选中对应自已的WIFI芯片,设为”y“,其余设为”n”

CONFIG_MULTIDRV = n
... ... 
CONFIG_RTL8723B = y

B.选中对应自已的WIFI接口类型,设为”y“,其余设为”n”

CONFIG_USB_HCI = y
... ...
CONFIG_GSPI_HCI = n

C.选中目标机器的平台类型,设为”y“,其余设为”n”

CONFIG_PLATFORM_JB_X86 = n
... ...
CONFIG_PLATFORM_ARM_S3C2K4 = y

D.修改交叉编译工具链路径、内核源码树路径和架构名称

ifeq ($(CONFIG_PLATFORM_ARM_S3C2K4), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
ARCH := arm					//架构名称
CROSS_COMPILE := arm-linux-	//交叉编译工具链,如果没有做符号链接那么就要填写	全路径名称
KVER  := 2.6.24.7_$(ARCH)
KSRC := /home/chenrg/windows-share/SI_source/kernel_jiuding/kernel  //内核源码树路径,即编译内核时主Makefile的路径。注意:此内核必须是编译通过了的内核
endif

2、执行make 进行编译

得到xxx.ko文件

3、安装xxx.ko文件

将xxx.ko文件复制到开发板中
执行 insmod xxx.ko
出现如下信息,表示rtf8723bu的驱动被安装到开发板上了
[15845.571597] RTL871X: module init start
[15845.573870] RTL871X: rtl8723bu v4.3.9.3_13200.20150106_BTCOEX20140929-5443
[15845.581630] RTL871X: build time: Aug 12 2021 15:42:14
[15845.585771] RTL871X: rtl8723bu BT-Coex version = BTCOEX20140929-5443
[15845.593370] usbcore: registered new interface driver rtl8723bu
[15845.598650] RTL871X: module init ret=0
此时将USB接口的WIFI插入开发板的USB口就能被识别到了

4、查看并启动USB无线网卡

在终端输入ifconfig -a 得到如下信息,显然 wlan0 就是我们的网卡设备名称
wlan0 Link encap:Ethernet HWaddr 00:13:EF:F5:E4:71
UP BROADCAST RUNNING 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)

在终端输入ifconfig wlan0 up 启动网卡,然后再输入ifconfig得到的息信还是和上面一样的,为什么呢?原 因是我们还没对网卡进行配置。莫急!接下来就要开始对网卡进行配置了。

二、安装wireless tools工具

以上只是安装了rtf8723bu的驱动而已,但是还无法进行对外和对内通信,因此要进行linux wireless extension工具的安装与移植。
wireless tools WIFI的工具集合包括以下工具:
iwconfig: 设置无线网络相关参数。
iwlist: 扫描当前无线网络信息, 获取WIFI热点。
iwspy: 获取每个节点链接的质量。
iwpriv: 操作WirelessExtensions特定驱动。
ifrename: 基于各种静态标准命名接口。
我们最常用的就是iwlist和iwconfig这两个工具,接下来我们来移植一下。

1、进入源码目录中修改Makefile文件,只要修CC、AR、RANLIB这三个变量,改成如下的值即可。

CC = arm-linux-gcc //如果这个工具没有做符号链接,那么就要填写全路径名称
AR = arm-linux-ar //如果这个工具没有做符号链接,那么就要填写全路径名称
RANLIB = arm-linux-ranlib //如果这个工具没有做符号链接,那么就要填写全路径名称

2、执行make 进行编译

将得到的5个应用程序iwconfig iwlist iwspy iwpriv ifrename复制到开发板文件系统/usr/bin中。
将得到的1个动态链接库libiw.so.29复制到开发板文件系统/lib中。

3、测试应用程序(前提是要先启动USB网卡,启动网参照1.4步骤)

在开发板的终端输入 iwlist wlan0 scan 扫描当前无线网络信息,如能得到如下信息说明wireless tools工 具安装成功了。
Cell 03 - Address: B8:F8:83:09:35:67 //路由器ip地址
ESSID:“YELMYZJ-2F03” //WIFI名称
Protocol:IEEE 802.11bgn
Mode:Master
Frequency:2.412 GHz (Channel 1) //频率
Encryption key:on //加密
Bit Rates:300 Mb/s //速率
Extra:wpa_ie=dd160050f20101000050f20401000050f20401000050f202
IE: WPA Version 1
Group Cipher : CCMP
Pairwise Ciphers (1) : CCMP
Authentication Suites (1) : PSK
Extra:
IE: IEEE 802.11i/WPA2 Version 1
Group Cipher : CCMP
Pairwise Ciphers (1) : CCMP
Authentication Suites (1) : PSK
Quality=72/100 Signal level=-65 dBm //信号质量
Extra:fm=0003

三、安装wpa_supplicanta工具与依赖库

WPA是WiFi Protected Access的缩写,中文含义为“WiFi网络安全存取”。WPA是一种基于标准的可互操作的WLAN安全性增强解决方案,可大大增强现有以及未来无线局域网络的数据保护和访问控制水平。
Wpa_supplicant作用:
读取配置文件
初始化配置参数,驱动函数
让驱动scan当前所有的bssid
检查扫描的参数是否和用户设置的想符
如果相符,通知驱动进行权限 认证操作
连上AP

在安装wpa_supplicanta之前要先安装两个依赖库openssl、libnl

1、安装openssl库,openssl是一个安全套接字层密码库,囊括主要的密码算法、常用密钥、证书封装管理 功能及实现ssl协议。

A、进入源码目录中,给所有文件设置最级别的权限
chmod -R 777 *
B、进行配置生成Makefile文件
./config shared no-asm --prefix=/home/wireless_tools/libopenssl
选项 shared : 生成动态连接库
选项 no-asm : 不需要在编译过程中使用汇编代码加快编译过程
选项 --prefix : 给 make install 指定一个安装路径
C、打开Makefile文件,查找包含”-64M”内容,共两个
CNF_CFLAGS=-pthread -m64 改成 CNF_CFLAGS=-pthread
CNF_CXXFLAGS=-std=c++11 -pthread -m64 改成 CNF_CXXFLAGS=-std=c++11
这样就修改好了,保存退出。
D、进行编译、安装
make CROSS_COMPILE=arm-linux- //如果这个工具没有做符号链接,那么就要填写全路径名称
make install
E、到安装路径(/home/wireless_tools/libopenssl)中将lib目录下的库文件复制到开发板中lib目录下

2、安装libnl库,libnl核心库提供了通过netlink socket连接所需要的基础函数,用于处理socket的链 接和断开、数据收发、消息创建分析,提供用户可定制接收状态机,并提供一种抽象的数据类型框 架,用于简化netlink 协议对象的实现

A、进入源码目录中,给所有文件设置最级别的权限
chmod -R 777 *
C、进行配置生成Makefile文件
./configure --host=arm-linux --prefix=/home/wireless_tools/libnl
选项 --host : 指定交叉编译器的前缀
选项 --prefix : 给 make install 指定一个安装路径

配置时出现两个警告一个错误,如下:
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
意思是先要安装bison、flex这两个软件才能进行./configure。接下先安安装这两个软件。
apt-get install bison
apt-get install flex

安装好后重新配置
./configure --host=arm-linux --prefix=/home/wireless_tools/libnl

D、进行编译、安装
make
make install
E、到安装路径(/home/wireless_tools/libnl)中将lib目录下的库文件复制到开发板中lib目录下

3、安装wpa_supplicanta工具

A、进入源码目录中,进入wpa-supplicant目录,然后进行配置, wpa-supplicant的配置比较特殊,需要将 wpasupplicant下的defconfig文件拷贝一份并重命名为.config, 命令如下:
cd wpa_supplicant
cp defconfig .config

B、打开.config进行修改CC、CFLAGS、LIBS变量
找到这一行: #CFLAGS += -I/usr/local/openssl/include
去掉注释并改成:CFLAGS += -I/home/wireless_tools/libopenssl/include //openssl的安装路径
找到这一行: #LIBS += -L/usr/local/openssl/lib
去掉注释并改成:LIBS += -L/home/wireless_tools/libopenssl/lib -lssl -lcrypto //openssl的安装路径

找到这一行: #CFLAGS += -IKaTeX parse error: Expected 'EOF', got '#' at position 116: …l的安装路径 找到这一行: #̲LIBS += -L
去掉注释并改成:LIBS += -L/home/wireless_tools/libnl/lib //libnl的安装路径

找到这一行:#CC=mingw32-gcc
去掉注释改成:CC=arm-linux-gcc //如果这个工具没有做符号链接,那么就要填写全路径名称
保存退出

C、导出环境变量PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/home/wireless_tools/libnl/lib/pkgconfig:$PKG_CONFIG_PATH //红色字体就是前面libnl的安装路径

D、执行make 进行编译
得到两个需要的可执行文件 wpa_cli、wpa_supplicant ,把它复制到开发板/usr/bin目录中。

E、在开发板/etc目录下创建一个配制文件wpa_supplicant.conf,此文件用来配置要连接的WIFI和WIFI密码。
wpa_supplicant.conf文件内容如下所示:

ctrl_interface=/network_wifi/wpa_supplicant 
ap_scan=1
	network={
    
    
	ssid="XW"
psk="xxxxxx"
}

注意, wpa_supplicant.conf文件对于格式要求比较严格, “=”前后一定不能有空格,也不要用空格键来缩进,比如第4行和5行的缩进应该采用TAB键,否则的话会出现wpa_supplicant.conf文件解析错误。最重要的一点, wpa_supplicant.conf文件内容要自己手动输入,不要偷懒复制粘贴。wpa_supplicant.conf文件编写好以后再在开板根文件系统下创建一个"/network_wifi/wpa_supplicant目录, wpa_supplicant工具要用到此目录,命令如下:

mkdir -p /network_wifi/wpa_supplicant

F、一切准备好以后就可以使用wpa_supplicant工具让rti8723 wifi模块连接到热点上,输入如下命令:
注意:先down掉有线网卡,再启动无线网卡。

wpa_supplicant -D wext -c /etc/wpa_supplicant.conf -i wlan0 &

出现如下信息,表示初始化成功。
[root@CRG-X210 ~]# Successfully initialized wpa_supplicant
rfkill: Cannot get wiphy information
ioctl[SIOCSIWAP]: Operation not permitted
ioctl[SIOCGIWSCAN]: Resource temporarily unavailable
ioctl[SIOCGIWSCAN]: Resource temporarily unavailable
wlan0: Trying to associate with fc:d7:33:1b:5a:6e (SSID=‘YELMYZJ-2F03’ freq=2412 MHz)
Failed to add supported operating classes IE
此时ifconfig查看一下wlan0并没有IP地址(如下信息),为什么呢?哪是还没有对无线设备进行网络配置。
[root@CRG-X210 ]# ifconfig
wlan0 Link encap:Ethernet HWaddr 00:13:EF:F5:E4:71
inet6 addr: fe80::213:efff:fef5:e471%2066584/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:68 errors:0 dropped:5 overruns:0 frame:0
TX packets:7 errors:0 dropped:1 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:22400 (21.8 KiB) TX bytes:814 (814.0 B)

G、最后一步,通过udhcpc命令调用一个名default.script的脚本来给wlan0自动分配IP地址。

在 /network_wifi目录下新建一个名为default.script的脚本文件,并给它设置权限为0755(这个很重要)。
脚本内容如下:

#!/bin/sh
# udhcpc script edited by Tim Riker <[email protected]>
RESOLV_CONF="/etc/resolv.conf"
[ -n "$1" ] || {
    
     echo "Error: should be called from udhcpc"; exit 1; }
NETMASK=""
[ -n "$subnet" ] && NETMASK="netmask $subnet"
BROADCAST="broadcast +"
[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"
case "$1" in
        deconfig)
                echo "Setting IP address 0.0.0.0 on  $interface"
                busybox ifconfig $interface 0.0.0.0
                ;;
        renew|bound)
                echo "Setting IP address $ip on $interface"
                busybox ifconfig $interface $ip $NETMASK $BROADCAST
                if [ -n "$router" ] ; then
                        echo "Deleting routers"
                        while busybox route del default gw 0.0.0.0 dev $interface ; do
                                :
                        done

                        metric=0
                        for i in $router ; do
                                echo "Adding router $i"
                                busybox route add default gw $i dev $interface metric $metric
                                : $(( metric += 1 ))
                        done
                fi

                echo "Recreating $RESOLV_CONF"
                # If the file is a symlink somewhere (like /etc/resolv.conf
                # pointing to /run/resolv.conf),make sure things work.
                realconf=$(readlink -f "$RESOLV_CONF" 2>/dev/null || echo "$RESOLV_CONF")
                tmpfile="$realconf-$$"
                > "$tmpfile"
                [ -n "$domain" ] && echo "search $domain" >> "$tmpfile"
                for i in $dns ; do
                        echo " Adding DNS server $i"
                        echo "nameserver $i" >> "$tmpfile"
                done
                busybox mv "$tmpfile" "$realconf"
                ;;
esac
exit 0

输入命令:

udhcpc -b -s /network_wifi/default.script -i wlan0片

出现如下信息,表示初始化成功。
udhcpc (v1.24.1) started
Setting IP address 0.0.0.0 on wlan0
Sending discover…
Sending select for 192.168.1.58…
Lease of 192.168.1.58 obtained, lease time 86400
Setting IP address 192.168.1.58 on wlan0
Deleting routers
route: SIOCDELRT: No such process
Adding router 192.168.1.1
Recreating /etc/resolv.conf
Adding DNS server 202.102.213.68
Adding DNS server 61.132.163.68

ifconfig查看一下wlan0有没有IP地址,如下信息wlan0得到一个192.168.1.58的地址
[root@CRG-X210 ]# ifconfig
wlan0 Link encap:Ethernet HWaddr 00:13:EF:F5:E4:71
inet addr:192.168.1.58 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::213:efff:fef5:e471%2066584/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1248 errors:0 dropped:7 overruns:0 frame:0
TX packets:10 errors:0 dropped:1 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:390501 (381.3 KiB) TX bytes:1624 (1.5 KiB)
现在ping www.baidu.com一下百度看能不能通,如下信息显然是通的。
[root@CRG-X210 ]# ping www.baidu.com
PING www.baidu.com (14.215.177.38): 56 data bytes
64 bytes from 14.215.177.38: seq=0 ttl=55 time=34.311 ms
64 bytes from 14.215.177.38: seq=1 ttl=55 time=36.440 ms
64 bytes from 14.215.177.38: seq=2 ttl=55 time=52.458 ms
64 bytes from 14.215.177.38: seq=3 ttl=55 time=41.841 ms
至此rtl8723bu无线网卡移值结束!!!

猜你喜欢

转载自blog.csdn.net/qq_16126823/article/details/119739400