矽昌--Wireless配置简述

news/2024/11/25 3:53:32/

Wireless配置简述

1 编译

1.1 首次编译

​ 如果是第一次编译时就需要添加wifi模块,请检查所需编译版型的配置,配置位于openwrt-18.06/target/linux/siflower/ 文件夹下,例如sf19a28_ac28_fullmask_def.config为ac28版型的配置。 查看配置并作对应修改:(所有矽昌支持的版型的配置文件均在此路径下)

CONFIG_PACKAGE_dnsmasq=y
CONFIG_PACKAGE_wireless-regdb=y
CONFIG_PACKAGE_kmod-cfg80211=y
CONFIG_PACKAGE_kmod-mac80211=y
CONFIG_PACKAGE_MAC80211_DEBUGFS=y
CONFIG_PACKAGE_MAC80211_MESH=y
CONFIG_PACKAGE_kmod-sf_smac=y
CONFIG_PACKAGE_SFSMAC_DBGINFO_ALLOCS=y
CONFIG_PACKAGE_SFUMAC_WIFI_TEST_SCRIPTS=y
CONFIG_PACKAGE_SFUMAC_WIFI_ATE_TOOLS=y
CONFIG_PACKAGE_SFUMAC_FMAC=y
CONFIG_PACKAGE_libiwinfo=y
CONFIG_PACKAGE_hostapd-common=y
CONFIG_PACKAGE_iw=y
CONFIG_WPA_MSG_MIN_PRIORITY=3
CONFIG_DRIVER_11N_SUPPORT=y
CONFIG_DRIVER_11AC_SUPPORT=y
CONFIG_PACKAGE_wpad-mini=y
CONFIG_PACKAGE_iwinfo=y

修改完成后,若编译ac28镜像,则在openwrt-18.06目录下使用./make.sh ac28即可编译,编译完成后在当前目录即可得到镜像。

1.2 非首次编译

如果不是第一次编译,那么可以使用make menuconfig然后选中以下内容:(默认已经配置好,可以直接make -j V=s)

Kernel modules ---> Wireless Drivers--->kmod-sf_smac  
Network--->hostapd-common
Utilities--->iwinfo  
Base system--->dnsmasq

修改完成之后保存,在openwrt-18.06目录下使用make -j V=s即可编译,镜像位于bin/siflower/openwrt-siflower-sf16a18-mpw0-squashfs-sysupgrade.bin

2 wifi配置

