首先,这是一款过时的IPTV机顶盒,已经被高清机顶盒取代,也不再使用,这款机顶盒并不是安卓系统,折腾意义不算很大,所以资料很少,我想玩它的时候也没找到资料,插上串口发现内核启动后一切静默。研究一晚上后,发现了一些办法,故写本文分享给大家。
我手中的EC2106V1是海思Hi3716MV300,理论上别的同芯片相近系统版本可以使用本方法。
首先,想要打断uboot非常简单,上电狂按Ctrl+C直到出现fastboot# 提示符就行。我手中这款盒子的操作系统是Linux2.6。开机没有shell的原因其实很简单,因为默认bootargs的串口指向了不存在的接口“ttyABCD”。正确的其实是ttyAMA0。所以如果想临时获取root shell,非常简单,中断进uboot然后指定串口设备ttyAMA0给内核就可以了:
fastboot# setenv bootargs 'mem=120M console=ttyAMA0,115200 console=ttyS0,115200 console=ttyABCD,115200 root=/dev/romblock3 rootfstype=cramfs ro mtdparts=hinand:1M(fastboot),1M(partition),6M(boot1),16M(app1),64M(userapp),1M(logo1),1M(param1),1M(playlist1),6M(boot2),16M(app2),1M(logo2),1M(param2),1M(playlist2),12M(swfs),128M@0M(whole) mmz=ddr,0,0x87800000,136M LogBufSize=0x80000 extra_ref=2 extra_disp=0' fastboot# fastboot# fastboot# nand read 0x82000000 0x200000 0x320000 NAND read: device 0 offset 0x200000, size 0x320000 3276800 bytes read: OK fastboot# fastboot# bootm 0x82000000 ## Booting kernel from Legacy Image at 82000000 ... Image Name: Linux-2.6.35.7_hisilicon Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 3073408 Bytes = 2.9 MiB Load Address: 80800000 Entry Point: 80800000 Verifying Checksum ... OK Loading Kernel Image ... OK OK Starting kernel ... Uncompressing Linux... done, booting the kernel. Linux version 2.6.35.7_hisilicon (linux@ubuntu) (gcc version 4.4.1 (Hisilicon_v200(gcc4.4-290+glibc-2.11+eabi+nptl)) ) #366 Mon Dec 16 15:05:35 CST 2013 CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=10c53c7f CPU: VIPT nonaliasing data cache, VIPT nonaliasing instruction cache Machine: godbox Memory policy: ECC disabled, Data cache writeback CPU:Hi3716Mv300, Timer:100M但是这样做有个严重的缺点:配置无法固化,重启就丢失。此时理论上saveenv就能简单固化,但此设备的saveenv命令是损坏的,无法写进flash。
经过研究,设备bootloader里有两个模板:'mem=%dM console=ttyAMA0,115200 '和'mem=%dM console=ttyABCD,115200 '。正常启动永远都是ttyABCD(不存在物理接口的假设备),所以内核永远都不会有日志和shell。bootloader会解析param分区内system_ok的值,==3就切换到第二个ttyAMA0模板。所以,仅需在param1、2分区里把system_ok=1改成system_ok=3,启动代码就会自己选ttyAMA0。由于机器param分区没有CRC校验,所以可以直接改。
首先把设备拆了,标签下面有一颗螺丝,然后撬开后壳,里面是一个金属屏蔽罩,屏蔽罩上还有一颗螺丝,移除它就可以看到串口了。按图片里,蓝色线接USBTTL(比如CH340)的GND,绿线接TXD,棕线接RXD。接上以后线把CH340连上电脑,用PUTTY连接,然后给机顶盒通电,同时疯狂按键盘的Ctrl+C打断uboot,看到fastboot# 就关掉putty
https://gitcode.com/weixin_49350075/EC2106V1-shell/blob/main/fix_uboot_oneclick.py
然后按README.md运行此脚本即可。脚本会自动备份两个param分区,修改后写入,不出意外的话脚本执行完毕断电重启后开机就自动进入Linux shell了。如果提示符是>看的不舒服可以执行busybox sh。
(完)