这几天一直在搞sdiowifi的联网相关的事情,期间遇到几个问题,简单总结一下。

目录

前提

sdio wifi需要在对应使用的Linux生成的文件系统中加入一些工具,使得wifi模块能正常进入station模式,工具有:

  • wireless_tools.29.tar.gz // 用于提供操作WiFi的命令,如iwconfig iwlist
  • wpa_supplicant-0.7.3.tar.gz // 用于连接WPA/WPA2加密AP的无线网络工具
  • openssl-0.9.8e.tar.gz // 加密算法库,用于编译wpa_supplicant工具

下载地址1 mima:8mt5

下载地址2

sdiowifi联网

从设备驱动加载开始,到设备的上点的过程,需要结合硬件和原理图进行实现,这里只说一个大概的流程:

  • 1:查看模块连接芯片对应的Linux中的mmc管脚的位置,在设备树中添加节点

  • 2:修改完后,在 /sys/bus/platform/drivers/*****mmc/ 查看mmc是否被启用成功

  • 3:还需在内核中添加配置项

    --Networking support 
    <*>RF switch subystem support  ---->
    
    //否则,在使用hostapd命令时会报错:
    
    rfkill:Cannot open RFKILL control device
    
  • 4:修改makefile 将下载的驱动解压后,修改其目录下的Makefile文件的配置:

    CONFIG_POWER_SAVING = n
    CONFIG_PLATFORM_ARM_SUNxI = y
    CROSS_COMPILE = ../tools/external-toolchain/bin/arm-linux-gnueabihf-
    KVER := 4.14.14
    KSRC = ../linux-4.14
    
  • 5:编译命令 运行:

    make -j4
    

    编译完成后,会在目录下生成8***fs.ko。在板上系统加载此驱动模块后,会有”wlan0”网络设备

  • 6:连接

1) 激活无线网卡 ifconfig wlan0 up

2) 扫描热点 iwlist wlan0 scanning ( iwlist wlan0 scanning | grep ESSID )

3) 连接到开放热点 iwconfig wlan0 essid “s7edge” udhcpc -i wlan0

4) 连接到WPA/WPA2加密的热点 创建/etc/wpa_supplicant.conf网络配置文件,写入ssid和key

5)连接到配置文件中指定的热点: wpa_supplicant -Dwext -B -iwlan0 -c/etc/wpa_supplicant.conf udhcpc -i wlan0

查看连接状态

iwconfig

iwconfig是LWE最主要的工具,可以对无线网卡的大部分参数进行配置 通过这个命令查看相应的状态,其中需要知道

dbm是无线信号的强度单位,通常用来表示无线信号强度的大小。dbm是一个表示功率绝对值的值,是以1mw为0dbm,公式dbm=10×lg(毫瓦数/1),所以为负值,同时这个值越大,表示信号越好。无线信号的dbm值即信号强度一般在-30~-120之间。-35已经很强了,基本上没什么衰减,是非常好的网络连接了。wifi正常信号强度应该是-40 dbm ~ -85 dbm之间。小于 -90 dbm 就很差了,几乎办法连接和使用。

常用命令

1、iwlist 命令:用于对/proc/net/wireless文件进行分析,得出无线网卡相关信息

iwlist wlan0 scanning 搜索当前无线网络

iwlist wlan0 frequen 显示频道信息

iwlist wlan0 rate 显示连接速度

iwlist wlan0 power 显示电源模式

iwlist wlan0 txpower 显示功耗

iwlist wlan0 retry 显示重试连接次数(网络不稳定查看)

iwlist wlan0 ap 显示热点信息

iwlist --help 显示帮助信息

iwlist --version 显示版本信息

2、iwconfig 系统配置无线网络设备或显示无线网络设备信息。iwconfig 命令类似于ifconfig命令,但是他配置对象是无线网卡,它对网络设备进行无线操作,如设置无线通信频段

auto 自动模式

essid 设置ESSID

nwid 设置网络ID

freq 设置无线网络通信频段

chanel 设置无线网络通信频段

sens 设置无线网络设备的感知阀值

mode 设置无线网络设备的通信设备

ap 强迫无线网卡向给定地址的接入点注册

nick<名字> 为网卡设定别名

rate<速率> 设定无线网卡的速率

rts<阀值> 在传输数据包之前增加一次握手,确信信道在正常的

power 无线网卡的功率设置

3、iw 是一种新的基于 nl80211 的用于无线设备的CLI配置实用程序。它支持最近已添加到内核所有新的驱动程序。采用无线扩展接口的旧工具iwconfig已被废弃,强烈建议切换到 iw 和 nl80211。

Linux内核的其余部分,iw 仍处于开发阶段。功能被随时添加。 iw 的唯一文档就是此页和“iw help”的输出。 请帮助扩大这个页面。

有一个页面列出iwconfig和iw的用例:替换 iwconfig.

iw help  帮助

iw ibss leave  查看WiFi是否打开状态

iw list  获得所有设备的功能,如带宽信息(2.4GHz,和5GHz),和802.11n的信息

iw dev wlan0 scan  扫描

iw event  监听事件

iw dev wlan0 link  获得链路状态

iw wlan0 connect foo  连接到已禁用加密的AP,这里它的SSID是foo

iw wlan0 connect foo 2432  假设你有两个AP SSID 都是 foo ,你知道你要连接的是在 2432 频道

iw wlan0 connect foo keys 0:abcde d:1:0011223344  连接到使用WEP的AP

iw dev wlan1 station dump  获取station 的统计信息

iw dev wlan1 station get  获得station对应的peer统计信息

iw wlan0 set bitrates legacy-2.4 12 18 24  修改传输比特率

iw dev wlan0 set bitrates mcs-5 4  修改tx HT MCS的比特率

iw dev wlan0 set bitrates mcs-2.4 10

iw dev wlan0 set bitrates mcs-5  清除所有 tx 比特率和设置的东西来恢复正常

iw dev set txpower [] 设置传输功率

iw phy set txpower [] 设置传输功率

iw dev wlan0 set power_save on 设置省电模式

iw dev wlan0 get power_save 查询当前的节电设定

iw phy phy0 interface add moni0 type monitor 添加一个 monitor 接口

DNS Resolver

  一个域名 (Domain Name) 由一个或多个标签 (label) 组成,标签之间用点隔开。最右端的标签代表顶级域 (top-level domain,TLD)。DNS (Domain Name System, 域名解析系统) 是互联网的一项核心服务,它是一个分布式层次化的系统,能够将域名和IP地址相互映射。DNS通过允许一个域名服务器把它的一部分域名解析服务委托给子服务器而实现了一种层次化的域名空间。DNS由解析器 (Resolver) 和域名服务器两部分组成。

  DNS系统的客户端被称为DNS解析器 (DNS Resolver)。在Linux系统上,解析器并不是特指某个应用程序,而是指解析器库。这个库包含了标准C库中的一系列函数,最主要的两个函数是gethostbyname()和gethostbyaddr()。可以对DNS解析器进行配置,使得它们查找/etc/hosts中的信息、查询DNS服务器或者使用网络信息服务系统的配置信息。libc使用/etc/host.conf配置文件;glibc使用/etc/nsswitch.conf配置文件。

  /etc/host.conf中主要的选项有:(1) order指定域名解析的查找顺序,其中hosts表示/etc/hosts配置文件;bind表示查询DNS服务器;nis表示查询NIS系统的配置信息。(2) multi [on|off]指定/etc/hosts中的主机是否可以有多个IP地址。

  /etc/nsswitch.conf是名字服务开关 (name service switch) 的配置文件,其中对应DNS解析器的数据库名字是hosts:。它的主要选项有:(1) dns表示使用DNS解析地址 (2) files表示使用/etc/hosts和/etc/network配置文件 (3) nis或nisplus。

  DNS服务器在/etc/resolv.conf中配置。

ping

  ping命令用来测试网络上的一台主机是否能够连通。ping命令向目标主机发送ICMP (Internet Control Message Protocol) 回声请求消息然后等待目标主机的回应,与此同时计算消息从源主机到目标主机的往返时间 (round-trip time,RTT)。

小结

进一步对linux网卡设备的操作,及wifi的性能指标,相关命令有了进一步的学习,这里还有一个问题,就是可能会出现能ping通ip,但是ping不通域名,这里发现是dns的相关脚本错误,未添加相关hostname的信息导致