老古董的第二春:把高通骁龙 410 无线网卡改造成短信收发服务器

老设备并没有死,只是还没有被挖掘出新的功能

发布于 约 10 分钟

引子

2022 年,我跟风在网上花了几块钱,买了两个基于高通骁龙 410 平台的无线网卡,型号分别是 UFI001UFI003,出厂系统均为 Android 4.4。

据网友介绍,商家的主要盈利点其实是配套销售的 eSIM 和物联网流量套餐,但这类设备通常也支持自行插卡使用,甚至能获取 Root 权限、刷入其他操作系统。

当时我开着 Tesla Model 3,正好需要联网听歌,于是把联通宽带赠送的流量卡插了进去,把它当作车上的 4G 热点使用。作为一台热点设备,它的网速只能算勉强够用——毕竟骁龙 410(型号 MSM8916)是一款 2013 年 12 月发布、28nm 制程的芯片,运行时发热也比较明显。

后来我换了乐道 L60,新车车机自带 5G 网络,且可以开热点享用,这两张 4G 网卡也就失去了用武之地,被扔进抽屉吃灰。

最近,我办理了一张香港 HahaSIM,用较低的成本保留一个香港号码,主要用来收发短信。于是,这两个吃灰多年的无线网卡,在 Codex 和 GPT 的帮助下,又重新派上了用场——这次我准备给它们刷入 Debian 12,把它们改造成一台可以远程收发、转发短信的小型服务器。

硬件信息

项目 信息
设备型号 UFI001 / UFI003
SoC Qualcomm MSM8916
CPU 架构 AArch64 / ARM64
原厂系统 Android 4.4(32 位)
蜂窝移动网络 4G LTE
USB 接口 USB A 口

[补充 UFI001 和 UFI003 在外观、主板、存储或刷机方式上的区别]

万能的 Codex

这次折腾过程中,无论是救砖、排查启动问题,还是调试 4G Modem,很多关键步骤都是在 Codex 的协助下完成的。我还用 GPT-5.6 写了一个基于 Rust 的短信转发器和 Web UI:sms-relayed

进入 2026 年以后,编程智能体已经逐渐融入更多人的日常工作。放在一年前,我很难想象 AI 能协助我调试硬件设备。

比如,刷入 Debian 之后,忘记刷入原有的基带文件,导致无法正常发出 Wi-Fi 信号,而 macOS 又缺少对应的 USB 网卡驱动,我一度不知道该如何进入设备进行修复。是 Codex 提示我可以通过 USB 串口连接设备,再用 screen 进入设备 Shell——没有这个提示,我可能会一直卡在「设备没有网络、电脑也识别不了网卡」的死循环里。

[补充使用 screen 连接设备时的命令、串口设备名称,以及进入 Shell 后看到的内容]

刷机过程中,我还一度破坏了 Modem 或网络相关配置,导致设备无法正常启动热点。Codex 帮我逐步检查系统日志、网络接口和 Modem 状态,最终完成了修复。

[补充当时刷坏了哪个分区或配置,具体出现了什么现象,以及最终如何恢复]

我之前在 B 站发过一条评论,正好可以概括这种体验:

之前遇到跨专业的问题,我只能询问其他专业的朋友。有时候他不了解我掌握的背景,我也不了解他的专业知识。而 Codex 在 GPT 的加持下,在跨专业领域的工作上,往往比普通人更加稳定。

系统选型:为什么是 Debian 12

不用 Android + SmsForwarder

这款设备原厂搭载 Android 4.4,理论上直接装一个 SmsForwarder 之类的短信转发软件就够了。但实际用下来,Android 在这块老硬件上的负担依然不小:系统响应慢,打开应用、切换页面经常卡顿;SmsForwarder 运行一段时间后还可能因为内存不足被系统杀掉,甚至直接闪退。对于需要长期无人值守运行的短信转发服务,这种稳定性很难让人放心。

[补充 Android 版本下的可用内存、实际闪退频率,以及是否尝试过关闭系统应用或进行精简]

不用 Alpine Linux

Alpine 占用资源低,很适合嵌入式设备,但这块设备的性能其实还没紧张到必须用极简系统的程度。Alpine 的默认环境比较精简,后续装软件、排查问题、维护服务都要多处理一些兼容性问题。

选择 Debian 12

相比之下,Debian 的软件生态更完整,日常维护也更方便,而且在 MSM8916 上依然可以流畅运行,所以最终选择了 Debian 12。

做好准备

