手里有台海思Hi3798MV100的老盒子,安卓系统是中国移动的定制系统,一直想把它彻底刷成Linux跑点轻服务。传统套路得拆机接TTL,手边没工具(其实是太懒了,不想拆盒子),既然ADB能连并且有Root权限,能不能直接在系统里把 eMMC 给覆盖了?

答案是可以。刷完顺手把自带的无线网卡也驱起来,彻底摆脱网线。写篇备忘,下次再刷少走弯路

总结就一句话

在开启ADB并且有Root权限的安卓上,用ADB把完整的eMMC镜像直接 dd/dev/block/mmcblk0,覆盖全盘。写完把盒子重启,系统就自动启动了

准备清单

  • 盒子:Hi3798MV100,要eMMC 闪存,非NAND非高安,已启用ADB并且拥有Root权限
  • 固件:对应 reg name 的TTL线刷包,里面有一堆分区镜像和 XML 分区表
  • 软件:HiTool(需要 32 位 Java,64位的跑不起来)、ADB 工具
  • 网络:盒子和电脑同一局域网,ADB 能通

第一部分:纯ADB刷写Linux 系统

步骤一:拿到 reg name

这东西相当于盒子的型号,找固件必须对得上。

adb shell
su
cat /dev/block/mmcblk0p1 | grep -a hi3798m

输出类似 hi3798mv100 mdmo1g,记下 mdmo1g

步骤二:用HiTool做 emmc.flash 镜像

固件下载 HiTool下载 32位Java

  • 打开 HiTool(闪退的话装个 32 位 Java 8,如果安装了,还是报错,就改 HiTool.ini 指定路径)
  • 芯片选Hi3798MV100→「烧写 eMMC」选项卡(如果ADB一直链接着,会自动选择)
  • 加载固件里的 emmc_TTL-hi3798mv100-32.xml分区表文件
  • 计算镜像长度:最后一个分区起始地址 + 对应 .img 文件大小

    • 比如最后一个分区起始 610M,镜像文件 827M,加起来就是 1437M(截止2026/4/12大小为1437M)
  • 点「制作烧片器」,生成 emmc.flash(会问你长度是多少,保存到哪里,名称写emmc.flash)

步骤三:把镜像写进盒子

推荐刷前先关闭远程维护再开

两种方式,看心情选

方式 A:推送进去再写(前提机器存储足够)

adb push 把我换成Flash在电脑的文件位置 /data/local/tmp/
adb shell
su
dd if=/data/local/tmp/emmc.flash of=/dev/block/mmcblk0 bs=1024

方式 B:一条命令流式直刷(没测试过,不保证可用)

adb exec-out < 把我换成Flash在电脑的文件位置 | adb shell "su -c 'dd of=/dev/block/mmcblk0 bs=1024'"

写入过程 5 到 15 分钟,屏幕没任何输出,别手贱打断,期间刷到一半盒子输出黑屏,不要慌,正常现象,等待镜像dd完毕即可

踩坑备忘

  • nc 监听报错:试过用 nc 传数据,结果 Segmentation fault。放弃,改用上面两种方式
  • adb push 中断:机器远程维护自己关闭,推荐刷前先关闭远程维护再开
  • HiTool 闪退:必须 32 位 Java 8,在 HiTool.ini-vm 指向正确路径
  • 镜像长度算错:刷完黑屏变砖。务必核对 XML 里最后一个分区起始地址和对应 img 文件大小,精确相加
  • 写完用 reboot 重启:系统分区已经被覆盖了,reboot 很可能失效。直接拔电源再插上,等 3-5 分钟初始化

刷完验证

重新通电后,去路由器后台找 MAC 地址是 00:11:22:33:44:55 的设备,那台就是刷好的 Hinas盒子


第二部分:驱动无线网卡(RTL8188FTV / ETV)

刷完系统后,如果盒子自带无线网卡,放着也是浪费,顺手驱起来。

