SSU_WLAN使用参考
1. WLAN内核配置说明¶
1.1. 配置WEXT¶
Wext是Wireless Extension,是内核中WIFI驱动和用户态进程的标准接口,iwpriv命令依赖这个配置。
1.2. 配置CFG80211¶
CFG80211是内核中WIFI驱动和用户态进程的标准接口,在CFG80211出现之前是WEXT,现在越来越多的使用CFG80211。
1.3. 配置桥接¶
使用wlan及p2p实现板端WIFI桥接
make menuconfig 1: Networking support -> Wireless: [*] cfg80211 - wireless configuration API 2: Device Drivers->Generic Driver options [*] Support for uevent helper 3: Networking support → Networking options [M] 802.1d Ethernet Bridging
2. 工具使用¶
2.1. wap_supplicant使用¶
wpa_supplicant是一个独立运行的守护进程,用来启动无线网络后台服务,在消息循环中处理WPA状态机、控制命令、驱动事件、配置信息等。
常用命令参数如下:
-I <ifname> // 网络接口名称 -c <conf> // 配置文件名称 -C <ctrl_intf> // 控制接口名称 -D<driver> // 驱动类型名称 -p <driver_param> // 驱动参数 -b <br_ifname> // 桥接口名称 -d // 增加调试信息
使用样例:
/customer/wifi/wpa_supplicant -Dnl80211 -i wlan0 -c /customer/wpa_supplicant.conf -d &
启动无线网络服务,驱动类型为nl80211,使用网络端口名称为wlan0,配置文件路径为/customer/wpa_supplicant.conf。若配置文件中有保存热点信息,则发起连接。
2.2. wpa_cli使用¶
wpa_cli是客户端程序,与wpa_supplicant通信,搜索、设置和连接网络。
常用命令参数如下(如当前网络接口为wlan0):
wpa_cli –i wlan0 scan // 扫描附近的热点 wpa_cli –i wlan0 scan_result // 显示扫描结果 wpa_cli –I wlan0 status // 查看当前连接信息 wpa_cli –I wlan0 add_network // 新建一个链接,返回network id wpa_cli –I wlan0 set_network <network id> <variable> <value> // 设置网络参数,如ssid,psk,keymgmt wpa_cli –I wlan0 select_network <network id> // 选择指定的网络(会断开其它的连接) wpa_cli –I wlan0 enable_network <network id> // 使能指定网络 wpa_cli –I wlan0 disable_network <network id> // 禁用指定网络 wpa_cli –I wlan0 save_config // 保持连接信息至wpa_supplicant.conf
2.3. iwlist使用¶
iwlist用于对/proc/net/wireless文件进行分析,得出无线网卡相关信息。
常用命令参数如下(如当前网络接口为wlan0):
iwlist wlan0 scanning // 扫描当前无线网络 iwlist wlan0 frequen // 显示频道信息 iwlist wlan0 rate // 显示连接速度 iwlist wlan0 power // 显示电源模式
2.4. udhcpc使用¶
udhcpc作为dhcp客户端,动态获取ip。
常用命令参数如下:
-i <ifname> // 网络接口名称 -s <script> // udhcpc script -a // 使用arping验证提供的地址 -t <count> // 发送数据包次数 -T <time> // 数据包间时间间隔(默认是3s) -f // 前台执行 -b // 后台执行 -n // 租约获取失败时退出 -q // 获取到租约后退出
使用样例:
udhcpc -q -i wlan0 -s /etc/init.d/udhcpc.script &
2.5. hostapd使用¶
hostapd用来将当前设备作为热点,允许其它网络设备接入。
使用样例:
hostapd -B /customer/wifi/hostapd.conf // -B:在后台执行守护进程
2.6. dnsmasq使用¶
dnsmasq是一个轻量级的,易于配置的DNS转发器和DHCP服务器。它的目的是给一个小网络提供DNS和可选的DHCP。
常用命令参数如下:
-i <ifname> // 网络接口名称 -C <path> // 指定配置文件路径(默认为/etc/dnsmasq.conf) --no-daemon // 非后台执行
使用样例:
dnsmasq -i p2p0 --no-daemon -C /customer/wifi/dnsmasq.conf &
2.7. hostapd_cli使用¶
hostapd_cli作为hostapd的客户端,使用时,首先需要先启动hostapd主程序。hostapd启动后,运行cli客户端时,会自动去连接当前正在工作的hostapd进程,连接成功后,cli客户端就可以对hostapd应用程序进行参数的获取和控制。
常用命令参数如下:
-i <ifname> // 网络接口名称 -p <path> // 控制套接字路径(默认为/var/run/hostapd) -B // 后台执行守护进程
使用样例:
/customer/wifi/hostapd_cli -I p2p0 –p /var/run/hostapd all_sta &
3. WIFI功能测试¶
3.1. 加载WIFI驱动¶
先insmod加载WIFI驱动,以ssw102b为例,对应驱动是ssw102b_wifi_sdio.ko。执行insmod ssw102b_wifi_sdio.ko,使用ifconfig –a查看,可以看到新生成wlan0及p2p0节点:
3.2. STA模式测试¶
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:/lib:/customer/wifi mkdir -p /tmp/wifi/run chmod 777 /tmp/wifi/run ifconfig wlan0 up
创建wpa_supplicant.conf文件,编辑如下,使用测试热点为“sstest”,密码为“12345678”。
测试连接:
/customer/wifi/wpa_supplicant -Dnl80211 -i wlan0 -c /appconfigs/wpa_supplicant.conf -d &
获取IP:
udhcpc -q -i wlan0 -s /etc/init.d/udhcpc.script &
查看wlan0信息:
扫描热点:
/customer/wifi/iwlist scanning
系统会自动连接wpa_supplicant.conf中设置好的wifi网络。
3.3. AP模式测试¶
mkdir -p /var/run/hostapd mkdir -p /var/wifi/misc mkdir -p /var/lib/misc ifconfig p2p0 up ifconfig p2p0 192.168.1.100 netmask 255.255.255.0
hostapd配置文件在/customer/wifi/hostapd.conf,其中ssid为当前设备的热点名称,wpa_passphrase为设备的连接密码。可修改此文件变更设备名称和密码。
开启热点:
./customer/wifi/hostapd -B /customer/wifi/hostapd.conf ./customer/wifi/dnsmasq -i p2p0 --no-daemon -C /customer/wifi/dnsmasq.conf &
网络设备可以搜索到热点“ssw101bap”,使用手机连接该热点.
3.4. 桥接模式测试¶
修改/appconfigs/wpa_supplicant.conf,添加外部AP热点信息:
/ # vi appconfigs/wpa_supplicant.conf ctrl_interface=/tmp/wifi/run/wpa_supplicant update_config=1 network={ ssid="sstest" psk="12345678" }
加载驱动:
cd /customer/wifi mkdir -p /tmp/wifi/run/wpa_supplicant insmod llc.ko insmod stp.ko insmod bridge.ko
hostapd.conf需要添加一项配置项:
interface=p2p0 //ssw101/2b 采用p2p0做ap interface。 bridge=br0 //固定 hw_mode=g //固定 channel=1
注意: 桥接使用channel,前后端都是一致的。取决于wlan0 连接到ap的channel,此处要填写相应channel。
添加环境变量,将wifi用到的so添加到系统中。一般放置在/customer/wifi下面export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:pwd
初始化wifi模块
ssu938x系列参考脚本./sigma_wifi_init.sh
注:如果遇到 sh: write error: Invalid argument
可以忽略。
建立网卡桥接:
ifconfig wlan0 up ifconfig p2p0 up ifconfig wlan0 0.0.0.0 ifconfig p2p0 0.0.0.0 brctl addbr br0 brctl addif br0 wlan0 brctl addif br0 p2p0 ifconfig br0 up
sta连接wifi:
./wpa_supplicant -Dnl80211 -i wlan0 -c /appconfigs/wpa_supplicant.conf -b br0 & udhcpc -S /etc/init.d/udhcpc.script -i br0
开启AP模式:
./hostapd -B /customer/wifi/hostapd.conf ./dnsmasq -i p2p0 --no-daemon -C /customer/wifi/dnsmasq.conf & AP: SSID:ssw101bap pwd:12345678
如果sta可以连接外网,那么通过pc连接ssw101bap后,也可以正常连上网络。
注:如果sta连接wifi,出现 wlan0 is not sta mode的错误信息,可能是wifi驱动和kernel没有匹配。请找对应的wifi模组厂,提供新的ko。