今天接到一个新任务,要求在已经配置好操作系统、硬件和驱动的主板上,用其wifi连接公司网络。这个主板的功能是为一个嵌入式应用提供底层支持,而这个嵌入式应用是用QT开发的,因此最终目的是通过这个应用搜索无线网络并连接。
于是我想,要再应用层中实现功能,首先还是要在操作系统上先把功能实现了,但因为对linux不是很熟只能上网寻找答案。于是发现有两个工具可以让wifi实现STA(相当于从机)模式,1、iw工具 2、wpa_supplicant。而我选择移植iw。
首先先测试一下wifi是否正常。
未插wifi前
接上wifi后
激活网卡
查看网卡激活状态
查看可用无线网卡,发现没有相关命令,要移植iw工具
(参考:https://blog.csdn.net/x_nazgul/article/details/20153151
https://blog.csdn.net/Lidroid/article/details/46725675
https://blog.csdn.net/o0Avalon0o/article/details/52449757)
移植iw工具需要libnl库的支持,所以先下载libnl库
1、下载libnl压缩包,这里下载的版本为libnl-3.2.25.tar.gz
http://www.infradead.org/~tgr/libnl/
2、把压缩包移到linux中解压: tar xzf libnl-3.2.25.tar.gz
3、解压后进入目录:cd libnl-3.2.25/
4、进行编译:
执行 ./configure --host=arm-linux --prefix=$PWD/tmp
此时出现错误:
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
apt-get install bison
apt-get install flex
之后再执行 ./configure --host=arm-linux --prefix=$PWD/tmp配置成功
5、make
6、make install
7、在tmp目录下就生成了相关的文件,把相应的lib和include 复制到交叉编译工具链中。
(暂时不明白何为交叉编译工具链,先不复制)
下载iw
1、下载源码,这里下载的版本为iw-4.14.tar.gz
https://git.sipsolutions.net/iw.git
2、进入目录后解压,生成目录iw-4.14,进入目录执行make出现以下提示
经查找后得知pkg-config工具的作用是能根据软件安装时软件的.pc配置文件路径找到相应的头文件路径和库文件路径
执行apt-get install pkg-config
下载失败后执行apt-get install update,再次执行上述命令后成功
MakefILE:78提示没有找到libnl的相关依赖文件
根据网上的教程,和查看README文档对libnl的库添加了PKG_CONFIG路径,文档如下:
输入命令如下:
export PKG_CONFIG_PATH=[libnl安装路径]lib/pkgconfig:$PKG_CONFIG_PATH
执行make后成功编译生成iw
3、把iw赋值到根目录的/bin/下执行iw命令
提示是没有找到对应的库
把libnl安装路径中的/lib/下(这样命令可在任何目录下执行)对应的libnl-genl-3.so.200和libnl-3.so.200复制到/lib/arm-linux-gnueabihf/目录中(这个目录的作用还不清楚)
再次执行命令
原因不明,查后发现可能是因为
(转自https://blog.csdn.net/zerer110/article/details/82782518)
(1)wifi驱动没有加载或者是wifi设备没有接入
(2)wifi驱动有加载,并且网络接口都有起来,这种可能是内核驱动不支持nl80211;也有可能是驱动和内核不匹配,建议重新烧录系统,然后重新编译驱动