ubuntu启用wifi脚本示例

使用的是飞凌RK3576的开发板,里面测试wifi功能的shell脚本如下:

function wifi_dial_up(){
    # SSID="forlinx-wlan"
    SSID=$1
    PASSWORD=$2

    ifconfig end0 down > /dev/null 2>&1
    ifconfig end1 down > /dev/null 2>&1
    ifconfig usb0 down > /dev/null 2>&1
    ip route flush table main

    #rk3576

    sed -i "s/^\s*ssid=\(.*\)/\tssid=\"$SSID\"/" ./tool/wpa_supplicant.conf
    sed -i "s/^\s*psk=\(.*\)/\tpsk=\"$PASSWORD\"/" ./tool/wpa_supplicant.conf
    rmmod -f moal > /dev/null 2>&1;rmmod -f mlan > /dev/null 2>&1

    insmod ./tool/mlan.ko 2>&1
    insmod ./tool/moal.ko cal_data_cfg=none fw_name=sdiouart8987_combo_v0.bin sta_name=wlan cfg80211_wext=12
    wpa_supplicant -i wlan0 -c ./tool/wpa_supplicant.conf &
    sleep 40
    dhclient -i wlan0 &
    sleep 2
}


function wifi_connect_confirm(){
        ping -I wlan0 222.222.222.222 -c 1 -s 100 -W 1 > /func/detail_log/wifi_data.tmp
                times=`grep -c "time=" /func/detail_log/wifi_data.tmp`
                if [ $times -eq 1 ]; then
            echo -e "\033[32m Wifi test PASSED \033[0m" >> $DETAIL_LOG
            echo -e "\033[32m Wifi test PASSED \033[0m"
            rm /func/detail_log/wifi_data.tmp
                else
            echo -e "Different data \033[31m Wifi test FAILED \033[0m" >> $DETAIL_LOG
            echo -e "Different data \033[31m Wifi test FAILED \033[0m"
            echo "Wifi test failed" >> test_result.txt
            # ifconfig wlan0 down > /dev/null 2>&1
            # ifconfig uap0 down > /dev/null 2>&1
            # ifconfig wfd0 down > /dev/null 2>&1
            killall wpa_supplicant
            rmmod -f moal > /dev/null 2>&1
            rmmod -f mlan > /dev/null 2>&1
            ifconfig wlan0 down > /dev/null 2>&1
                fi
}

DETAIL_LOG="/func/detail_log/wifi_detail.log"
rm $DETAIL_LOG > /dev/null 2>&1
echo "************* WIFI test **********" >> $DETAIL_LOG

if ifconfig | grep -q "wlan0"; then
    dhclient -i wlan0
    sleep 2
    ip route flush table main
    ip route add 10.10.20.0/22 dev wlan0
    ip route add default via 10.10.23.254 dev wlan0
    wifi_connect_confirm
else
    ip route flush table main
    killall wpa_supplicant
    rmmod -f moal > /dev/null 2>&1
    rmmod -f mlan > /dev/null 2>&1
    ifconfig wlan0 down > /dev/null 2>&1
    wifi_dial_up $1 $2
    sleep 3
    wifi_connect_confirm
fi

