前排提醒:本文只讨论自有设备的维修与研究,素材来自公开社区技术帖与通用嵌入式Linux实践。改分区有变砖风险,动手前先备份。
一、先回答那个经典问题:为什么改了重启就还原
上一篇写过后台页面定制(改标题、换图标、加按钮),评论区问得最多的是:为什么重启就全部还原了?
原因一句话:系统分区默认只读。多数随身WiFi固件的根文件系统是 squashfs 类只读镜像,你改的页面文件、配置文件都写在内存里的临时层——重启即清空。这也是商家云控"删不干净"的底层原因之一:驻留程序藏在只读分区里,普通删除动不了它。
所以想持久化改造,必须先过"只读"这一关。
二、两条改造路线:8M与16M不一样
社区总结的路线分工很清晰:
| 机器 | 闪存 | 路线 | 特点 |
|---|---|---|---|
| 8M机 | 8M SPI NOR | mtd4分区直接刷好包(配合ufitool类工具) | 省事,刷整包 |
| 16M机 | 16M | 开ADB后remount直接改 | 不用整包刷,改哪算哪 |
8M机的 mtd4 分区有现成好包直接刷,痛点少。16M机没法走整包路线,remount 是唯一轻量方案——这也是本篇主角。
三、remount实操:三步走
ADB或串口进shell后:
# 1. 根分区改写mount-oremount,rw /# 2. 该干嘛干嘛(改文件/写脚本)vi/etc/inittab# 3. 改完建议回挂只读,防误写mount-oremount,ro /注意三点:
- remount只对本次开机有效——下次重启分区恢复只读,但你写进去的文件已经落在分区里,这是它和"改临时层"的本质区别;
- 改之前先备份原文件(
cp /etc/inittab /etc/inittab.bak),shell里没有后悔药; - 写完立刻验证(cat看一下),再回挂ro。
四、持久化自启:inittab与rc脚本
改造要"活过重启",靠的是开机自启。两个常改的位置:
写 /etc/inittab(需先remount,rw)——经典案例是让adbd开机常驻:
::respawn:/bin/adbdrespawn的含义:进程退出就自动拉起,比单纯调用一次更顽固。
改rc自启脚本——有的固件在rc里按启动来源分支处理,社区案例的写法是判断usb modetype再决定拉起什么服务,把自定义逻辑挂进去。
想批量改造的,可以把"开adb+改后台+写入自启"做成一键脚本推到机器里执行,重复劳动一次封装:
#!/bin/sh# 一键改造骨架(按需填充)mount-oremount,rw /cp/etc/inittab /etc/inittab.bakecho'::respawn:/bin/adbd'>>/etc/inittab# ...其他改造项mount-oremount,ro /echodone五、翻车了怎么办
- 改错文件起不来:ADB还在就有救,remount回rw把备份文件(.bak)拷回去;
- 彻底起不来:编程器整片重刷兜底——这也是老话,动手前先备份全片;
- 云控机器改完被识别:改的是页面和自启,云控在别处,两码事,别指望本篇方法去控。
六、速查表
| 需求 | 做法 |
|---|---|
| 临时改(重启还原) | 直接改文件,不用remount |
| 持久化改 | remount,rw → 改 → 验证 → remount,ro |
| 服务常驻 | inittab写respawn行 |
| 8M机换系统 | mtd4刷好包 |
| 16M机轻改 | 开ADB+remount |
| 翻车兜底 | .bak回滚 / 编程器重刷 |
参考资料(均为公开社区技术帖)
- 16M机器开ADB后remount直接改(社区问答实录):https://www.mywifi.bond/answers/415
- 串口/ADB持久化自启写法(inittab与rc判断):https://www.mywifi.bond/answers/331
- 中兴微后台web修改教程(本系列上一篇的素材源):https://www.mywifi.bond/articles/219
你改后台时踩过"重启还原"的坑吗?是用remount还是直接刷整包?评论区聊聊你的改造姿势。