这些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/brightnessecho 1 > /sys/class/leds/sim\:sel2/brightnesssystemctl restart rmtfssystemctl restart ModemManager切回内置将0和1换一下位置
Openwrt
echo 0 > /sys/class/leds/sim\:sel/brightnessecho 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和giduserdel user# 添加用户me 可以改成你喜欢的名字adduser me# 把用户me添加到sudu组usermod -aG sudo me# 登录测试一下 输入刚刚建的用户名和密码尝试登录吧login# 使用sudu切换到root试一下 确保sudu正常工作sudo su# 禁用root用户直接登录sshsudo sed -i 's/PermitRootLogin yes/# PermitRootLogin yes/g' /etc/ssh/sshd_config安装zsh 促进体验
sudo apt updatesudo apt install git zshsh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"sed -i 's/ZSH_THEME="robbyrussell"/ZSH_THEME="ys"/g' .zshrcecho 'export PATH=/usr/local/sbin:/usr/sbin:/sbin:$PATH' >> .zshrczsh切换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.local的exit 0上面
# usb auto otgsleep 3grep 0 /sys/kernel/debug/usb/ci_hdrc.0/device | grep speedif [ $? -eq 0 ]thenecho host > /sys/kernel/debug/usb/ci_hdrc.0/rolefi开机等3秒检查是否连接到电脑,没有连接就切换成主机模式可以用公对公接usb设备
Openwrt开机自动联网,解决WiFi限速
本质上Openwrt开机是不会自动联网的,因为启动网络的时候moden还没启动,因此添加启动项来解决这个问题
# modem auto start time syncsleep 20/etc/init.d/network restartsleep 10date -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 syncsleep 20/etc/init.d/network restartuci set wireless.default_radio0.wmm=1wifi upsleep 10date -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=lanlocal=/lan/listen-address=192.168.250.1dhcp-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.confecho "net.ipv6.conf.all.forwarding=1" >> /etc/sysctl.confecho "net.ipv6.conf.all.proxy_ndp=1" >> /etc/sysctl.confecho "net.ipv6.conf.all.accept_ra=2" >> /etc/sysctl.confsysctl -pnmcli connection up br0systemctl enable dnsmasq.servicesystemctl start dnsmasq.servicenmcli connection shownmcli connection up usb0nmcli connection up wlan0systemctl enable dnsmasq.servicesystemctl start dnsmasq.service这样就配置好了ap,试一下能不能搜到ap,能的话那就完成了
如果重启后获取不到ip,可以多运行几次dnsmasq.service那两行,后面就没有问题了
Debian在没连上WiFi的时候自动开Ap
首先按照上面配置Ap
编辑/root/autoap.sh,写入下面的内容
#!/bin/shnmcli connection down wlan0sleep 30ip="`ifconfig | grep wlan0 -A 1 | grep inet | awk '{print $2}'`"if [ ! -z "$ip" ]; thenecho $ipelsenmcli connection up wlan0fi然后将sh /root/autoap.sh &加到/etc/rc.local的exit 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=$1event=$2if [ "$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_conffi然后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"\"}'查看效果run-parts /etc/update-motd.d
Debian启动时从modem同步时间
因为Debian下moden的时间其实是不对的,他显示他是+8时区其实是utc时间,modem启动也巨慢,所以要这样操作一下
sleep 25date -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.local的exit 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.local的exit 0上面
Debian远程桌面
# 远程桌面服务sudo apt install xrdp# lxde桌面最小安装sudo apt install lxde-core# 思源黑体中文字体 显示效果比文泉驿优秀sudo apt install fonts-noto-cjk# 可选 chromium浏览器 arm64没有chromesudo 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 5grep 0 /sys/kernel/debug/usb/ci_hdrc.0/device | grep speedif [ $? -eq 0 ]thenecho host > /sys/kernel/debug/usb/ci_hdrc.0/roleecho 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_offelseecho usb-gadget >/sys/class/leds/green\:internet/triggerfi
sleep 25date -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