逐条解析如下:

  • ifconfig end0 down
    关闭名为end0的网络接口,这是一个ethernet网口。
  • ip route flush table main
    • ip:网络配置工具。
    • route:指定操作对象的类型为路由表。
    • flush:操作为清空。
    • table main:指定操作对象的名称为main。
  • sed -i "s/^\s*ssid=\(.*\)/\tssid=\"$SSID\"/" ./tool/wpa_supplicant.conf
  • sed -i "s/^\s*psk=\(.*\)/\tpsk=\"$PASSWORD\"/" ./tool/wpa_supplicant.conf
    sed是一个流编辑器,用于对文本进行搜索、替换、删除、插入等操作。这两个命令的具体功能是修改./tool/wpa_supplicant.conf文件中关于ssid(无线网络名称)和psk(无线网络密码)的配置信息。
  • rmmod -f moal
  • rmmod -f mlan
    • rmmod:用于从内核中移除(卸载)已经加载的内核模块。
    • moal和mlan:要卸载的内核模块的名称。
  • insmod ./tool/mlan.ko
    • insmod:用于将指定的内核模块(.ko文件)加载到内核中。
    • ./tool/mlan.ko:要加载的内核模块文件的路径。
  • insmod ./tool/moal.ko cal_data_cfg=none fw_name=sdiouart8987_combo_v0.bin sta_name=wlan cfg80211_wext=12
    • cal_data_cfg=none:指定内核模块的cal_data_cfg参数的值为none。
  • wpa_supplicant -i wlan0 -c./tool/wpa_supplicant.conf &
    • wpa_supplicant:用于管理 WPA(Wi-Fi Protected Access)认证的客户端程序。
    • -i wlan0:指定要操作的无线网卡接口名称为wlan0。
    • -c ./tool/wpa_supplicant.conf:指定配置文件的路径为当前目录下tool文件夹中的wpa_supplicant.conf
    • &:这个符号表示将该命令放入后台运行。
  • dhclient -i wlan0 &
    • dhclient:一个动态主机配置协议(DHCP)客户端程序,用于从 DHCP 服务器获取 IP 地址、子网掩码、网关等网络配置信息。
    • -i wlan0:指定要操作的无线网卡接口名称为wlan0。
  • ping -I wlan0 222.222.222.222 -c 1 -s 100 -W 1 > /func/detail_log/wifi_data.tmp的含义
    • -c 1:表示只发送 1 个 ICMP 回显请求数据包。默认情况下,ping命令会持续发送数据包直到用户手动停止,使用-c选项可以指定发送数据包的数量。
    • -s 100:设置发送的 ICMP 数据包的大小为 100 字节(不包括 ICMP 头)。
    • -w 1:设置等待目标主机响应的超时时间为 1 秒。
    • /func/detail_log/wifi_data.tmp:这是输出重定向操作。>符号将ping命令的标准输出重定向到指定的文件/func/detail_log/wifi_data.tmp中。这意味着ping命令执行后的结果(包括发送和接收的数据包统计信息等)将不会显示在终端上,而是写入到该文件中保存。


总的步骤如下:

  • 关闭除了wlan0外的其它的网口:
    • 避免网络冲突:在一个网络环境中,每个设备需要有唯一的 IP 地址才能正常通信。如果多个网络接口同时启用,它们可能会尝试从 DHCP 服务器获取不同的 IP 地址,或者在某些情况下,可能会因为手动配置不当导致 IP 地址冲突。例如,一个以太网接口和 WiFi 接口同时连接到同一个局域网,若 DHCP 服务器为它们分配了相同的 IP 地址,就会导致网络通信故障,两个接口都无法正常工作。
    • 配置优先级:如果多个网络接口同时处于活动状态,系统可能会优先使用其他网络接口进行网络连接,而忽略了对 WiFi 接口的配置更改。
    • 统一网络设置:在某些情况下,用户可能希望整个系统只通过 WiFi 进行网络连接。关闭其他网络接口可以确保所有的网络流量都通过 WiFi 接口进行,便于进行统一的网络设置和管理。
  • 清除系统中名称为“main”的路由表。
    • 避免路由冲突:“main” 路由表是 Linux 系统中默认的主要路由表,其中存储着系统的网络路由信息,即数据包在网络中传输的路径规则。在设置新的 WiFi 连接之前,如果路由表中已经存在与旧网络连接相关的路由规则,这些规则可能会干扰新的 WiFi 连接配置。
  • 修改./tool/wpa_supplicant.conf内容。
  • 移除moal和mlan两个内核模块并以新的参数加载:
    • 没查到是啥,应该是RK3576中和wifi有关的模块。
  • 通过wpa_supplicant连接wlan0。
  • 通过DHCP给wlan0分配IP。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值