zoukankan      html  css  js  c++  java
  • Marvell w8782 sdio wifi AP模式设置

    http://blog.csdn.net/junllee/article/details/8895908

    w8782工作在station模式一切正常,于是想试试AP模式(master mode):

     Arm-linux:$> iwconfig mlan0 mode master
    Error for wireless request "Set Mode" (8B06) :
        SET failed on device mlan0 ; Invalid argument.

    Arm-linux:$> iwconfig mlan0 mode ad-hoc

    Arm-linux:$>

         设置master模式失败,而设置ad-hoc模式是正常的, 没有出错。

         检查移植过来的w8782的驱动,在moal_wext.c 和 moal_uap_wext.c中都有一个名为woal_set_bss_mode()的函数用于设置工作模式。

    跟踪了一下,发现使用iwconfig mlan0 mode master 或 iwconfig mlan0 mode managed 时,都调用到moal_wext.c中的woal_set_bss_mode()函数,

    而这个函数中,如下所示,竟然没有对maser 模式 IW_MODE_MASTER的处理,看来8782的ap模式不能用iwconfig来进行配置?!!

     394     switch (*uwrq) {
     395     case IW_MODE_INFRA:
     396         bss->param.bss_mode = MLAN_BSS_MODE_INFRA;
     397         break;
     398     case IW_MODE_ADHOC:
     399         bss->param.bss_mode = MLAN_BSS_MODE_IBSS;
     400         break;
     401     case IW_MODE_AUTO:
     402         bss->param.bss_mode = MLAN_BSS_MODE_AUTO;
     403         break;
     404     default:
     405         ret = -EINVAL;
     406         break;
     407     }

        仔细检查w8782驱动原码中附带的文件,发现一个README_UAP文件,仔细研读一下,原来是需要使用另外一个称为uaputl的工作进行AP模式的配置。

    uaputl在驱动原码中的mapp/uaputl 下面。 交叉编译后生成uaputl,拷贝到开发板中:

        终端运行 uaputl bss_start后,用手机搜索wifi,新发现了一个名为 "Marvell Micro AP"无线网线,无加密。连上后查看一下IP地址,是169.254.201.15

        使用WPA2加密:

           uaputl bss_stop                                              //if started, stop it first
           uaputl sys_cfg_protocol 32                             //choose WPA2 protocol
           uaputl sys_cfg_wpa_passphrase 1234567890   //set encryption keys
           uaputl sys_cfg_cipher 8 8
           uaputl bss_start 

        再用手机搜索wifi,又新出现一个名为 "Marvell Micro AP"的WPA2加密的无线网线,输入密钥:1234567890,OK,连接成功。

       前面提到,连上后IP地址是169.254.201.15, 这是因为板子上Linux没有启动DHCP服务的原因,client使用伪随机算法,使得

       地址取得分布在169.254.1.0和169.254.254.255之间。下面启动dhcpd(busybox中带有udhcpd,可直接用):

       创建udhcpd.conf文件,放在/etc/目录,内容如下所示:

    start 192.168.0.20

    end 192.168.0.254

    interface uap0

    opt dns 192.168.1.1

    option subnet 255.255.255.0

    opt router 192.168.0.1

    #opt wins 192.168.0.1

    option dns 192.168.1.1 # appened to above DNS servers for a total of 3

    option domain local

    option lease 864000 # 10 days of seconds

     

      配置AP的IP地址:ifconfig uap0 192.168.0.1 netmask 255.255.255.0 up

      启动dhcpd : udhcpd /etc/udhcpd.conf

      重新启动AP: uaputl bss_stop

                               uaputl bss_start

     

        用手机重新搜索 "Marvell Micro AP"并连接后,查看其IP地址为: 192.168.0.21 , 在板子上ping 192.168.0.21, OK.

    Arm-linux:$>ping 192.168.0.21
    PING 192.168.0.21 (192.168.0.21): 56 data bytes
    64 bytes from 192.168.0.21: seq=0 ttl=128 time=13.971 ms
    64 bytes from 192.168.0.21: seq=1 ttl=128 time=2.805 ms
    64 bytes from 192.168.0.21: seq=2 ttl=128 time=2.680 ms
    64 bytes from 192.168.0.21: seq=3 ttl=128 time=2.958 ms
    64 bytes from 192.168.0.21: seq=4 ttl=128 time=2.839 ms
    64 bytes from 192.168.0.21: seq=5 ttl=128 time=2.839 ms
    ^C
    --- 192.168.0.21 ping statistics ---
    6 packets transmitted, 6 packets received, 0% packet loss
    round-trip min/avg/max = 2.680/4.682/13.971 ms
    Arm-linux:$>

    http://blog.csdn.net/chinazjn/article/details/9134157

     手头产品是类似于IPC的设备,通过wifi传输视频。目标客户可能在户外使用较多,这就要求wifi 应该是Ap模式工作。Marvell sd8782 Src 源码下载

    根据习惯,度娘上一顿收缩,参考博文一篇

         测试uaputl 工具报错,所有命令全部不能配置。因为实际使用的marvell驱动是芯片家直接给的,而手头有的源码版本要低些,uaputl工具是低版本源码编译的,可能这里有版本差异在里面了,先放放,后面拿到源码再试这个。

         那我用iwpriv 工具来配置网卡了。

    一、装一堆驱动模块

    #insmod rfkill_backport.ko;
    #insmod compat_firmware_class.ko;
    #insmod compat.ko;
    #insmod cfg80211.ko;
    #insmod mlan.ko

    #insmod sd8xxx.ko drv_mode=2&
    #echo 1 > /sys/class/compat_firmware/mmc1:0001:1/loading
    #cat "/lib/firmware/sd8782_uapsta.bin" > /sys/class/compat_firmware/mmc1:0001:1/data
    #echo 0 > /sys/class/compat_firmware/mmc1:0001:1/loading

    上面三行命令作用是,我们使用的底层驱动有bug,自己找不到sd8782_uapsta.bin文件(无论是直接编译进内核,还是用udev,nxp技术支持大哥这么解释)。手工指定个路径暂时解决下。

    二、iwpriv配置

    #iwpriv uap0 apcfg "ASCII_CMD=AP_CFG,SSID=TEST_uAP,SEC=open,CHANNEL=8"

    #iwpriv uap0 start
    #iwpriv uap0 bssstart

    这时可以识别到uap0了

    /drivers # iwconfig
    lo        no wireless extensions.

    dummy0    no wireless extensions.

    uap0      IEEE 802.11-DS  ESSID:""  
              Mode:Master  Frequency:2.437 GHz  Access Point: Not-Associated   
              Encryption key:off
              Link Quality:0  Signal level:0  Noise level:0
              Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
              Tx excessive retries:0  Invalid misc:0   Missed beacon:0

    三、配置Ip地址

    /drivers # ifconfig uap0 192.168.1.2
    /drivers # ifconfig
    uap0      Link encap:Ethernet  HWaddr 48:02:2A:31:37:26  
              inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
              UP 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)

    四、用手机测试下,能识别到这个无线网络了,但是链接不上,这时udhcp要上场了。

    下载交叉编译udhcp,当然busybox里面已经带udhcp的,独立编译或着编译busybox都可以。

    本人选择独立编译,省事。

    修改makefile: CROSS_COMPILE=arm-linux-

    #make 

    把udhcpd copy到您的文件系统下(PS,我还编译了dhcpd,出来有5M多)。

    在samples下拷个udhcpd.conf放到/etc/下。

    然后自己对udhcpd.conf修修改改,就可以跑来了。

  • 相关阅读:
    LeetCode 面试题 02.02. 返回倒数第 k 个节点
    LeetCode 1290. 二进制链表转整数
    LeetCode 面试题52. 两个链表的第一个公共节点
    LeetCode 2. 两数相加
    Jupyter Notebook 常用快捷键 (转)
    LeetCode 414. 第三大的数
    LeetCode 404. 左叶子之和
    三年了
    LeetCode 543. 二叉树的直径
    求结点在二叉排序树中层次的算法
  • 原文地址:https://www.cnblogs.com/shangdawei/p/3484737.html
Copyright © 2011-2022 走看看