本帖最后由 shay 于 2020-11-18 18:02 编辑
之前购买了小米多模网关,一直没有接入ha,直到 多模网关成功接入ha ,完美接入ha。国庆之后蛋疼的点了网关更新,发现直接不能用了。从插件git页面看到,v1.4.6_0043 (2020.10)版本之后,telnet已经没法进入了,所以插件就不能使用。所以新购买小米多模网关通过这个插件接入ha的,就要注意版本问题了。
先说说降级的前提条件和风险,可能有点苛刻:
1.直接从v1.4.6_0043版本之前升级到任意新版,之后没有再更新过。
2.需要ttl转usb设备,淘宝买那个贵点的,质量可靠。
3.风险是可能变砖,但可以修复。不过需要求助歪果仁了。按我说的做风险很小。
-----11.18日追加:
v1.4.6_0043这个版本的,密码可破解,参考小米多模网关v1.4.6_0043版本成功接入ha经验分享
但比这个版本还新的,就尝试降级吧,因为新的直接打不开telnet了。
-----
原理是多模网关有两套固件,一套新的,一套上一版的。此方法是通过ttl修改固定引导,使用老板的固件。所以前提是网关里有个可用的老版固件。如果10月份连续升级了两次,那么目前是没戏了。(不太懂底层的boot指令,按说可以通过指令恢复到指定固件)。
隐约觉得自己十一期间更新了两遍,应该没戏了,不过看教程不麻烦,就死马当活马医,折腾下吧。
步骤:
1.拆机
拆了半天,最后发现慢慢的撬边就行了,顺着边慢慢撬,就打开了。
2.打开之后就是接ttl了
ttl的tx rx(tp4 tp11)是图片焊接的中间两个,边上焊接的那个是负极,没焊接的那个是正极。波特率是38400,开始我只接了tx rx,正常字母和乱码混合输出,所以又把负极(tp8)接上了,这下不会乱码了。顶上那根(tp16)是中断启动用的,使用方法是另一头直接碰触负极。
3.重点操作
使用可以记录日志信息的串口软件,多重启几次保留日志信息,用于万一挂了的时候的bootinfo 恢复。
重启的时候要关注loading kernel 这个部分,这个会有短暂的停顿。
root_sum_check: off
watchdog_time: 0
boot_version: 1.0.2.005
priv mode
Info: loading kernel 0 ... Done
Info: checking kernel 0 ... Success
Info: select rootfs 0
Info: booting...
Info: loading kernel 0 ... Done 这会有停顿,有足够的时间短接负极触发中断,这个时间点很重要,否则容易砖啊。
保存好日志,观察好触发时间点后。再次重启,看到Info: loading kernel 立马短接tp16和负极,此时主固件载入失败,载入备份固件,再次短接,就会进入到bootloader。(其实连续两次短接就行),输出如下
priv mode
Info: loading kernel 0 ... Done
Info: checking kernel 0 ... Fail
Info: loading kernel 1 ... Done
Info: checking kernel 1 ... Fail
Warn: all kernels are invalid !
Info: save boot_info
---Ethernet init Okay!
此时就进入了编辑状态,我们要做的就是修改引导的固件。执行如下指令
<blockquote>NANDR 0xa0000 0xa0a00000 55
结果如下:
<blockquote><RealTek>NANDR 0xa0000 0xa0a00000 55
(11.18更新,不会算的可以把代码复制到这个网页,算出来更新一样的)
我们需要修改的是xx xx yy yy yy yy部分,xx xx校验码。yy yy yy yy是引导的固件,只有 00 00 00 00和01 01 01 01这俩值,如果看到的值是前者,那么两个xx需要分别-2,如果是后者就分别+2.比如我的值是f5 f0 00 00 00 00,需要把00 改成 01,f5 f0分别-2后是f3 ee,那么输入如下指令
eb 0xa0a00000 7c 91 00 00 f3 ee 01 01 01 01
再次输入db 0xa0a00000 55指令,查看是否修改成功。如果修改成功,输入NANDW a0000 a0a00000 55指令保存。
然后直接输入reboot重启就好了,重启后就是老版的固件了。
运气比较好,我的老版固件还是夏天的那版,所以成功恢复了ha接入,立马用ha上插件的阻止更新功能关闭了网关的更新功能。
ps:
通过?指令可以查询到boot支持的指令。
HELP (?) : Print this help message
boot : Boot kernel
boot_info : Show boot info
root_sum_check on|off : Turn on or off rootfs boot sum check
wd_time <value> : Set booting watch dog
DB <Address> <Len>
DW <Address> <Len>
EB <Address> <Value1> <Value2>...
EW <Address> <Value1> <Value2>...
CMP: CMP <dst><src><length>
IPCONFIG:<TargetAddress>
MEMCPY:<dst><src><length>
AUTOBURN: 0/1
LOADADDR: <Load Address>
J: Jump to <TargetAddress>
reboot
NANDID: Read NAND Flash ID
NANDBE:<offset><len>
NANDSCRUB:<offset><len>
NANDPIOR:<flash_Paddress><image_addr><image_size>
NANDPIOW:<flash_Paddress><image_addr><image_size>
NANDR:<flash_Paddress><image_addr><image_size>
NANDW:<flash_Paddress><image_addr><image_size>
NANDECCGEN: <source_addr><des_addr><ecc working buffer><length in hex>
NANDBBD:<offset><len>
NANDMARKB:<offset>
NANDFEATURE:<cmd> <address> <value>
NANDT: <cmd> <param>
MDIOR: MDIOR phyid reg
MDIOW: MDIOW phyid reg data
PHYR: PHYR <;PHYID><reg>
PHYW: PHYW <;PHYID><reg><data>
PHYPR: PHYPR <;PHYID><page><reg>
PHYPW: PHYPW <;PHYID><page><reg><data>
COUNTER: Dump Asic Counter
XMOD <addr> [jump]
TI : timer init
T : test
ETH : startup Ethernet
CPUClk: CP0
看不懂,不过应该可以恢复固件,我这篇文章完全是copy国外大佬的,再等大佬搞出任意版本恢复的步骤吧。
|