主线固件,/etc/config/wireless 定制



  • 这个文件是根据 package/kernel/mac80211/files/lib/wifi/mac80211.sh 生成的,内容如下:

    其中110-123行动态生成配置,如需定制就要改动这里。

    #!/bin/sh
    append DRIVERS "mac80211"
    
    lookup_phy() {
            [ -n "$phy" ] && {
                    [ -d /sys/class/ieee80211/$phy ] && return
            }
    
            local devpath
            config_get devpath "$device" path
            [ -n "$devpath" ] && {
                    for phy in $(ls /sys/class/ieee80211 2>/dev/null); do
                            case "$(readlink -f /sys/class/ieee80211/$phy/device)" in
                                    *$devpath) return;;
                            esac
                    done
            }
    
            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)" ] || continue
                            phy="${_phy##*/}"
                            return
                    done
            }
            phy=
            return
    }
    
    find_mac80211_phy() {
            local device="$1"
    
            config_get phy "$device" phy
            lookup_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 0
                    config_get phy "$1" phy
            }
            [ "$phy" = "$dev" ] && found=1
    }
    
    detect_mac80211() {
            devidx=0
            config_load wireless
            while :; do
                    config_get type "radio$devidx" type
                    [ -n "$type" ] || break
                    devidx=$(($devidx + 1))
            done
    
            for _dev in /sys/class/ieee80211/*; do
                    [ -e "$_dev" ] || continue
    
                    dev="${_dev##*/}"
    
                    found=0
                    config_foreach check_mac80211_device wifi-device
                    [ "$found" -gt 0 ] && continue
    
                    mode_band="g"
                    channel="11"
                    htmode=""
                    ht_capab=""
    
                    iw phy "$dev" info | grep -q 'Capabilities:' && htmode=HT20
    
                    iw phy "$dev" info | grep -q '5180 MHz' && {
                            mode_band="a"
                            channel="36"
                            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} ]; then
                            path="$(readlink -f /sys/class/ieee80211/${dev}/device)"
                    else
                            path=""
                    fi
                    if [ -n "$path" ]; then
                            path="${path##/sys/devices/}"
                            case "$path" in
                                    platform*/pci*) path="${path##platform/}";;
                            esac
                            dev_id="set wireless.radio${devidx}.path='$path'"
                    else
                            dev_id="set wireless.radio${devidx}.macaddr=$(cat /sys/class/ieee80211/${dev}/macaddress)"
                    fi
    
                    uci -q batch <<-EOF
                            set wireless.radio${devidx}=wifi-device
                            set wireless.radio${devidx}.type=mac80211
                            set wireless.radio${devidx}.channel=${channel}
                            set wireless.radio${devidx}.hwmode=11${mode_band}
                            ${dev_id}
                            ${ht_capab}
                            set wireless.radio${devidx}.disabled=1
    
                            set wireless.default_radio${devidx}=wifi-iface
                            set wireless.default_radio${devidx}.device=radio${devidx}
                            set wireless.default_radio${devidx}.network=lan
                            set wireless.default_radio${devidx}.mode=ap
                            set wireless.default_radio${devidx}.ssid=OpenWrt
                            set wireless.default_radio${devidx}.encryption=none
    EOF
                    uci -q commit wireless
    
                    devidx=$(($devidx + 1))
            done
    }
    

Log in to reply