1806 sdk 中的 wifi 配置沿用了 openwrt 原始的 wifi 配置,
可以参考 openwrt-wifi配置。
配置文件在镜像中的位置为/etc/config/wireless,典型的配置如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rTxXba7R-1671777490458)(https://developers.siflower.cn/document/picture_download?pictureId=5c6d004e5466e40001704766)]

配置分为两层,wifi-device对应到具体的wifi驱动设备,在我们的硬件中支持2.4G和5G两种device,
wifi-iface对应了单个wifi接口,与单个ssid相对应,
一个wifi-device下面可以配置多个wifi-iface,最多支持4个。

2.1 配置选项说明

2.1.1 wifi-device配置选项

注:默认值为”/”时表示该选项不一定会出现,只有在进行了某些设置的情况下才会出现;默认值为”-“时表示2.4G和5G有差异,将在描述里进行说明。

选项值类型默认值描述
wifi-devicestringradio0驱动设备名称
typestringmac80211驱动类型,目前固定为”mac80211”。
countrystringCN国家码,2个大写字母,默认为CN,表示中国(China),国家码会影响信道和发射功率。
channelstring/int-信道,默认2.4G为信道1,值为”auto”时表示自动选取最优信道,不同国家信道限制不同,如中国地区2.4G信道为1~13 ,5G信道为36~64 、149~165。
txpower_lvlint2发射功率,可设值为0、1、2。该值越大,表示功率越大。
max_all_num_staint64驱动所能连接设备个数的最大值
netisolateboolean0设备隔离,如果设置为1,则从该device下的设备无法访问同一网桥(bridge)中其它bssid的设备。
noscanboolean0值为1时,表示不扫描周围信道。
pathstring-对应驱动在/sys/devices/下的节点,一般不作修改。默认2.4G为”platform/11000000.wifi-lb”,5G为”platform/17800000.wifi-hb”。
htmodestring20MHz带宽模式,2.4G支持20MHz/40MHz,5G支持20MHz/40MHz/80MHz。
hwmodestring-wifi工作模式,2.4G支持11b/11g/11n,5G支持11n/11a/11ac,最终的模式是由htmode和hwmode共同决定的
disabledboolean00表示启用该驱动设备,1表示关闭该驱动设备。
ht_coexboolean/值为1时,表示带宽20MHZ/40MHZ共存,与htmode有一定联系

2.1.2 wifi-iface配置选项

选项值类型默认值描述
wifi-ifacestringdefault_radio0wifi-iface节点名称
devicestring-对应wifi-device驱动名称,默认2.4G为radio0,5G为radio1。
ifnamestringwlan0网卡(iface)的名称,使用ifconfig时会显示对应名称。
networkstringlan对应的网桥(bridge)名称,如果需要把wifi加入到lan口则配置该值为lan。
modestringap (sta、minotor)ap对应热点,sta对应站点(station),monitor对应监听模式。默认为ap模式。
ssidstringSiWIFi-****wifi的名称,最大不超过32位。支持中文,但在串口会显示为”…“。默认名称中的数字来源于mac地址。
encryptionstringnone加密方式,”none”表示不加密,如果想加密,建议改成”psk2+ccmp”
keystring12345678wifi密码,psk2需设置8位以上。当加密方式为不加密(none)时此选项不生效,而其他加密方式必须配置密码。
hiddenboolean0是否隐藏热点,1表示隐藏,0表示不隐藏。隐藏后设备只能通过手动添加SSID才能连接wifi。
wpa_group_rekeyint3600刷新GTK(广播/多播加密密钥)的时间间隔(以秒为单位)。若不设置此项,则使用CCMP / GCMP作为组密码时默认为86400秒(每天一次),使用TKIP作为组密码时默认为600秒(每10分钟一次)。
isolateboolean0连接此wifi的各设备之间是否隔离,1表示隔离,0表示不隔离。
groupint-bridge中的分组,各个不同的group之间在bridge中是不能互相访问的。默认2.4G为0,5G为1。
netisolateboolean0如果配置为1,则从该bssid下的设备无法访问同一bridge中其它bssid的设备。

2.1.3 源码中如何修改wifi的默认配置

修改package/kernel/mac80211/files/lib/wifi/mac80211.sh文件即可。

#!/bin/sh
append DRIVERS "mac80211"lookup_phy() {[ -n "$phy" ] && {[ -d /sys/class/ieee80211/$phy ] && return}local devpathconfig_get devpath "$device" path[ -n "$devpath" ] && {for phy in $(ls /sys/class/ieee80211 2>/dev/null); docase "$(readlink -f /sys/class/ieee80211/$phy/device)" in*$devpath) return;;esacdone}local macaddr="$(config_get "$device" macaddr | tr 'A-Z' 'a-z')"[ -n "$macaddr" ] && {for _phy in /sys/class/ieee80211/*; do[ -e "$_phy" ] || continue[ "$macaddr" = "$(cat ${_phy}/macaddress)" ] || continuephy="${_phy##*/}"returndone}phy=return
}find_mac80211_phy() {local device="$1"config_get phy "$device" phylookup_phy[ -n "$phy" -a -d "/sys/class/ieee80211/$phy" ] || {echo "PHY for wifi device $1 not found"return 1}config_set "$device" phy "$phy"config_get macaddr "$device" macaddr[ -z "$macaddr" ] && {config_set "$device" macaddr "$(cat /sys/class/ieee80211/${phy}/macaddress)"}return 0
}check_mac80211_device() {config_get phy "$1" phy[ -z "$phy" ] && {find_mac80211_phy "$1" >/dev/null || return 0config_get phy "$1" phy}[ "$phy" = "$dev" ] && found=1
}detect_mac80211() {devidx=0config_load wirelesswhile :; doconfig_get type "radio$devidx" type[ -n "$type" ] || breakdevidx=$(($devidx + 1))donefor _dev in /sys/class/ieee80211/*; do[ -e "$_dev" ] || continuedev="${_dev##*/}"found=0config_foreach check_mac80211_device wifi-device[ "$found" -gt 0 ] && continuemode_band="g"channel="1"htmode=""ht_capab=""ssidprefix="-2.4G"noscan="0"band="2.4G"htcodex="0"txpower="20"iw phy "$dev" info | grep -q 'Capabilities:' && htmode=HT20iw phy "$dev" info | grep -q '5180 MHz' && {mode_band="a"channel="161"ssidprefix=""band="5G"txpower="25"iw phy "$dev" info | grep -q 'VHT Capabilities' && htmode="VHT80"}[ -n "$htmode" ] && ht_capab="set wireless.radio${devidx}.htmode=$htmode"if [ -x /usr/bin/readlink -a -h /sys/class/ieee80211/${dev} ]; thenpath="$(readlink -f /sys/class/ieee80211/${dev}/device)"elsepath=""fiif [ -n "$path" ]; thenpath="${path##/sys/devices/}"case "$path" inplatform*/pci*) path="${path##platform/}";;esacdev_id="set wireless.radio${devidx}.path='$path'"elsedev_id="set wireless.radio${devidx}.macaddr=$(cat /sys/class/ieee80211/${dev}/macaddress)"fi[ -f "/sys/devices/factory-read/countryid" ] && {country=`cat /sys/devices/factory-read/countryid`}ssid=SiWiFi-`cat /sys/class/ieee80211/${dev}/macaddress | cut -c 13- | sed 's/://g'`$ssidprefixssid_lease=SiWiFi-租赁-$ssidprefix`cat /sys/class/ieee80211/${dev}/macaddress | cut -c 13- | sed 's/://g'`if [ ! -n "$country" ]; thencountry='CN'fitxpower_lvl=2[ -f "/etc/ext_pa_exist" ] && {txpower_lvl=1}uci -q batch <<-EOFset wireless.radio${devidx}=wifi-deviceset wireless.radio${devidx}.type=mac80211set wireless.radio${devidx}.country=${country}set wireless.radio${devidx}.txpower_lvl=${txpower_lvl}set wireless.radio${devidx}.txpower=${txpower}set wireless.radio${devidx}.channel=${channel}set wireless.radio${devidx}.band=${band}set wireless.radio${devidx}.hwmode=11${mode_band}set wireless.radio${devidx}.noscan=${noscan}set wireless.radio${devidx}.netisolate=0set wireless.radio${devidx}.max_all_num_sta=64set wireless.radio${devidx}.ht_coex=${ht_coex}${dev_id}${ht_capab}set wireless.radio${devidx}.disabled=0set wireless.default_radio${devidx}=wifi-ifaceset wireless.default_radio${devidx}.device=radio${devidx}set wireless.default_radio${devidx}.network=lanset wireless.default_radio${devidx}.mode=apset wireless.default_radio${devidx}.ssid=${ssid}set wireless.default_radio${devidx}.encryption=noneset wireless.default_radio${devidx}.key=12345678set wireless.default_radio${devidx}.hidden=0set wireless.default_radio${devidx}.ifname=wlan${devidx}set wireless.default_radio${devidx}.wpa_group_rekey=36000set wireless.default_radio${devidx}.isolate=0set wireless.default_radio${devidx}.group=1set wireless.default_radio${devidx}.disable_input=0set wireless.default_radio${devidx}.wps_pushbutton=1set wireless.default_radio${devidx}.wps_label=0set wireless.guest_radio${devidx}=wifi-ifaceset wireless.guest_radio${devidx}.device=radio${devidx}set wireless.guest_radio${devidx}.network=guestset wireless.guest_radio${devidx}.mode=apset wireless.guest_radio${devidx}.ssid=${ssid}-guestset wireless.guest_radio${devidx}.encryption=noneset wireless.guest_radio${devidx}.hidden=0set wireless.guest_radio${devidx}.ifname=wlan${devidx}-guestset wireless.guest_radio${devidx}.isolate=1set wireless.guest_radio${devidx}.group=1set wireless.guest_radio${devidx}.netisolate=0set wireless.guest_radio${devidx}.disable_input=0set wireless.guest_radio${devidx}.disabled=1
EOFuci -q commit wirelessif [ "$devidx" == "0" ]; thenuci -q batch <<-EOFset wireless.lease_radio${devidx}=wifi-ifaceset wireless.lease_radio${devidx}.device=radio${devidx}set wireless.lease_radio${devidx}.network=leaseset wireless.lease_radio${devidx}.mode=apset wireless.lease_radio${devidx}.ssid=${ssid_lease}set wireless.lease_radio${devidx}.encryption=noneset wireless.lease_radio${devidx}.hidden=0set wireless.lease_radio${devidx}.ifname=wlan${devidx}-leaseset wireless.lease_radio${devidx}.isolate=1set wireless.lease_radio${devidx}.group=1set wireless.lease_radio${devidx}.netisolate=0set wireless.lease_radio${devidx}.disable_input=0set wireless.lease_radio${devidx}.maxassoc=64set wireless.lease_radio${devidx}.disabled=1EOFuci -q commit wirelessfidevidx=$(($devidx + 1))done
}

