这些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模式

在切换为host模式时,插入小米的qc3.0充电头可能带来巨大发热(原因未知)

# 切换成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
信道选择2.4G,旁边填写6或8
安全性选第二个wpa2,不要用wpa3,会一直提示密码错误
回到网桥配置中,ipv4配置改为手动,并添加ip地址,填入网关的地址,默认是192.168.68.1,下面会告诉你怎么改,也可以设置成你想要的网段,那个叫网关地址的必须空着
ipv6配置成忽略(不然下面的ipv6配置不会生效)
移到最下面,确定,返回,退出

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

domain=lan
local=/lan/
listen-address=192.168.250.1
dhcp-range=192.168.250.100,192.168.250.254,12h

上面加的两行可以使其可以解析局域网的主机名
另外还需要修改/etc/hosts,在第一行加上192.168.250.1 你的主机名保证解析的可以被其他设备访问,主机名在/etc/hostname也是可以修改的

继续配置Ap,启用试试看,如果失败了,可以adb shell上去修改,以下命令请在adb shell下一行行运行(因为网会断)

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding=1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.proxy_ndp=1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.accept_ra=2" >> /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
systemctl enable dnsmasq.service
systemctl start dnsmasq.service

这样就配置好了ap,试一下能不能搜到ap,能的话那就完成了
如果重启后获取不到ip,可以多运行几次dnsmasq.service那两行,后面就没有问题了

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

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

#!/bin/sh
nmcli connection down wlan0
sleep 30
ip="`ifconfig | grep wlan0 -A 1 | grep inet | awk '{print $2}'`"
if [ ! -z "$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,特别是ipv6那几行一定要配置,不然有ip没网
安装依赖,可能会问你监听接口,回答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 10
        systemctl restart dnsmasq
        sleep 10
        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 

另外还有一种直白明了的办法,安装sudo apt-get install cpufrequtils
修改/etc/init.d/cpufrequtils来实现设置频率最高频率为600mhz

MAX_SPEED="600"
MIN_SPEED="0"

修改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上面

Debian远程桌面

# 远程桌面服务
sudo apt install xrdp
# lxde桌面最小安装
sudo apt install lxde-core
# 思源黑体中文字体 显示效果比文泉驿优秀
sudo apt install fonts-noto-cjk
# 可选 chromium浏览器 arm64没有chrome
sudo apt-get install chromium
# 可选 chromium浏览器界面的中文语言包 不装不影响中文网页浏览
sudo apt-get install chromium

然后用微软的远程桌面客户端连上去就可以用了

Debian Btrfs修改压缩率

使用更高的压缩率可以减少空间占用,但占用更多的cpu
本着emmc慢成狗cpu十分富裕,可以考虑采用更高的压缩率,默认3,可以设置1到15,不建议大于8
修改/etc/fstab将其中zstd改为zstd:6即可将压缩等级改为6
为了避免修改错误,导致无法开机,可以先在下面这条命令上做修改,并运行进行挂载测试(比配置中的多了一个remount的选项)

sudo mount -o remount,defaults,noatime,compress=zstd:6,commit=120 /dev/mmcblk0p14 /

可以使用这条命令对根分区进行压缩,系统占用大约700m左右,压缩从3调成6可以把占用从2g降到1.4g

sudo btrfs filesystem defragment -r -v -czstd /

固件

咩咩按照上面配置好并备份了一份rootfs在这 咩咩云
可以先一键刷入其他必要的东西,再按键进9008刷这个rootfs会比较快(不用9008直接解压改成rootfs.img和一键放一起也能刷)
至于密码是什么嘛,自己adb shell上去用passwd root改吧
配置好了自动切换usb,自动切换连wifi还是开热点,以及透明◯◯服务在2017端口

贴一个咩咩的Debian的/etc/rc.local

#!/bin/sh

sleep 5
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
echo usb-host >/sys/class/leds/green\:internet/trigger
#echo timer > /sys/class/leds/green\:internet/trigger
#echo 1 > /sys/class/leds/green\:internet/delay_on
#echo 1999> /sys/class/leds/green\:internet/delay_off
else
echo usb-gadget >/sys/class/leds/green\:internet/trigger
fi

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'`"

bash /etc/NetworkManager/dispatcher.d/dhcpv6 wwan0 &

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

exit 0