目前 Hi3798MV100 大部分机型用的都是 RTL8188FTV 或 RTL8188ETV,驱动和内核版本强绑定,不同版本之间不能通用。MV200 和 MV300 不适用(补药刷,刷了可能用不了,甚至变砖)

一、查看网卡型号

SSH 连上盒子,输入:

lsusb

找到 Realtek 那一行,比如 ID 0bda:f179 是 RTL8188FTV,ID 0bda:0179 是 RTL8188ETV。记住型号。

https//imgcdn1vip/i/69db3a7d4367c1775975037png

二、确保内核版本匹配

先看当前内核:

uname -r

 三、下载驱动包

威子大佬的驱动包下载地址:

蓝奏云:Hi3798mv100wifi.zip - 蓝奏云

常见的有 0403、0302、0808 等版本。如果内核和手头驱动包版本对不上,建议刷成 0808 内核(社区资源最全)

刷 0808 内核的方法:把 hi_kernel-mv100-0808.bin 用SFTP上传到 /tmp,然后执行:

cd /tmp
dd if=hi_kernel-mv100-0808.bin of=/dev/mmcblk0p6
reboot

重启后内核就变 0808 了

四、安装驱动

把驱动包和 wifi_install.sh 脚本一起上传到 /tmp,然后:

cd /tmp
chmod a+x wifi_install.sh
sh wifi_install.sh -f 驱动包文件名 -s "WiFi名称" -p "密码"

比如我的网卡是 RTL8188FTV,内核 0808,命令就是:

sh wifi_install.sh -f rtl8188ftv-0808.tar.gz -s CCMC-9178 -p 123456

脚本参数说明:

  • -f:驱动包文件名
  • -s:WiFi 名称
  • -p:WiFi 密码
  • -d:固定 IP(可选)
  • -g:网关(可选)
  • -m:掩码(可选)

装完稍等片刻,网卡估计就连上了

五、常见问题及解决

1. 提示找不到 WiFi

手动连接一下:

nmcli device wifi connect "WiFi名字" password "密码" ifname wlan0

2. 拔掉网线后 SSH 连不上 / 启动巨慢

原因是网线拔了以后,系统还在使劲给 eth0 申请 DHCP 地址,卡在 a start job is running for raise network interfaces 长达五分钟。

解决办法:编辑 /etc/network/interfaces.d/eth0,把 auto eth0 注释掉或删掉,换成 allow-hotplug eth0

vi /etc/network/interfaces.d/eth0

改完类似这样:

# auto eth0
allow-hotplug eth0
iface eth0 inet dhcp

或者直接给 eth0 配个静态 IP 也行。重启盒子,启动速度就正常了

3. 插回网线后 WiFi IP 连不上

网线插回去后,系统会自动加一条优先级更高的默认路由,数据全走 eth0 了,WiFi 那边就失联了。临时解决:手动删掉多余路由。

先看路由表:

ip route show

然后删掉 eth0 相关的:

ip route delete 192.168.3.0/24 dev eth0   # 替换成你自己的网段
ip route delete default

4. 想给 WiFi 设静态 IP

编辑 /etc/NetworkManager/system-connections/WiFi名字.nmconnection,找到 [ipv4] 段:

[ipv4]
dns-search=
method=auto

改成:

[ipv4]
dns-search=
method=manual
addresses1=192.168.1.100/24,192.168.1.1
dns=192.168.1.1

然后重载连接:

nmcli connection reload "WiFi名字"
nmcli connection down "WiFi名字"
nmcli connection up "WiFi名字"

最后

这套纯 ADB 方案,免拆机、免 TTL、免短接,一条网线搞定全盘换系统。刷完顺手把无线网卡驱了,盒子彻底自由。关键点就几个点:镜像长度算对、ADB 别断、写完拔电、内核版本和驱动包对得上,或许这套方案能在别的海思设备上实现,如果有其他型号的设备想要折腾的朋友可以试试

写给自己的备忘录,如果能帮到同样折腾海思盒子的朋友,那就更好了