2.1.4 htmode与hwmode的对应关系

不同的hwmode决定了htmode可以配置的选项,下表列举了不同模式的对应关系。

2.1.4.1 2.4G配置
2.4G模式配置描述
11boption hwmode 11b该模式下option htmode必须删除
该模式下option ht_coex必须删除
11goption hwmode 11g该模式下option htmode必须删除
该模式下option ht_coex必须删除
11noption hwmode 11g option htmode HT20 (或option htmode HT40) option ht_coex 1当ht_coex的值为1时,处于20MHz/40MHz混合模式;
当ht_coex的值为0时,htmode的值就是频宽
2.1.4.2 5G配置
5G模式配置描述
11aoption hwmode 11a该模式下option htmode必须删除
该模式下option ht_coex必须删除
11noption hwmode 11a option htmode HT20 (或option htmode HT40) option ht_coex 1当ht_coex的值为1时,处于20MHz/40MHz混合模式;
当ht_coex的值为0时,htmode的值就是频宽
11acoption hwmode 11a option htmode VHT20 (或option htmode VHT40 或option htmode VHT80)该模式下option ht_coex必须删除

2.1.5 encryption加密方式

WPA版本密钥加密协议
psk2+tkip+ccmp psk2+tkip+aesWPA2 Personal (PSK)TKIP, CCMP
psk2+tkipWPA2 Personal (PSK)TKIP
psk2+ccmp psk2+aes psk2WPA2 Personal (PSK)CCMP
psk+tkip+ccmp psk+tkip+aesWPA Personal (PSK)TKIP, CCMP
psk+tkipWPA Personal (PSK)TKIP
psk+ccmp psk+aes pskWPA Personal (PSK)CCMP
psk-mixed+tkip+ccmp psk-mixed+tkip+aesWPA/WPA2 Personal (PSK) mixed modeTKIP, CCMP
psk-mixed+tkipWPA/WPA2 Personal (PSK) mixed modeTKIP
psk-mixed+ccmp psk-mixed+aes psk-mixedWPA/WPA2 Personal (PSK) mixed modeCCMP
wepWEP

