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

一口Linux 2021-04-17 00:00

<1>Realtek RTL8188FU WiFi 驱动移植

1 参考资料

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、还有一些其他前辈的教程,十分感谢!

2 环境介绍

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 模块驱动源码;

3 驱动移植

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 ;
  • 第 88 行,将宏定义 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 ##########################

4 内核配置

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 驱动

  • 由于 RTL8188FU 无需加载额外的固件文件,故无需将驱动配置成模块;
  • 直接将驱动编译进内核,这样开机就会自动初始化 RTL8188FU ,不需要启动后再手工加载驱动模块;
Device Drivers  ---> 
    [*] Network device support  ---> 
        [*]   Wireless LAN  --->
            <*>   Realtek wifi  ---> 
                --- Realtek wifi
                <*>   select wifi type (Realtek 8188FU USB WiFi)  --->  

5、在内核源码文件夹根路径,运行命令:

make uImage -j16

6、编译完成;

5 简单测试

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 参考资料

1、配置过程,部分参考资料如下:

  • 通讯之——ARM Linux下以太网的访问外网方法(https://blog.csdn.net/qq_27977257/article/details/53130151)
  • 开发板linux连接wifi的方法(一)(https://blog.csdn.net/qq_29630271/article/details/72751076)
  • linux下ifconfig, DNS以及route配置(http://www.cnitblog.com/201/archive/2009/08/20/60887.html)
  • Linux环境下使用WIFI模块:使用DHCP工具动态获得IP地址(https://blog.csdn.net/yunlong654/article/details/88680543)
  • linux 添加删除– 默认网关 的方法(route add详解)(https://www.xuebuyuan.com/1256289.html)
  • 无线网卡(RTL8188EU)驱动编译、使用DHCP配置无线网络(1(https://blog.csdn.net/jifengzhiling/article/details/80983006)
  • 用wpa_supplicant wpa_cli连不同加密方式的ap(https://blog.csdn.net/weixin_37193849/article/details/53911579)

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

  • 开发板可以ping通百度IP,但是不能ping百度域名 提示ping: bad address 'www.baidu.com'(https://blog.csdn.net/mick_ye/article/details/50844539)

3、还有一些其他前辈的教程,十分感谢!

2 环境介绍

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)

3 连接路由

在我实际调试过程中,最开始是通过命令行配置,到代码成熟后,使用脚本文件连接路由。

因此有三种方法:

  • 手动连接,固定 IP 方式;
  • 手动连接,动态 DHCP 方式;
  • 脚本连接,动态 DHCP 方式;

3.1 固定 IP

命令配置过程,记录如下。

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

3.2 动态 DHCP

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

3.3 脚本文件

启动、停止过程,基本与命令行配置类似,只不过是全部封装为脚本,便于操作。

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密码"
}

4 资源记录

1、r8000.conf 配置文件

(1)注意事项:

  • 字符严格缩进;
  • 不能多/少字符;
  • 此文件,对格式要求很严,如有问题,请先检查是否此文件有误;
  • 一定要手打,不要复制(赋值的话格式很容易出错)

(2)配置文件内容如下:

[root]#cat r8000.conf 
ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
network={
 ssid="WiFi名称"
 psk="WiFi密码"
}

5 总结

1、刚开始调试时,由于不知道参数是否合适,就是用命令行,一句一句敲出来;直到代码基本确定了,才编写脚本。

2、现在想想,真是有点傻啊,为什么一开始不直接使用脚本?有问题,直接修改脚本里边的配置项,不就行了?

3、WiFi 连接路由,是最常使用的一个功能,期间遇到两个问题

(1)WiFi 连接路由后,网速很慢。经过测试,有几方面的原因:

  • 没有安装 WiFi 天线;
  • WiFi 天线不匹配;

(2)WiFi 连接路由后,不稳定。具体表现:ping 百度,延时忽高忽低。暂未发现具体原因。思考方向:

  • WiFi 模块自身问题(性能差、工艺问题等)
  • WiFi 驱动问题(版本低?不适配?)

<3>Realtek RTL8188FU WiFi 命令编译

本篇文章介绍一下 WiFi 相关命令的交叉编译,希望对您能有帮助!

1 参考资料

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)

3、还有一些其他前辈的教程,十分感谢!

2 环境介绍

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)

3 简要说明

1、简要记录驱动移植过程中,交叉编译的命令、依赖库。

2、简要说明作用及版本等信息。

3.1 iw

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 版本进行编译;

3.2 wpa_cli

1、使用的命令版本:wpa_cli v0.8.x_rtw_r24647.20171025

2、wpa_cli 用来查看设备当前连接 WiFi 状态;

3、文件系统路径:/usr/sbin

3.3 wpa_passphrase

1、使用的命令版本:未知;(应该与 wpa_cli 一致,即 v0.8.x_rtw_r24647.20171025 ,使用的同一个源码包)

2、暂时未用到此命令;

3、文件系统路径:/usr/sbin

3.4 wpa_supplicant

1、使用的命令版本:wpa_supplicant v2.9

2、命令作用:

(1)用于连接 WPA/WPA2 加密方式的 WiFi ;

(2)非加密方式的 WiFi ,也可使用此命令连接;

3、文件系统路径:/usr/sbin

3.5 hostapd

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

3.6 hostapd_cli

1、使用的命令版本:hostapd_cli v2.9

2、暂未使用;

3、文件系统路径:/bin

3.7 依赖库

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]#

4 交叉编译

进行依赖库、命令的交叉编译。

4.1 openssl

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)相关配置项说明

  • no-asm:在交叉编译过程中不使用汇编代码加速编译过程;
  • shared:生成动态连接库。
  • no-async:交叉编译工具链没有提供 GNU C 的 ucontext 库
  • --prefix=:安装路径

(2)安装路径需要修改为自己的安装路径;

4、make 编译;-j6 :使用 6 个逻辑内核同时编译,速度更快;

make -j6

5、安装编译后的文件,到对应路径

make install

4.2 libnl

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)相关配置项说明

  • --host:指定交叉编译链
  • --prefix=:安装路径

(2)安装路径需要修改为自己的安装路径;

4、make 编译;-j6 :使用 6 个逻辑内核同时编译,速度更快;

make -j6

5、安装编译后的文件,到对应路径

make install

4.3 iw

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 类型的才可以,否则 不能在板子上正常运行 。

4.4 wpa_supplicant

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

4.5 hostapd

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、编译完成后,就会在当前目录生成所需的 hostapdhostapd_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

至此,所有使用到的命令均已编译完毕。

5 测试验证

分两步进行,第一步将命令放到文件系统中;第二步测试连接 WiFi 是否正常。

5.1 命令替换

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 到此目录(其他方式均可)
# 拷贝 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 ;
  • 参考上述方法,拷贝文件到对应路径,同样修改库文件权限为 755 ;
  • 再次使用 iw 测试命令,发现没有异常提示,可以正常打印相关配置信息;
  • 此时代表命令已可以正常运行;

5.2 连接 WiFi

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 通,则表示命令可以正常运行。

6 总结

本教程为自己在实际使用过程中的经验总结,希望能够帮到您。

好了,本期内容就是这样,祝您一切顺利,我们下期再见!


- END -


点击关注公众号,回复【1024】免费领学习资料


  推荐阅读
所有原创
Linux驱动
粉丝问答
C语言
从0学ARM
计算机网络
一口Linux 写点代码,写点人生!
评论
  • 在智能网联汽车中,各种通信技术如2G/3G/4G/5G、GNSS(全球导航卫星系统)、V2X(车联网通信)等在行业内被广泛使用。这些技术让汽车能够实现紧急呼叫、在线娱乐、导航等多种功能。EMC测试就是为了确保在复杂电磁环境下,汽车的通信系统仍然可以正常工作,保护驾乘者的安全。参考《QCT-基于LTE-V2X直连通信的车载信息交互系统技术要求及试验方法-1》标准10.5电磁兼容试验方法,下面将会从整车功能层面为大家解读V2X整车电磁兼容试验的过程。测试过程揭秘1. 设备准备为了进行电磁兼容试验,技
    北汇信息 2025-01-09 11:24 97浏览
  • 光伏逆变器是一种高效的能量转换设备,它能够将光伏太阳能板(PV)产生的不稳定的直流电压转换成与市电频率同步的交流电。这种转换后的电能不仅可以回馈至商用输电网络,还能供独立电网系统使用。光伏逆变器在商业光伏储能电站和家庭独立储能系统等应用领域中得到了广泛的应用。光耦合器,以其高速信号传输、出色的共模抑制比以及单向信号传输和光电隔离的特性,在光伏逆变器中扮演着至关重要的角色。它确保了系统的安全隔离、干扰的有效隔离以及通信信号的精准传输。光耦合器的使用不仅提高了系统的稳定性和安全性,而且由于其低功耗的
    晶台光耦 2025-01-09 09:58 81浏览
  • 车机导航有看没有懂?智能汽车语系在地化不可轻忽!随着智能汽车市场全球化的蓬勃发展,近年来不同国家地区的「Automotive Localization」(汽车在地化)布局成为兵家必争之地,同时也是车厂在各国当地市场非常关键的营销利器。汽车在地化过程中举足轻重的「汽车语系在地化」,则是透过智能汽车产品文字与服务内容的设计订制,以对应不同国家地区用户的使用习惯偏好,除了让当地车主更能清楚理解车辆功能,也能进一步提高品牌满意度。客户问题与难处某车厂客户预计在台湾市场推出新一代车款,却由于车机导航开发人
    百佳泰测试实验室 2025-01-09 17:47 21浏览
  • HDMI 2.2 规格将至,开启视听新境界2025年1月6日,HDMI Forum, Inc. 宣布即将发布HDMI规范2.2版本。新HDMI规范为规模庞大的 HDMI 生态系统带来更多选择,为创建、分发和体验理想的终端用户效果提供更先进的解决方案。新技术为电视、电影和游戏工作室等内容制作商在当前和未来提供更高质量的选择,同时实现多种分发平台。96Gbps的更高带宽和新一代 HDMI 固定比率速率传输(Fixed Rate Link)技术为各种设备应用提供更优质的音频和视频。终端用户显示器能以最
    百佳泰测试实验室 2025-01-09 17:33 114浏览
  • Snyk 是一家为开发人员提供安全平台的公司,致力于协助他们构建安全的应用程序,并为安全团队提供应对数字世界挑战的工具。以下为 Snyk 如何通过 CircleCI 实现其“交付”使命的案例分析。一、Snyk 的挑战随着客户对安全工具需求的不断增长,Snyk 的开发团队面临多重挑战:加速交付的需求:Snyk 的核心目标是为开发者提供更快、更可靠的安全解决方案,但他们的现有 CI/CD 工具(TravisCI)运行缓慢,无法满足快速开发和部署的要求。扩展能力不足:随着团队规模和代码库的不断扩大,S
    艾体宝IT 2025-01-10 15:52 41浏览
  • 1月9日,在2025国际消费电子展览会(CES)期间,广和通发布集智能语音交互及翻译、4G/5G全球漫游、随身热点、智能娱乐、充电续航等功能于一体的AI Buddy(AI陪伴)产品及解决方案,创新AI智能终端新品类。AI Buddy是一款信用卡尺寸的掌中轻薄智能设备,为用户带来实时翻译、个性化AI语音交互助手、AI影像识别、多模型账户服务、漫游资费服务、快速入网注册等高品质体验。为丰富用户视觉、听觉的智能化体验,AI Buddy通过蓝牙、Wi-Fi可配套OWS耳机、智能眼镜、智能音箱、智能手环遥
    物吾悟小通 2025-01-09 18:21 25浏览
  • 在当前人工智能(AI)与物联网(IoT)的快速发展趋势下,各行各业的数字转型与自动化进程正以惊人的速度持续进行。如今企业在设计与营运技术系统时所面临的挑战不仅是技术本身,更包含硬件设施、第三方软件及配件等复杂的外部因素。然而这些系统往往讲究更精密的设计与高稳定性,哪怕是任何一个小小的问题,都可能对整体业务运作造成严重影响。 POS应用环境与客户需求以本次分享的客户个案为例,该客户是一家全球领先的信息技术服务与数字解决方案提供商,遭遇到一个由他们所开发的POS机(Point of Sal
    百佳泰测试实验室 2025-01-09 17:35 109浏览
  • 根据环洋市场咨询(Global Info Research)项目团队最新调研,预计2030年全球中空长航时无人机产值达到9009百万美元,2024-2030年期间年复合增长率CAGR为8.0%。 环洋市场咨询机构出版了的【全球中空长航时无人机行业总体规模、主要厂商及IPO上市调研报告,2025-2031】研究全球中空长航时无人机总体规模,包括产量、产值、消费量、主要生产地区、主要生产商及市场份额,同时分析中空长航时无人机市场主要驱动因素、阻碍因素、市场机遇、挑战、新产品发布等。报告从中空长航时
    GIRtina 2025-01-09 10:35 99浏览
  • 职场是人生的重要战场,既是谋生之地,也是实现个人价值的平台。然而,有些思维方式却会悄无声息地拖住你的后腿,让你原地踏步甚至退步。今天,我们就来聊聊职场中最忌讳的五种思维方式,看看自己有没有中招。1. 固步自封的思维在职场中,最可怕的事情莫过于自满于现状,拒绝学习和改变。世界在不断变化,行业的趋势、技术的革新都在要求我们与时俱进。如果你总觉得自己的方法最优,或者害怕尝试新事物,那就很容易被淘汰。与其等待机会找上门,不如主动出击,保持学习和探索的心态。加入优思学院,可以帮助你快速提升自己,与行业前沿
    优思学院 2025-01-09 15:48 102浏览
  • 在过去十年中,自动驾驶和高级驾驶辅助系统(AD/ADAS)软件与硬件的快速发展对多传感器数据采集的设计需求提出了更高的要求。然而,目前仍缺乏能够高质量集成多传感器数据采集的解决方案。康谋ADTF正是应运而生,它提供了一个广受认可和广泛引用的软件框架,包含模块化的标准化应用程序和工具,旨在为ADAS功能的开发提供一站式体验。一、ADTF的关键之处!无论是奥迪、大众、宝马还是梅赛德斯-奔驰:他们都依赖我们不断发展的ADTF来开发智能驾驶辅助解决方案,直至实现自动驾驶的目标。从新功能的最初构思到批量生
    康谋 2025-01-09 10:04 97浏览
  • 一个真正的质量工程师(QE)必须将一件产品设计的“意图”与系统的可制造性、可服务性以及资源在现实中实现设计和产品的能力结合起来。所以,可以说,这确实是一种工程学科。我们常开玩笑说,质量工程师是工程领域里的「侦探」、「警察」或「律师」,守护神是"墨菲”,信奉的哲学就是「墨菲定律」。(注:墨菲定律是一种启发性原则,常被表述为:任何可能出错的事情最终都会出错。)做质量工程师的,有时会不受欢迎,也会被忽视,甚至可能遭遇主动或被动的阻碍,而一旦出了问题,责任往往就落在质量工程师的头上。虽然质量工程师并不负
    优思学院 2025-01-09 11:48 115浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