这些4G随身WiFi棒子大多是卖内置esim卡的流量赚钱,所以都卖的很便宜(大概10元,早期5元),但性能却不差,有的还自带卡槽可以插自己的卡,有骁龙210,410,还有中兴微三种,本文主要以刷了Linux后的骁龙410的随身WiFi棒子UFI003(UFI001C)展开,如果为了上网,而不是为了折腾着玩,请优先选择旧手机开热点而不是这种WiFi棒子

备份

常在河边走哪有不湿鞋,做一个完整的备份以便不时之需
视频教程:BV1sG4y1E7oG
顺便说一下,基带存在fsg modemst1 modemst2这三个分区里,所以其实备份了这三个分区相当于备份了基带,备份好这三个分区,再用星海备份基带擦除基带写入基带这一波操作,可能会全网通,也可能没信号

至于移动4g用不了,那是硬件只支持一个冷门的频段,用不了也不奇怪了,大多数应该都能很好的支持电信4G,联通可能要操作一下,我没有联通卡不知道,全网通的设备在cpu那面可以看到有一个1cm*0.5cm的长方形射频芯片,大部分是没有的,大部分都只能用电信卡(联通可能也行)

查看sim卡状态

mmcli -m 0

Status就可以知道当前卡的状态和信号强度
如果返回error: couldn't find modem,可以把你全分区备份里的modem分区用7zip解压了放到/lib/firmware/大概可以解决4g用不了的问题

切换esim

切换需要至少几十秒的时间,不要着急,连上了自然有网,可以用上面的那条命令检查卡是否识别到

Debian

echo 0 > /sys/class/leds/sim\:sel/brightness
echo 1 > /sys/class/leds/sim\:sel2/brightness
systemctl restart rmtfs
systemctl restart ModemManager

切回内置将0和1换一下位置

Openwrt

echo 0 > /sys/class/leds/sim\:sel/brightness
echo 255 > /sys/class/leds/sim\:sel2/brightness
/etc/init.d/rmtfs restart
/etc/init.d/modemmanager restart

切回内置将0和255换一下位置

查看emmc(emcp)的寿命

cat /sys/class/mmc_host/mmc0/mmc0\:0001/life_time

返回0x00的话就是看不到,00这个位置的数字就是已用的寿命百分比

debian建新用户

毕竟 root敢死队 是一种很危险的行为,建议日常还是使用sudo而不是直接登录root用户

# 默认有个叫user的普通用户,把它删掉空出1000的uid和gid
userdel user
# 添加用户me 可以改成你喜欢的名字
adduser me
# 把用户me添加到sudu组
usermod -aG sudo me
# 登录测试一下 输入刚刚建的用户名和密码尝试登录吧
login
# 使用sudu切换到root试一下 确保sudu正常工作
sudo su
# 禁用root用户直接登录ssh
sudo sed -i 's/PermitRootLogin yes/# PermitRootLogin yes/g' /etc/ssh/sshd_config

安装zsh 促进体验

sudo apt update
sudo apt install git zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
sed -i 's/ZSH_THEME="robbyrussell"/ZSH_THEME="ys"/g' .zshrc
echo 'export PATH=/usr/local/sbin:/usr/sbin:/sbin:$PATH' >> .zshrc
zsh

切换usb的otg模式

# 切换成usb主机模式(otg模式)
echo host > /sys/kernel/debug/usb/ci_hdrc.0/role
# 切换为默认的从机模式(接电脑的usb网络共享和adb)
echo gadget > /sys/kernel/debug/usb/ci_hdrc.0/role

开机自动切换,将下面的内容加到/etc/rc.localexit 0上面

# usb auto otg
sleep 3
grep 0 /sys/kernel/debug/usb/ci_hdrc.0/device | grep speed
if [ $? -eq 0 ]
then
echo host > /sys/kernel/debug/usb/ci_hdrc.0/role
fi

开机等3秒检查是否连接到电脑,没有连接就切换成主机模式可以用公对公接usb设备

Openwrt开机自动联网,解决WiFi限速

本质上Openwrt开机是不会自动联网的,因为启动网络的时候moden还没启动,因此添加启动项来解决这个问题