3.固件烧录之后的wifi配置

3.1 如何修改wifi配置

​ 直接修改配置文件/etc/config/wireless保存后执行**wifi reload**即可

wifi指令执行脚本位于/sbin/wifi,相关使用方法见下表格所示

指令参数描述
wifi-不加任何参数,则重新启用”全部wifi”
wificonfig当”/etc/config/wireless”文件不存在时重新生成该文件
wifireload重新启用”配置有所更改的wifi”
wifidown关闭全部wifi
wifiup启用全部wifi
wifistatus以json串的方式打印wifi信息

3.2 查看wifi信息

使用”iw”指令可查看wifi相关信息,下面列出常见的iw指令。

指令参数描述示例
iwinfo/列出所有无线网络信息iwinfo
iw info列出单个wifi信息iw wlan0 info
iwlist列出所有无线设备信息iw list
iw scan扫描周围信号iw wlan1 scan
iw station dump列出连接该wifi的所有设备信息iw wlan0 station sump

3.3 新增AP节点

在/etc/config/wireless中增加一段即可,最简单的一种配置如下:

  config wifi-ifaceoption device 'radio0'option network 'lan'  option mode 'ap'option ssid 'SiWiFi-new-ap'option encryption 'psk2+ccmp'option key '12345678'option ifname 'wlan0-1'

3.4 新增sta节点

在/etc/config/wireless中增加一段即可,实例如下:

config wifi-ifaceoption key '12345678'option ifname 'sfi0'option network 'wwan'option encryption 'psk2+ccmp'option device 'radio0'option mode 'sta'option bssid 'A8:5A:F3:00:02:3F'option ssid 'SiWiFi-023c-2.4G-8_1'

4.wifi配置生效流程

4.1 如何修改默认配置?

​ 在板子上生成默认配置的脚本为lib/wifi/mac80211.sh,其在源码中位于package/kernel/mac80211/files/lib/wifi/mac80211.sh,此脚本用于生成/etc/config/wirelesss

