道阻且长,行则将至。埋头苦干,不鸣则已,一鸣惊人!加油,骚年!

Hello 大家好,上篇文章我总结了 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:   bioniczhaoc@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-gccgcc 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
endififndef CFLAGS
CFLAGS = -MMD -O2 -Wall -g
endifCC=arm-none-linux-gnueabi-gccexport 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-gccCFLAGS += -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/libCFLAGS += -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 -lsslLDFLAGS += -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 总结

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

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

如果文章内容有误,麻烦评论/私信多多指教!如果觉得文章内容还不错,记得一键四连哦(点赞、收藏、留言、关注),如果您能点个关注,那就是对我最大的鼓励,也将是我创作的动力,谢谢您嘞!

详细记录丨Realtek RTL8188FU WiFi 命令编译相关推荐

  1. 详细记录丨Realtek RTL8188FU WiFi 连接路由

    道阻且长,行则将至.埋头苦干,不鸣则已,一鸣惊人!加油,骚年! Hello 大家好,我是小 2 ,上篇文章我总结了 WiFi 命令编译过程 本篇文章分享一下 WiFi 连接路由的过程,希望对您能有帮助 ...

  2. 详细记录丨Realtek RTL8188FU WiFi 驱动移植

    1 参考资料 1.芯片数据手册:TL8188FCA.pdf 2.驱动移植手册:Quick_Start_Guide_for_Driver_Compilation_and_Installation.pdf ...

  3. 详细记录丨公众号如何通过迁移开通留言功能?

    道阻且长,行则将至.埋头苦干,不鸣则已,一鸣惊人!加油,骚年! 1 参考资料 [微信公众号丨i深圳]优化营商环境|个体工商户登记注册可上" i 深圳"掌上办理(https://mp ...

  4. <Linux开发>--驱动开发-- 字符设备驱动(3) 过程详细记录

    <Linux开发>–驱动开发-- 字符设备驱动(3) 过程详细记录 驱动开发是建立再系统之上的,前面作者也记录了系统移植的过程记录,如果有兴趣,可进入博主的主页查看相关文章,这里就不添加链 ...

  5. 联咏平台(Novatek) | RTL8188FU WIFI驱动移植

    目录 1 开发环境 2 内核配置 2.1 配置支持USB设备 2.2 配置支持 wifi 设备 2.3 配置支持 wifi 网络 IEEE 802.11 2.4 编译内核 3 wifi 驱动移植 3. ...

  6. 实操教程|详细记录solov2的ncnn实现和优化

    作者丨欧阳慧宇@知乎(已授权) 来源丨https://zhuanlan.zhihu.com/p/361900997 编辑丨极市平台 极市导读 由于目前solo系列在GitHub中没有转ncnn的项目, ...

  7. 最详细的SQL注入相关的命令整理

    最详细的SQL注入相关的命令整理   QUOTE: 1.   用^转义字符来写ASP(一句话***)文件的方法: ?   http://192.168.1.5/display.asp?keyno=18 ...

  8. oracle19c的版本号_Windows10安装Oracle19c数据库详细记录(图文详解)

    1. 下载资源 官网下载地址: 点此进入 直接点击下载,会自动开始下载. 2. 开始安装 将下载的安装包解压到本地,右键-以管理员身份运行setup.exe,开始安装(一定要以管理员身份运行,不然后面 ...

  9. android 代码发adb,Android预安装软件adb命令编译源码

    Android预安装软件&adb命令&编译源码 发布时间:2020-06-02 17:28:41 来源:51CTO 阅读:895 作者:年少的风 1.预安装软件: 将eclipse下的 ...

最新文章

  1. 【Raspberry pi】系统安装及基础配置
  2. LESSON 3 线性回归的手动实现
  3. 5.7 echo:显示一行文本
  4. C语言开发笔记(六)实参和形参
  5. mysql 语句 not_mysql sql语句 is not 用法是
  6. 抢饭碗?这位 05 后开发三款小程序!
  7. struts2.0.14 web.xml,struts.xml配置
  8. html实现自动图片轮播,图片轮播的实现(html__js)
  9. 如何在上海租房,数据有话说
  10. Mac系统下Typora配置阿里云图床+上传工具PicGo安装
  11. java扫雷初级代码_运行在Eclipse环境下的java扫雷游戏的初级代码是什么?
  12. Eclipse BIRT报表开发工具安装教程
  13. 燃起图与燃尽图,故事地图和产品线路图分析
  14. JS实战应用之做LOL领图标任务~
  15. excel提取html字段文字,excel提取字符串中的特定字符串
  16. 【用pandas_alive几行代码绘制竞赛动图】10.新南威尔士州 COVID 可视化(测试代码+数据集+绘图参数解析)
  17. 感应开关垃圾桶小项目的完成及问题解决——基于STC89C52RC单片机
  18. 施耐德m340设置ip后忘记ip,怎么恢复ip
  19. Android中识别手柄JAVA_android蓝牙手柄监听 BluetoothGamepad
  20. 切换Apple Store ID后,Apple Mucic资料库无法加载问题的解决方案

热门文章

  1. 花指令问题——[HDCTF2019]Maze
  2. go学习笔记 sync/Cond源码
  3. 李宏毅2022机器学习HW10解析
  4. Web3中文|未来的工作模式:VR头显、元宇宙和供应商协作
  5. 面试必备技能,springsecurity
  6. mybase修改默认的markdown样式
  7. 04-26.eri-test 查找地名的字谜(以GB为单位)
  8. try-catch-finally
  9. 赴一场时光之约 遇一场手作邂逅
  10. 风生水起才知天高云淡 - 浮云贴 - 百万商业圈云平台之分布式集群功能介绍