刷机存在变砖风险,开始之前建议先准备好以下内容:

  1. 一台可以连接设备的电脑
  2. 一根支持数据传输的 USB 线
  3. 对应设备型号的 Debian 镜像
  4. Android 平台工具(即 ADB 和 Fastboot) 和 EDL 工具
  5. 原厂系统或关键分区的备份
  6. 可以进入串口 Shell 的工具,例如 screen
  7. 必要时使用的拆机工具和短接工具

我用的是 macOS 26 Tahoe,基本可以直接按照 OpenStick 的教程操作。

[补充需要安装的软件、驱动和命令行工具,以及对应的安装命令]

[补充刷机前如何确认设备型号、主板版本和分区布局]

刷机前最好备份设备的重要分区,尤其是与基带、IMEI、校准参数和网络相关的分区。这些数据一旦损坏,设备可能无法识别 SIM 卡、无法注册移动网络,甚至彻底失去 Modem 功能。

[补充需要备份的分区名称]

[补充分区备份命令,以及如何将备份文件保存到电脑]

所以在这里一定要注意,就是刷好系统文件,不要着急重启,记得把基带文件再刷一遍,避免基带文件是空的,导致进入系统后没有基带提供的4G和WiFi能力。

[补充如何验证备份文件是否完整]

进入刷机模式

根据设备当前的系统状态,可以通过 ADB、Fastboot 或高通 EDL 模式刷入系统。

[补充在 Android 系统中开启 USB 调试的方法]

[补充使用 ADB 重启到 Bootloader、Recovery 或 EDL 模式的命令]

[填写 ADB 或 Fastboot 命令]

如果设备已经无法正常启动,可能需要拆机并短接测试点,让设备进入高通 9008 EDL 模式。

[补充 UFI001 和 UFI003 的拆机方法]

[补充测试点位置、短接方式和注意事项]

进入对应模式后,可以通过以下方式确认电脑是否识别到设备:

[填写 macOS 或 Linux 下查看 USB 设备的命令]

正常情况下,应该能看到类似以下设备:

[填写 Fastboot、ADB、串口或 Qualcomm HS-USB QDLoader 9008 的识别信息]

开始刷入 Debian 12

我对比了一轮现有项目,发现相关原版项目已在 2024 年停止更新,目前比较活跃的 Fork 是 LongQT-sea/OpenStick-Builder,这个项目提供了适用于 OpenStick 类设备的镜像构建方案。

它使用了较新的 Linux 内核,并启用了 WireGuard 内核模块。这样一来,Tailscale 等基于 WireGuard 的组网工具可以直接使用内核态 WireGuard,避免回退到用户态网络栈,有利于降低资源占用、改善网络性能。

[补充使用的具体版本、Commit 或 Release,避免未来项目更新后步骤不一致]

[补充镜像下载地址,以及如何根据 UFI001 或 UFI003 选择正确镜像]

下载完成后,建议先校验文件哈希:

[填写 SHA-256 校验命令]

确认镜像无误后,即可开始刷写:

[填写实际刷机命令]

[补充刷写了哪些分区,每个分区对应什么镜像]

[补充刷写过程中正常的输出内容,以及大致需要注意的报错]

刷写完成后,重新启动设备:

[填写重启命令]

第一次启动通常需要更长时间。

[补充第一次启动需要等待多久,以及如何判断设备已经成功启动]

连接 Debian 与网络配置

设备启动后,可以通过 USB 网络、串口或 Wi-Fi 连接 Debian。

[补充设备默认使用的 IP 地址]

[补充默认用户名和密码]

例如通过 SSH 连接:

ssh root@[设备的 IP 地址]

首次登录后建议立即修改密码:

passwd

然后更新系统软件包:

apt update
apt upgrade

然后用 SysBootstrap 直接配置 apt mirro, 设置时区、主机名和语言即可。

为了让设备长期稳定运行,还需要确认以下网络接口能够正常工作:USB 网络接口、Wi-Fi 接口、4G Modem 数据接口。可以先查看系统识别到的网络设备:

ip address

查看 USB 设备:

lsusb

查看串口设备:

ls -l /dev/ttyUSB* /dev/ttyACM* 2>/dev/null

[补充设备实际出现的网卡名称和串口名称]

[补充如何配置 USB 网卡的静态 IP]

[补充如何配置 Wi-Fi,或说明刷入 Debian 后是否继续使用设备自身的 Wi-Fi 功能]

[补充如何连接 4G 网络,以及使用的是 QMI、MBIM、PPP 还是其他方案]

检查 4G Modem

短信收发平台需要通过 Modem 与 SIM 卡通信,因此首先要确认 Modem 已被系统正确识别。

[补充查看 Modem 状态时使用的工具,例如 ModemManager、mmcli、qmicli 或 AT 命令]

[填写查看 Modem 列表的命令]

查看 SIM 卡和网络注册状态:

[填写查询 SIM 卡状态、运营商和信号强度的命令]

[补充正常情况下的命令输出]

[补充设备未识别 SIM 卡时的排查方法]

[补充如何输入或关闭 SIM 卡 PIN]

[补充如何确认短信存储位置和短信编码]

如果需要直接发送 AT 命令,也可以通过串口工具连接 Modem:

screen /dev/ttyUSB[编号] [波特率]

[补充实际使用的串口编号和波特率]

安装短信收发平台

确认 Debian 和 Modem 都工作正常后,就可以安装短信收发平台了。

项目地址:sms-relayed

在 Debian 或 OpenWrt 的 Root Shell 中运行:

curl -fsSL https://raw.githubusercontent.com/frankwei98/sms-relayed/main/install.sh | sh

安装脚本会下载程序、创建服务,并引导用户完成基本配置。

系统兼容性

我实测下来,ImmortalWRT 24 和 Debian 12 的 aarch64 可以正常运行。

执行安装脚本后,根据提示配置好短信要转发到的平台即可,目前支持的转发渠道包括:

  • Telegram

  • Bark

  • 企业微信

安装完成后,可以通过以下地址访问 Web 管理界面:

http://{IP_ADDRESS}:{PORT}

在 Web 管理界面中,可以完成以下操作:

  • 查看收到的短信
  • 发送短信
  • 配置短信转发渠道
  • 查看 4G Modem 状态
  • 查看网络和信号信息
  • 管理服务配置

短信收发平台界面

[补充默认端口,以及如何修改监听地址和端口]

[补充是否存在默认账号密码,以及如何启用登录认证]

[补充如何通过防火墙限制 Web UI 的访问范围]

服务管理:开机启动与更新

安装完成后,可以检查服务状态:

systemctl status sms-relayed

查看实时日志:

journalctl -u sms-relayed -f

[补充实际的 systemd 服务名称,以项目当前配置为准]

[补充服务启动失败时常见的日志和解决方法]

sms-relayed 已经具备自更新能力,需要更新时只需运行:

sms-relayed update

程序会从 GitHub 下载最新的二进制文件,并自动重启服务。更新完成后同样可以用 systemctl status sms-relayed 检查状态。

[补充如何查看当前版本]

[补充更新失败时如何回滚到旧版本]

通过 Tailscale 远程访问

由于内核已经启用了 WireGuard,可以直接安装 Tailscale,把设备加入自己的虚拟局域网。

[补充 Tailscale 的安装命令]

[补充如何登录并将设备加入 Tailnet]

加入成功后,即使设备位于移动网络或家庭路由器之后,也可以通过 Tailscale 分配的 IP 地址访问 Web 管理界面:

http://{TAILSCALE_IP}:{PORT}

[补充是否需要开启 Tailscale SSH]

[补充如何限制只有指定设备能够访问短信平台]

短信内容通常包含验证码和个人隐私,不建议直接将管理端口暴露到公网。

实际使用效果

完成以上配置后,这个原本只能充当低速 4G 热点的小设备,就变成了一台低功耗短信服务器。它可以长期插着 SIM 卡运行,通过 Web UI 查看和发送短信,收到短信后还能自动转发到其他平台。对于海外号码保号、接收服务通知、管理备用号码等场景,这套方案已经足够使用。

[补充 HahaSIM 在设备中的实际表现,例如注册网络所需时间、信号强度和短信延迟]

[补充设备连续运行一段时间后的温度、内存占用和稳定性]

[补充设备的实际功耗]

[补充短信收发成功率,以及是否遇到中文短信编码、长短信拆分或重复短信问题]

后续计划

接下来还可以继续完善以下功能:

  • [补充准备增加的短信转发渠道]
  • [补充是否计划增加多 SIM 卡或多设备管理]
  • [补充是否计划增加短信搜索、标签或归档功能]
  • [补充是否计划增加告警和运行状态监控]
  • [补充是否计划制作 Docker 镜像或其他架构的软件包]

总结

淘宝商家原本希望靠流量套餐在售后服务这一块赚取利润,让我最终只花了几块钱,就得到了一块可以自由折腾的高通 ARM 开发板。

从 Android 热点,到 Debian 服务器,再到短信收发平台,这块高通骁龙 410 设备虽然已经十分老旧,但依然有不少可以挖掘的用途。

更重要的是,这次折腾让我感受到,编程智能体的能力已经延伸到了硬件调试、嵌入式 Linux、移动通信和系统运维等领域。很多过去需要查阅大量零散资料、反复试错才能解决的问题,如今和 Codex 协作,就能更快找到排查方向。

老设备并没有死,只是还没有被挖掘出新的功能。