zoukankan      html  css  js  c++  java
  • linux下WIFI模块使用:IW工具交叉编译以及配置

    iw是Linux下的一种wifi配置工具,它替代了Wireless tools中的iwconfig,支持最近已添加到内核所有新的驱动程序,有两种加密认证加密方式:open(开放系统认证+有效等线加密)、wep方式(共享秘钥认证+有效等线加密)。

    iw工具的交叉编译

    1. iw依赖libnl库,首先得先安装下载安装libnl:http://www.infradead.org/~tgr/libnl/files/

    cd /root/wifi
    tar -xvf libnl-3.2.23.tar.gz
    cd libnl-3.2.23
    mkdir build
    ./configure --host=arm-linux --prefix=/root/wifi/libnl-3.2.23/build
    make

    make时报如下错误:

    make[2]: Entering directory '/root/wifi/libnl-3.2.23/lib'
      CC       addr.lo
    addr.c:1082: error: 'AF_RDS' undeclared here (not in a function)
    addr.c:1088: error: 'AF_CAN' undeclared here (not in a function)
    addr.c:1089: error: 'AF_TIPC' undeclared here (not in a function)
    addr.c:1093: error: 'AF_ISDN' undeclared here (not in a function)
    addr.c:1094: error: 'AF_PHONET' undeclared here (not in a function)
    Makefile:1077: recipe for target 'addr.lo' failed
    make[2]: *** [addr.lo] Error 1

    解决方法:

    在kernel源码里搜索AF_RDS

    grep "AF_RDS" * -nR /root/linux-3.4.2

     依次把上述几个宏拷贝到lib/addr.c文件里。

    make
    make install

    编译并安装完成后,在build目录里有如下内容:

    交叉编译及移植

    下载路径:https://mirrors.edge.kernel.org/pub/software/network/iw/

    cd /root/wifi
    tar -xvf iw-4.0.tar.gz 
    cd iw-4.0/
    export PKG_CONFIG_PATH=/root/wifi/libnl-3.2.23/build/lib/pkgconfig:$PKG_CONFIG_PATH
    make CC=arm-linux-gcc

    这时会遇到如下错误:

     CC   info.o
    info.c: In function 'print_phy_handler':
    info.c:522: error: implicit declaration of function 'htole16'
    Makefile:101: recipe for target 'info.o' failed
    make: *** [info.o] Error 1

    解决办法:

    在info.c里面添加如下宏:

    #define htole16(X)  (((((uint16_t)(X)) << 8) | ((uint16_t)(X) >> 8)) & 0xffff)

    然后再执行make CC=arm-linux-gcc,编译通过。

    把生成的iw文件复制到开发板的/usr/bin/目录下。

    测试IW工具

    启动开发板,接上wifi模块,依次加载以下驱动模块:

    insmod rt2x00lib.ko
    insmod rt2x00usb.ko
    insmod rt2800lib.ko 
    insmod  rt2800usb.ko 

    打开wifi模块:

    ifconfig wlan0 up

    列出WIFI网卡的性能:

    / # iw list
    iw: error while loading shared libraries: libnl-genl-3.so.200: cannot open shared object file: No such file or directory

    把libnl-3.2.23/build/lib/libnl-genl-3.so.200拷贝到开发板的/usr/lib目录下,这里需要注意的是libnl-genl-3.so.200是一个软链接,拷贝的真实动态库应为软链接指向的libnl-genl-3.so.200.18.0。

     再次执行iw时出现以下错误:

    / # iw list
    iw: error while loading shared libraries: libnl-3.so.200: cannot open shared object file: No such file or directory

    同理,把libnl-3.2.23/build/lib/libnl-3.so.200拷贝到开发板的/usr/lib目录下,libnl-3.so.200 同样也为指向libnl-3.so.200.18.0的一个软链接。

    几个iw工具常用命令:

    iw list // 列出WIFI网卡的性能
    ifconfig wlan0 up //启用wifi模块
    iw dev wlan0 scan // 扫描可连接WIFI AP
    iw wlan0 connect dswei // 连接到不加密的WIFI,WIFI名字为dswei
    iw wlan0 connect dswei keys d:0:baiwenwang123 // 连接到WEP加密的WIFI,WIFI名为dswei,d: default, 0: 第0个密码
    连接成功以后可以在手机上看到有设备连接

     这里需要注意的是路由器的无线加密方式要设置为WEP,否则网络不通。本人使用的TL-WDR7620千兆版路由器不能设置加密方式,默认是WPA2-PSK/WPA-PSK加密方式,修改不了加密方式,坑!! 换了一个百兆路由器TL-WR842N,也是不可以设置无线加密方式,再见!来不及握手~~

  • 相关阅读:
    1069.查找学生信息
    1023.Excel排序
    1061.成绩排序
    bzoj 1113
    bzoj 1112 treap树
    bzoj 1225 dfs + 一点点数论
    bzoj 1224
    UESTC
    HDU 3530 单调队列
    bzoj 1233
  • 原文地址:https://www.cnblogs.com/wanglouxiaozi/p/12828823.html
Copyright © 2011-2022 走看看