# modem auto start time sync
sleep 20
/etc/init.d/network restart
sleep 10
date -s "`mmcli -m 0  --time|grep -E "Time "  | awk -F " "  '{print $5,$NF}'|awk -F "+" '{print $1,$3}'|awk -F "T"  '{print $1,$2}'| awk '{gsub(/^\s+|\s+$/, "");print}'`"

注意了,如果重启网络服务,usb网络共享的mac地址是会变的,所以我们需要给他固定一个值
打开网络,接口,顶部的设备,找到usb0,配置,把它显示的mac地址抄一份填进去保存(注意是半角英文冒号)

修改ap设置,带宽20mhz,信道6,底部开启wmn,wifi可以稳定9mbps

另外有个玄学操作,有概率提升到19mbps:
在高级设置中,无线信号覆盖密度改为正常(默认是禁用)
启动项都删掉换成这个

# modem auto start time sync
sleep 20
/etc/init.d/network restart
uci set wireless.default_radio0.wmm=1
wifi up
sleep 10
date -s "`mmcli -m 0  --time|grep -E "Time "  | awk -F " "  '{print $5,$NF}'|awk -F "+" '{print $1,$3}'|awk -F "T"  '{print $1,$2}'| awk '{gsub(/^\s+|\s+$/, "");print}'`"
uci set wireless.default_radio0.wmm=0

最后我选择手动将Debian配置成一个路由器,折腾了一天,完美的实现了op的所有功能,可以继续往下看
顺带提一下,可以通过开启ipv4转发(下面Ap配置时开了),并且安装v2◯◯◯a让开出来的热点实现透明◯◯,安装看官方文档,换iptable的那步不要做

Debian的Ap配置

adb shell上去nmtui
添加网桥br0
网桥里添加以太网,名称设备usb0
网桥里添加wi-fi,模式选成接入点,这就是ap的信息,名称设备wlan0
安全性选第二个wpa2,不要用wpa3,一直提示密码错误
回到网桥配置中,ipv4配置改为手动,并添加ip地址,填写网关地址(默认是192.168.68.1,下面会告诉你怎么改,也可以先设置成你想要的网段)
移到最下面,确定,返回,退出

如果需要修改网关和分配的ip范围,可以修改/etc/dnsmasq.conf最后网关和分配ip范围,比如这样,改成192.168.250.1

listen-address=192.168.250.1
dhcp-range=192.168.250.100,192.168.250.254,12h

继续配置Ap,启用试试看,如果失败了,可以adb shell上去修改

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding=1" >> /etc/sysctl.conf
sysctl -p
nmcli connection up br0
systemctl enable dnsmasq.service
systemctl start dnsmasq.service
nmcli connection show
nmcli connection up usb0
nmcli connection up wlan0

这样就配置好了ap,试一下能不能搜到ap,能的话那就完成了
如果重启后获取不到ip,可以将systemctl start dnsmasq.service写到/etc/rc.local中,因为可能br0启动比dnsmasq慢,导致没有ip没法监听

Debian在没连上WiFi的时候自动开Ap

首先按照上面配置Ap
编辑/root/autoap.sh,写入下面的内容

nmcli connection down wlan0
sleep 30
ip="`ifconfig | grep wlan0 -A 1 | grep inet | awk '{print $2}'`"
if [ ! -n $ip ]
then
echo $ip
else
nmcli connection up wlan0
fi

然后将sh /root/autoap.sh &加到/etc/rc.localexit 0上面就完成了
开机时会自动停用ap30秒去连接已保存wifi,如果没连上就会打开ap便于配置新的wifi连接

moden的ipv6给Ap共享

首先按照上面配置Ap
安装依赖,可能会问你监听接口,回答br0

apt install ndppd radvd wide-dhcpv6-server

创建文件/etc/NetworkManager/dispatcher.d/dhcpv6贴进去

#!/usr/bin/env bash