4.2 默认配置生成后被应用到哪里?

​ /etc/config/wirelesss会被netifd和hostapd使用。
对于netifd,将直接读取wireless的配置;
对于hostapd,会由脚本/lib/netifd/wireless/mac80211.sh读取配置,生成配置文件/var/run/hostapd-phy.conf以供hostapd使用,该脚本在源码中位于package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh*。

4.3 wifi配置流程图

5 wifi驱动模块

wifi模块存放在板子上的目录为/lib/modules/4.14.90/,在板子启动过程中这些模块会依序自动加载

5.1 wifi驱动相关模块加载流程

5.2 wifi驱动模块的相关指令

指令参数描述
insmod“模块名称” …加载该模块,简单指令如insmod /lib/modules/4.14.90/startcore.ko (或insmod startcore.koinsmod startcore)。需要注意的是,有些模块加载需要附加较多参数,建议使用sfwifi指令进行模块操作。
rmmod“模块名称” …卸载该模块
modinfo“模块名称” …显示该模块相关信息
sfwifiremove移除wifi驱动相关模块,包括sf16a18_rf.ko、startcore.ko、sf16a18_fmac.ko
sfwifireload重新加载wifi驱动模块
sfwifireset重新启动wifi驱动相关模块

http://www.ppmy.cn/news/6125.html

相关文章

Qt中实例化一个函数变量时加不加括号的区别,以及括号中的this的使用

一、设计一个测试小程序 废话不多说&#xff0c;直接上代码。 main.h函数就不多说了&#xff0c;没改动。直接上mainwindow.h&#xff0c;也没改动。看mainwindow.cpp的内容。 #include "mainwindow.h" #include "ui_mainwindow.h" #include "test.…

虚函数与纯虚函数

1. 虚函数与纯虚函数 虚函数&#xff1a;在类成员方法的声明&#xff08;不是定义&#xff09;语句前加virtual关键字&#xff0c;此函数就变成了虚函数。具体如下&#xff1a; virtual void function set_value();... endfunction用途&#xff1a;主要用于实现多态。在父类中…

三.keepalived介绍及工作原理

keepalived介绍及工作原理keepalived介绍及工作原理一、keepalived的介绍二、Keepalived服务的重要功能1、管理LVS负载均衡软件2、实现对LVS集群节点健康检查功能&#xff08;healthcheck&#xff09;3、作为系统网络服务的高可用功能&#xff08;failover&#xff09;三、Keep…

QT 学习笔记(十一)

文章目录一、绘图设备1. QPixmap1.1 QPixmap 简介1.2 QPixmap 演示2. QBitmap2.1 QBitmap 简介2.2 QBitmap 演示见 QPixmap 和 QBitmap 的区别。3. QImage3.1 QImage 简介3.2 QImage 演示4. QPicture4.1 QPicture 简介4.2 QPicture 演示二、QPixmap 和 QBitmap 的区别1. widget…

Android基础学习(二十四)—— View绘制

1、Activity.setContentView Activity.setContentView(layoutResID:int)PhoneWindow.setContentView(layoutResID:int)PhoneWindow.installDecor//mContentParent为DecorViewLayoutInflater.inflate(layoutResID:int, mContentParent:ViewGroup)//attachToRoot为 root ! nullL…

【数据结构】详解队列和循环队列

目录一.队列1.队列的概念及结构2.队列的实现Queue.hQueue.c二.循环队列1.循环队列的实现2.设计循环队列解题思路代码一.队列 1.队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出…

单商户商城系统功能拆解52—财务概况

单商户商城系统&#xff0c;也称为B2C自营电商模式单店商城系统。可以快速帮助个人、机构和企业搭建自己的私域交易线上商城。 单商户商城系统完美契合私域流量变现闭环交易使用。通常拥有丰富的营销玩法&#xff0c;例如拼团&#xff0c;秒杀&#xff0c;砍价&#xff0c;包邮…

10.1、Django框架简介、创建第一个应用

文章目录预备知识MVC模式和MTV模式MVC模式MTV 模式Django框架Django框架简介Django框架的应用启动后台admin站点管理数据库迁移创建管理员用户管理界面本地化创建并使用一个应用bookapp项目的数据库模型创建数据库模型生成数据库表数据库上的基本操作启用后台admin站点管理自定…