• linux 下wifi 功能的实现


    一、嵌入式linux四件套配置

    1、网卡选型的依据:

        a.网卡不能乱选,否则没戏。网卡的依据是,kernelmenuconfig -> device drivers -> network device support -> wireless lan -> 一堆驱动,however,这还没有结束;

        b.buildroot -> menuconfig -> target packet -> hardware handling -> *** firmwares -> linux-firmware -> wifi firmwares -> 一堆驱动的bin

    # 这些网卡商都十分淫荡,在官网上放着10年前的固件,但是却给这些软件巨头发放最新的驱动,而且还不开源,嗞嗞。。

    # 接下来是开启一些功能

    2、开启内核rfkill功能

        menuconfig -> networking support -> rf switch subsystem support

    3、开启kernelbuildroot的驱动支持

        a、就是第一步的那两个地方,然后:

        bNetworking support  -> Networking options ->

    <*> Packet socket  

    [*]   NETLINK: mmapped IO

    [*]     IP: DHCP support

    [*]     IP: BOOTP support

    [*]     IP: RARP support

    [*] Network packet filtering (replaces ipchains)    //添加,后面子选项可不选,配置CONFIG_NETFILTER

    4buildroot软件包设置

        buildroot -> menuconfig -> target packet -> network applications

        选择hostapd,iw,wireless tools,wpa_supplicant(注意全选)

    5、然而还没有结束

        buildroot -> busybox-menuconfig -> networking utilities -> udhcpd, udhcpc

        嗯,telnet困难症的朋友,你们现在可以脱离苦海了,把telnetd也选上去吧

    # 这个时候,应该就能顺利启动网卡了,需要验证一下/sys/class/net/wlan0里面有没有phy80211这个东西,如果没有,说明驱动安装失败。

    # 如果是网上找到的开源驱动,并且你不需要开AP,那么即使没有phy80211也能够上网,详见附一

    # 如果你的网卡是usb的,而且比较水,那么网卡有时候会死机,这个时候你怎么搞,它都不会再鸟你了,这个时候,嗯,抽出来,再插进去  = =..

    二、应用程序配置(client篇)

    1ifconfig wlan0 up

    2、情况一:要连接的AP没有密码

        iw dev wlan0 connect "Guest hi-T"

        udhcpc -i wlan0

        # 然后可以用ping

        # 经过使用,Guest的信号还是不错的,丢包率只有10%上下,udhcpcip的速度也是非常快的。

    3、情况二:要连接的AP使用WPA加密

        需要使用wpa_supplicant

        a、创建文件/etc/wpa_supplicant.conf,如果是在buildroot把这个包打上去的,那么应该本来就有这个文件;

        b、编辑文件:/etc/wpa_supplicant.conf

    ctrl_interface=/var/run/wpa_

    ap_scan=1 //必须要这一句,这是导演安排滴

    network={

        ssid="zhd-1"                 # 这是AP的名字

        psk="123456789"        # 这是AP的密码

    }

            保存退出。

        cwpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant

            -D 表示驱动程序; -i 表示网卡; -c 表示配置文件

            如果看到CTRL-EVENT-CONNECTEDdebug输出,证明配置是对的。

            如果看到 pre-shared key maybe incorrect,并且持续不断出现,表示密码可能是错的。

            如果看到其他的信息,有可能是配置文件不完整,甚至是驱动程序本身也是不完整的。

        dCTRL-EVENT-CONNECTED之后一段时间内,如果没有任何输出,证明连接稳定,可以进行下一步:

            wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant -B,让wpa_supplicant常驻在后台,控制网卡

            处于client模式;

        eudhcpc -i wlan0, 获取ip

        f、用完后,wpa_cli -i wlan0 terminate,退出wpa_supplicant,并停止wlan0

        # 使用 zhd-1 测试带密码wifi,请务必保持耐心,不要随便 ^C ,请久等。。(ping的丢包率在40%以上。。。)

    三、应用程序配置(AP篇)

    1sh: iw list

        a. 找到Supported interface modes, 发现内有APluckygo next;

        b. No AP exist, oh shit! and fuck too!   You doomed, breake a window and just jump off, goodbye and never say hi ~~~

    2、建立/etc/hostapd.conf,内容如下:

        interface=wlan0    # 所用的网卡

        driver=nl80211     # 所用的驱动

        ssid=hostapd        # 热点名称

        channel=6            # 也称为频段,wifi共有13个通道,其中1611是最佳频道

        hw_mode=g         # 可以为abg

        ignore_broadcast_ssid=0    # 广播ssid

        auth_algs=1          # 1=WPA22=WEP

        wpa=2                   # 1=WPA1, 2=WPA23=BOTH

        wpa_passphrase=12345678    # 密码

        wpa_key_mgmt=WPA-PSK    # 加密方式

        wpa_pairwise=TKIP    # 802.11g 加密算法

        rsn_pairwise=CCMP    # 802.11i 加密算法

    3hostapd -d /etc/hostapd.conf

        -d 表示debug模式,所以会出来一大片信息,仔细检查有没有发现file not found错误,一般是由于配置错误导致的,有时候也会是驱动的原因。这个时候用手机应该能够看到有一个叫hostapd的热点。。。

    4、接下来,配置udhcpd,配置文件样本可以在buildroot/output/build/busybox***/examples/udhcpd/udhcpd.conf中找到,使用 cat udhcpd | grep ^# -v 命令,查看默认的配置

    5、那么,其实呢,这个东东是建立在有线网络的基础上的,并且要作为一个能够上网的路由器使用,而我们只需要互联通信就ok了,所以有很多东西是没有必要的,核心配置,只有如下的几条:

        # 确定IP的范围

        start    192.168.0.20

        end     192.168.0.25

        # 选定udhcpd的设备

        interface    wlan0

        option    subnet    255.255.255.0    # 子网掩码

        option    router    192.168.0.1        # 网关(就是本机)

        option    lease        86400                # 租约时间,其实就是该IP地址的生命周期,单位是秒,86400是一天

        

        设置好了后,保存在/etc/udhcpd.conf

    6hostapd /etc/hostapd.conf -B

        ifconfig wlan0 192.168.0.1 netmask 255.255.255.0   # 注意,一定要和udhcpd.conf严格匹配

        touch /var/lib/misc/udhcpd.leases

        udhcpd -S /etc/udhcpd.conf

    7、用手机再找到hostapd热点,连接,连接了之后,查看手机IP

    8、开发板:ping -I wlan0 手机ip, 如果有应答,就成功了。

    附一、开源驱动的应用程序配置(仅client

    # 现在的驱动程序已不支持iwconfig,用iwconfig配置任何新版wlan驱动均会报错

    1ifconfig wlan0 up

    2iwconfig wlan0 scan  # 得到附近AP的列表

    3iwconfig wlan0 essid "zhd-1" key "123456789"

    # 感想:脚本is very important,要加进系统的东西越来越多,不得不学着写了脚本,在buildroot编完后,还要再用脚本向rootfs中打进一大堆文件、修改一堆东西,要是手动完成的话,这得等到猴年马月啊。。。

  • 相关阅读:
    python 项目实例
    flash教程
    flask request
    systemd-unit
    kubernets HA集群手动部署
    zookeeper(1)-简单介绍
    apache与nginx原理
    技术文章整理
    CMS垃圾回收器
    Zookeeper
  • 原文地址:https://www.cnblogs.com/chencanjian/p/5983997.html
Copyright © 2020-2023  润新知