interface=$1
event=$2
if [ "$interface" == "wwan0" ]; then
        prefix=$(ip -6 addr show dev wwan0| sed -e's/^.*inet6 \([^ ]*\)\/.*$/\1/;t;d'|head -n 1|cut -f'1-4' -d':')
        # just assume prefix length /64 here
        echo "get prefix $prefix::/64"|systemd-cat -t ipv6_conf
        cp /etc/ndppd.conf.me /etc/ndppd.conf
        sed -i "s/REPLACE_PREFIX_HERE/$prefix:2333::\/80/g" /etc/ndppd.conf
        cp /etc/radvd.conf.me /etc/radvd.conf
        sed -i "s/REPLACE_PREFIX_HERE/$prefix:2333::\/64/g" /etc/radvd.conf
        cp /etc/wide-dhcpv6/dhcp6s.conf.me /etc/wide-dhcpv6/dhcp6s.conf
        sed -i "s/PREFIX_MIN/$prefix:2333::2000/g" /etc/wide-dhcpv6/dhcp6s.conf
        sed -i "s/PREFIX_MAX/$prefix:2333::3000/g" /etc/wide-dhcpv6/dhcp6s.conf
        systemctl restart radvd
        systemctl restart ndppd
        systemctl stop wide-dhcpv6-server
        systemctl start wide-dhcpv6-server
        echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
        sleep 30
        echo "setting route" |systemd-cat -t ipv6_conf
        ip -6 addr add $prefix:2333::1/80 dev br0
        ip -6 route add $prefix::/65 dev br0
        ip -6 route add $prefix:8000::/65 dev br0
        ip -6 route |systemd-cat -t ipv6_conf
fi

然后chmod +x /etc/NetworkManager/dispatcher.d/dhcpv6
还需要创建几个配置文件模板
/etc/ndppd.conf.me

proxy wwan0 {
    router yes
    timeout 500
    ttl 30000
    rule REPLACE_PREFIX_HERE {
        auto
    }
}

/etc/radvd.conf.me

interface br0 {
    AdvSendAdvert on;
    AdvOtherConfigFlag on;
    AdvManagedFlag on;
    MinRtrAdvInterval 3;
    MaxRtrAdvInterval 10;
    prefix REPLACE_PREFIX_HERE {
        AdvOnLink on;
        AdvAutonomous on;
        AdvRouterAddr off;
    };
};

/etc/wide-dhcpv6/dhcp6s.conf.me

interface br0 {
    address-pool pool1 3600;
};

pool pool1 {
    range PREFIX_MIN to PREFIX_MAX ;
};

降低发热 调节cpu频率

众所周知,骁龙的基带是真的烫,甚至可以比cpu都烫(比如iPhone12),只连WiFi不插卡的就没有这个问题
默认主频是四核998.4mhz,平时会一直跑在800mhz,但负载只有0.3,导致在插卡长时间工作的时候巨烫,因此将cpu频率减半,降到400mhz,温度就暖暖的一点也不烫了(四核400mhz的温度应该低于双核800mhz)
查看当前支持的频率,不同的内核不一样

cat /sys/devices/system/cpu/cpufreq/policy0/scaling_available_frequencies

将以下内容添加到开机启动项,限制最高频率为400mhz

echo 400000 > /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq 

修改Debian连上ssh时的提示

编辑/etc/update-motd.d/10-uname即可修改
比如最后加一个modem信号显示

mmcli -m 0|grep signal|awk '{print $2" "$3" "$4"\n"}'

查看效果run-parts /etc/update-motd.d

Debian启动时从modem同步时间

因为Debian下moden的时间其实是不对的,他显示他是+8时区其实是utc时间,modem启动也巨慢,所以要这样操作一下

sleep 25
date -s "`mmcli -m 0  --time|grep -E "Time "  | awk -F " "  '{print $5,$NF}'|awk -F "+" '{print $1,$3}'|awk -F "T"  '{print $1,$2}'| awk '{gsub(/^\s+|\s+$/, "");print}'`"
date -s "`date -d +8hour '+%Y-%m-%d %H:%M:%S'`"
systemctl start dnsmasq.service

加入/etc/rc.localexit 0上面(最好写在你写的内容的最上面)

led灯控制

/sys/class/leds/有三个led,分别是blue,green,red,其他的是控制卡槽等设备的入口,可以修改led的触发器实现不同的功能
查看所有触发器cat /sys/class/leds/green\:internet/trigger框起来那个就是当前的
比如把绿色灯改为usb网络指示灯echo usb-gadget >/sys/class/leds/green\:internet/trigger
需要永久修改需加入/etc/rc.localexit 0上面