mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-10-26 18:52:51 +08:00
🍕 Sync 2026-09-21 04:46:25
This commit is contained in:
1 parent
9c6642b69b
commit
9e39c8f144
2 files changed
+67
-20
No files matched your search
@@ -10,7 +10,7 @@ include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=my-default-settings
|
||||
PKG_VERSION:=2
|
||||
PKG_RELEASE:=15
|
||||
PKG_RELEASE:=16
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ while [ $# -gt 0 ]; do
|
||||
shift
|
||||
done
|
||||
|
||||
# 密码校验:如果传入了密码,校验其长度是否符合 WPA/WPA2/WPA3 规范(8~63位)
|
||||
# 密码合法性校验
|
||||
if [ $HAS_PASSWD -eq 1 ] && [ -n "$CUSTOM_PASSWD" ]; then
|
||||
pwd_len=${#CUSTOM_PASSWD}
|
||||
if [ "$pwd_len" -lt 8 ] || [ "$pwd_len" -gt 63 ]; then
|
||||
@@ -75,7 +75,67 @@ else
|
||||
SSID_PASSWD=""
|
||||
fi
|
||||
|
||||
# 2. 识别射频频段函数 (2g, 5g, 6g)
|
||||
# 2. 深度就绪检测:确保内核PHY驱动、多频硬件、系统初始化状态和UCI配置全部真正就绪
|
||||
wait_wifi_ready() {
|
||||
local max_wait=15
|
||||
local waited=0
|
||||
|
||||
while [ $waited -lt $max_wait ]; do
|
||||
local phy_count=0
|
||||
local uci_count=0
|
||||
|
||||
# B. 检查内核物理无线设备 (PHY)
|
||||
local phys="$(ls -d /sys/class/ieee80211/phy* 2>/dev/null)"
|
||||
[ -n "$phys" ] && phy_count=$(echo "$phys" | wc -w)
|
||||
|
||||
# C. 统计 UCI wireless 中实际已解析出的 wifi-device 节点数量(非文件大小)
|
||||
if [ -s /etc/config/wireless ]; then
|
||||
local uci_radios="$(uci -q show wireless 2>/dev/null | sed -n 's/^wireless\.\([^.]*\)=wifi-device/\1/p')"
|
||||
[ -n "$uci_radios" ] && uci_count=$(echo "$uci_radios" | wc -w)
|
||||
fi
|
||||
|
||||
# D. 自动探测与配置补全:
|
||||
# - 物理网卡已加载,但 UCI 配置中的 radio 数量少于物理网卡数量(多频网卡尚未完全生成配置)
|
||||
# - 或者配置文件缺失/没有 radio 配置
|
||||
if [ $phy_count -gt 0 ] && [ $uci_count -lt $phy_count ]; then
|
||||
[ -x /sbin/wifi ] && /sbin/wifi config >/dev/null 2>&1
|
||||
elif [ $phy_count -eq 0 ] && [ $uci_count -eq 0 ] && [ ! -s /etc/config/wireless ]; then
|
||||
[ -x /sbin/wifi ] && /sbin/wifi config >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
# 重新同步一次 UCI radio 数量
|
||||
if [ -s /etc/config/wireless ]; then
|
||||
local uci_radios_check="$(uci -q show wireless 2>/dev/null | sed -n 's/^wireless\.\([^.]*\)=wifi-device/\1/p')"
|
||||
[ -n "$uci_radios_check" ] && uci_count=$(echo "$uci_radios_check" | wc -w)
|
||||
fi
|
||||
|
||||
# E. 判定就绪标准:
|
||||
# 1) UCI 中有效 wifi-device 数量 > 0
|
||||
# 2) 若检测到物理 PHY,UCI radio 数量必须完全覆盖检测到的 PHY 数量
|
||||
if [ $uci_count -gt 0 ]; then
|
||||
if [ $phy_count -eq 0 ] || [ $uci_count -ge $phy_count ]; then
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
sleep 1
|
||||
waited=$((waited + 1))
|
||||
done
|
||||
|
||||
# 超时保护:只要至少有一个 radio 节点,允许降级继续
|
||||
if [ $uci_count -gt 0 ]; then
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
# 执行深度就绪等待
|
||||
if ! wait_wifi_ready; then
|
||||
echo "[ERROR] 未检测到可用无线硬件或无线配置生成超时!" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 3. 识别射频频段函数 (2g, 5g, 6g)
|
||||
detect_band() {
|
||||
local radio="$1"
|
||||
local band="$(uci -q get wireless.${radio}.band 2>/dev/null | tr 'A-Z' 'a-z')"
|
||||
@@ -86,9 +146,9 @@ detect_band() {
|
||||
*6g*) echo "6g"; return ;;
|
||||
esac
|
||||
|
||||
# 若未定义 band 属性,根据 channel(信道)推断
|
||||
# 信道 (channel) 推断
|
||||
local channel="$(uci -q get wireless.${radio}.channel 2>/dev/null)"
|
||||
if [ -n "$channel" ] && [ "$channel" -eq "$channel" ] 2>/dev/null; then
|
||||
if [ -n "$channel" ] && [ "$channel" -eq "$channel" 2>/dev/null ]; then
|
||||
if [ "$channel" -ge 1 ] && [ "$channel" -le 14 ]; then
|
||||
echo "2g"; return
|
||||
elif [ "$channel" -ge 32 ] && [ "$channel" -le 177 ]; then
|
||||
@@ -98,7 +158,7 @@ detect_band() {
|
||||
fi
|
||||
fi
|
||||
|
||||
# 根据 hwmode 模式推断
|
||||
# hwmode 推断
|
||||
local hwmode="$(uci -q get wireless.${radio}.hwmode 2>/dev/null | tr 'A-Z' 'a-z')"
|
||||
case "$hwmode" in
|
||||
*a*) echo "5g"; return ;;
|
||||
@@ -117,20 +177,6 @@ detect_band() {
|
||||
echo "2g"
|
||||
}
|
||||
|
||||
# 3. 检查并生成无线配置(非空探测,避免死等 10 秒)
|
||||
if [ ! -s /etc/config/wireless ]; then
|
||||
[ -x /sbin/wifi ] && /sbin/wifi config >/dev/null 2>&1
|
||||
for i in $(seq 1 10); do
|
||||
[ -s /etc/config/wireless ] && break
|
||||
sleep 1
|
||||
done
|
||||
fi
|
||||
|
||||
if [ ! -s /etc/config/wireless ]; then
|
||||
echo "[ERROR] 未检测到无线配置或无可用无线设备!" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 4. 加载系统发行版信息(若存在)
|
||||
[ -f /etc/openwrt_release ] && . /etc/openwrt_release
|
||||
|
||||
@@ -222,6 +268,7 @@ done
|
||||
# 提交配置
|
||||
uci commit wireless 2>/dev/null
|
||||
|
||||
# 若存在 base_config(kiddin9 固件状态记录),更新状态
|
||||
if uci -q get base_config.@status[0] >/dev/null 2>&1; then
|
||||
uci -q set base_config.@status[0].wifi=1
|
||||
uci commit base_config 2>/dev/null
|
||||
|
||||
Reference in new issue
Block a user