euzen 发表于 2022-4-10 21:31

大麦DM4036(S905B) bootloader损坏后的救砖历程-飞线SD卡成功救活

本帖最后由 euzen 于 2022-4-11 08:56 编辑

手上的大麦DM4036是多年前开通长城宽带赠送的,没开几次就吃灰了,最近因为折腾青龙面板,将它翻出来刷成了armbian,一时操作不慎,搞坏了bootloader,为了修复它花了近大半个月时间,付出时间精力应该远大于它现在的价值了,毕竟现在咸鱼上一般标价才40左右。因为研究需要,还蹲点收了个25元不包邮,感觉自己对这个修砖的研究实在是爱得深沉。现在将修复过程中的的一些经历写下来,以方便其他有同样需要的爱好者。期间参考了论坛很多帖子,得到不少有用信息,写下这些,也算是回馈一下。

DM4036的SOC是amlogic的 S905B,同时它应该是所谓的高安版本,接口上只有100M网口,HDMI和USB(OTG),没有TF卡接口。其他使用S905系列(L,M,X)的盒子,遇到bootloader损坏,基本上都可以使用相同思路解决问题。坛里某个帖有人说过,只要硬件没问题,这类盒子就是刷不死的,现在是深以为然,极为认同。有人手上依然拿着砖,区别只是是否愿意动手,是否找到相关资源(aka:救砖包)。

事情起因是这样的,我将DM4036通过焊接TTL线进uboot里改env参数的办法,在U盘里刷了 Armbian_5.44_S9xxx_Ubuntu_xenial_3.14.29_server_20180515.img 这个包,Linux跑起来正常,docker装好了,v2ray也能跑,还试过运行里面的脚本,将系统迁移到eMMC,不过操作并不成功,还将里面的安卓系统搞死了,不过我只需要armbian,所以对安卓的损坏并不在意,此时并没有意识到这是一个危险操作。但这个armbian包有一个缺点就是linux核心版本比较旧,docker只能安装17版本,v2ray安装sevice也要做一些修改。以于就继续寻找较新核心的镜像包。之后用同样方法安装了Armbian_20.10_Arm-64_focal_current_5.9.0.img,这次可以使用20版本的docker了,其他都一切正常,然后又跑了一下里面的install-aml-s905-emmc.sh,嘿嘿,论坛里至于有两个人因为这样变砖了,算上自己是三人行了。后面看了看脚本,它是先将emmc里的前4M bootloader区内容备份,然后换上它新版的uboot(8M左右),重启后盒子废了。TTL里连接,反复只有类似下面的信息:
GXBB:BL1:08dafd:0a8993;FEAT:FDFD31BC;POC:3;RCY:0;EMMC:0;READ:0;CHK:F3;SD:800;USB:8;这串信息是什么意思呢,网上搜索了一下,找到了答案。详细的可以看看这个 romboot初步解析
大概就是POC:3 power on config种类是3,代表读取启动介质的顺序是EMMC->SD卡->USB。EMMC:0 硬件正常;READ:0 数据读取正常; CHK:F3 数据校验错,错误代码为F3。SD:800 响应超时,USB:8 未启用(?)
为什么校验会出错呢,据自己猜测,因为盒子是所谓高安版本,bootloader程序是加密了的,而Linux里脚本写入的uboot是未加密版本,校验都过不了,更不要说正常启动了。这也是后来很多网上找来的工具附带的uboot均无法顺利写入的原因。下图是未加密和加密后UBOOT的比较,左边是未加密,会有@AML这个标识。


前面说过这类盒子刷不死,顺带简单说说我的理解。它的启动过程是这样的,写在SoC(简单解理为CPU啦)里的BL1上电后运行,读取POC信息后,按顺序查找EMMC,SD(或TF),和USB口上的BL2和BL3程序,进入UBOOT,再进一步启动emmc或其他介质上安卓或Linux。盒子里的BL2,BL3是写在EMMC上的,EMMC上的BL损坏后,还可以通过SD卡和USB方式补救,注意这个USB并不是U盘,而是USB线连接电脑进行相关启动,其实就是平时我们进行的线刷的首要阶段。这可以从USB_Burning_Tool的日志上得到印证。下面的类似 Run at address 0xd9000000,就是将BL2上传到盒子内存后运行。
--Start burning...
--------------ERASE BOOTLOADER------------
--2-0-0-0
-------------Download DDR.USB-----------
--2-0-0-0
--Control write pll reg1 0xd9000000:0x000000b1
--Control write pll reg1 0xd9000000:0x00005183
--Control write pll reg1 0xd9000000:0x000000b1
--Control write pll reg1 0xd9000000:0x00005183
--Write initial succeed
--Upload encrypt at 0xc8100228
--ulValue = 0xfdfd31bc
--File change to DDR_ENC.USB
--Read encrypt value succeed
--Transfer complete
--Run at address 0xd9000000
--RunInRam succeed
--2-0-0-0
--CheckFileRunState succeed
--runResult:0x       0,paraMagic:0x3412cdab
--ReadPara failed
--Romcode/初始化DDR/读取初始化结果/USB控制命令出错
--Close device handle 0x00000650
--Catch DBT_DEVICEREMOVECOMPLETE

变砖后,对各种方法都进行了尝试。
首选方案是大家都首先想到的救砖包,但DM4036不是理财产品N1、T1,作为盒子它似乎比较小众(我错了!)玩它的人不多。既然都是晶晨的CPU,前面都是S905,反正都变砖了,所以尝试了webpad著名的T1救砖包,当然是失败了。上面日志就是使用T1救砖包刷机的失败过程,也是很多人会求助的卡在1%,2%”Romcode/初始化DDR/读取初始化结果/USB控制命令出错“,其中有人说他们遇到了这个错误后,使用换系统,换USB口,换短线,快速插拔或使用指定的USB_Burning_Tool版本的方法跑完了100%,但自己尝试了大部分类似方法,依然失败。而且之前自己曾用相同的系统相同的U口相同的线成功刷过其他包的,只是那时是没有勾选刷除flash和bootloader罢了。估计这个包刷不上,是因为CPU不一致的缘故,救砖包方案尝试到此终止。

其次是使用aml官方的linux版本update工具,这是一个在github上的项目,链接: aml-usb-load-uboot,说明声称 ”Amlogic USB Burning Tool used to load Mainline U-boot without any storage”,这是运行于linux上的命令行刷机工具,但因为附带的BOOTLOAD是非加密版本,当执行到上传“u-boot.bin.usb.tpl”时就报错了。手上虽然有原机备份的BOOTLOAD,但缺乏资料和工具,无法将其拆解成所需的DDR_ENC.USB,UBOOT_ENC.USB等文件。这个以后有时间,可以再继续研究一下。

再次尝试不同方案是因为搜索到webpad的飞线板载emmc救砖的帖子,链接:大麦盒子 DM4036 在位飞线读写板载EMMC,bootloader损坏救砖|机顶盒/智能电视 - 数码之家 (mydigit.cn),为此还花费数元注册了个账号才能读到这个贴子的内容。执行难度比较高,要在细如发丝的印刷电路上刮漆,焊上飞线,不过还是咬咬牙完成了。不过结果还是不如人愿,电脑上并不能正常读到数据,只有瞬间认出29.3G容量然后消失。换过不同的读卡器也是如此,不知道是读卡器的兼容性问题还是自己手艺太差所致。不过看了这个帖也不是没有收获,它公布了一个webpad大佬所在的Q群,336730393。申请过了两天后才成功加入,这个多年前拉起来的群,本来是不抱太大希望可以申请成功的了,看到加入后着实有些惊喜。群已经比较冷清了,但群文件里有非常珍贵实用的资料,也因为这份资料才有了最终的成功。那就是一件大杀器,DM4036的电路原理图。


最终方案,飞线SD卡。大麦DM4036成品是阉割了TF接口的,但在PCB里有相关引脚,估计是为了方便调试吧,如果是其他有TF卡接口的盒子,损坏bootload要挽救就容易得多了,找到原机备份的bootload数据,制作一张启动卡即可。DM4036的SD卡引脚在CPU的同一面上,需要将板子从散热硅胶上拆下来才能进行焊接。相关定义如下:
TP19-D0
TP20-D1
TP21-D2
TP22-D3
TP23-CLK
TP24-CMD
另外 电源和地可以使用
TP10-3.3V
TP11-GND

怎样制作可以启动的SD卡呢,在这里又走了不少弯路,官方有制作工具:SDcardMaker,因为使用的是win10系统,启动工具后连读卡器盘符都出不来,后面尝试以“管理员身份运行”才成功出现读卡器盘符。另外程序不要放在有中文字符的文件夹里,否则会一直提示找不到你选择的bin文件。因最后,在选择*.bin时又兜回去高安版本的困境,没有适用的加密版本固件。在一众下载回来的uboot.bin里不断尝试还是失败告终。(后话:可以尝试将备份的4Mb bootload数据改后缀为.bin来进行制作,因为自己拆除了焊接了SD卡槽后才想到这方面,没有进行验证)
然后是使用Linux的dd命令进行写入,在这里也踩了坑。因为之前分析过那个害我变砖的脚本,它是从emmc的0字节开始保存4MB数据的,于是我也将备份从0字节开始写回SD卡,结果是:
GXBB:BL1:08dafd:0a8993;FEAT:FDFD31BC;POC:3;RCY:0;EMMC:0;READ:0;CHK:F3;SD:0;READ:0;CHK:F3;USB:8;可以看到,SD卡也正确读到数据了,但还是跟emmc一样校验错误。后面查了不少资料:
How to Create a Bootable Recovery SD Card for Amlogic TV Boxes - CNX Software (cnx-software.com)
friendlyarm/sd-fuse_amlogic: Create bootable SD card for NanoPi K2 (Amlogic S905) (github.com)
才知道需要从512字节后写入,前512字节是SD卡自己的分区信息,不能覆盖。所以,正确的步骤 是:
1,买个SD卡或TF卡后插槽,飞线焊接到主板上。
2,找个SD卡,容量随便,在Linux环境中执行 sudo dd if=u-boot-default-aml-s905.img of=/dev/sdb bs=512 seek=1
上述命令中的u-boot-default-aml-s905.img是变砖脚本良心发现帮我备份下来的bootloader数据,/dev/sdb 是我的sd卡设备。bs=512是指每个块是512字节,seek=1指跳过一个块(即512字节),不覆盖原SD卡分区信息。
3,将写好数据的SD卡插上,上电,就可以回到熟悉的UBOOT环境。
4,在UBOOT环境中,在USB口中插入原来搞坏bootloader的那个Linux U盘,手工执行里面的s905_autoscript,让Linux启动起来。我的内容如下,可能因不同版本并不相同。
setenv env_addr "0x10400000"
setenv kernel_addr "0x11000000"
setenv initrd_addr "0x13000000"
setenv boot_start booti ${kernel_addr} ${initrd_addr} ${dtb_mem_addr}
if fatload usb 0 ${kernel_addr} zImage; then if fatload usb 0 ${initrd_addr} uInitrd; then if fatload usb 0 ${env_addr} uEnv.ini; then env import -t ${env_addr} ${filesize};fi; if fatload usb 0 ${dtb_mem_addr} dtb.img; then run boot_start; else store dtb read ${dtb_mem_addr}; run boot_start;fi;fi;fi;5,登录盒子上的这个Linux,在里面执行 sudo dd if=u-boot-default-aml-s905.img of=/dev/mmcblk0 , 将备份数据写回emmc上,注意of=指向的emmc设备名因人而异,要先确认一下。
6,后面就是常规的uboot环境救砖了,因为我只需要在UBOOT里跑U盘上的Linux系统,不需要修复安卓,而且论坛里其他帖子有很多这部分的讨论,就不再重复了。

euzen 发表于 2022-4-10 21:44

补两张图。1,SD/TF卡接口定义。



2,SD卡引脚焊接位置。另外说一句,DM4036预留了TTL接口,买个PH2.0的4脚母座和PH2转杜邦线,焊上就非常方便连接TTL线了。

zyguowei 发表于 2022-4-10 22:10

:victory:   眼好 活好

yunsword 发表于 2022-4-14 15:50

我有个玩客云pro和你砖的类似,按T1救砖也是不行
详见https://www.right.com.cn/forum/thread-8220531-1-1.html
我去哪里找uboot呢

euzen 发表于 2022-4-15 09:23

yunsword 发表于 2022-4-14 15:50
我有个玩客云pro和你砖的类似,按T1救砖也是不行
详见https://www.right.com.cn/forum/thread-8220531-1-1 ...

看到有EMMC:0;READ:0;CHK:AA; 估计也是uboot被搞坏了。你找找有没有玩客云的官方固件,用BurnCardMaker之类的软件制作一张SD启动卡试。我记得玩客云是有SD卡口的,恢复起来并不困难。手上只有玩客云(没有PRO),不知道bootloader是否通用,可以备一份给你试试。

euzen 发表于 2022-4-15 10:44

本帖最后由 euzen 于 2022-4-15 10:58 编辑

昨天收到因疫情关系延迟多天才到手的另一个DM4036盒子。卖方描述是盒子“突然”就卡logo了,售给有缘人。因为有成功的经验,对这个不能正常工作的盒子还是比较有信心可以修复的。结合之前做研究的搜索,卡LOGO多数是刷机之后出现的副作用,估计这个盒子也是刷了第三方的包吧,卡LOGO并不“突然”。接上TTL线,看到最后报错是找不到命令storeboot,然后就停在uboot命令提示符上。正要大展拳脚,发现在UBOOT里输入不了命令。这就有点慌了,这个情况也在之前的搜索中看到过相关案例,说在UBOOT中输入没有反应的,也没有见后续的进展,莫非这个是真坏了?后来想到TTL是一读(RX)一写(TX)分开两条线操作的,难道是线虚焊了,重新上锡加固,重启,这次可以输入命令了。
根据提示,在备份的env变量列表中找到storeboot的内容,执行setenv storeboot "if imgread kernel boot ${loadaddr}; then store dtb read $dtb_mem_addr; bootm ${loadaddr}; fi;run update;"写回到env区,重启,这次TTL显示可以启动安卓了,但还是卡在一个报错上。大概是说instaboot区读写失败。重启回到UBOOT,将备份的instaboot.img复制到U盘上,执行usb_update instaboot instaboot.img,这个区有512MB,花了10分钟左右才写完,估计也是我的老U盘速度太慢。再重启,看着是顺利启动了,接上HDMI线一看,果然是刷了第三方刷机包,正在进行首次进桌面的优化工作。
修复到此完成。

euzen 发表于 2022-4-15 11:48

yunsword 发表于 2022-4-14 15:50
我有个玩客云pro和你砖的类似,按T1救砖也是不行
详见https://www.right.com.cn/forum/thread-8220531-1-1 ...

跟着你的贴详细看了一下,pro的SoC是s912,跟旧版玩客云的s805差不太远了。如果在网上找不到原厂刷机包,只能找有pro又会操作的网友备个bootload给你做启动卡了。T1的救砖包可以在N1上生效,估计是同一厂家的原因,别家的产品应该不能使用。

gaze 发表于 2022-7-11 21:34

这个修复过程真的很不错。

但是万幸的是,有以前的保存下来的uboot文件,这个太重要了。

我也有一个B860av2.1 被我一不留神写入了一个错误的uboot,给干废了,
手头也没有原机备份下来的uboot,现在痛苦万分,找了很多不同s905的盒子里的uboot,都是不行,,,
困顿中。。:Q

shengpeizhe 发表于 2022-7-19 09:00

有没有DM4036刷armbian的教程呀,手里两个这机器呢,没什么用。麻烦楼主出个简单的教程:)

sgysgy 发表于 2022-7-25 16:24

谢谢分享

跪下叫大哥 发表于 2022-10-6 23:42

楼主,备份的bootloader数据能分享下吗?谢谢

火7阳 发表于 2022-11-10 16:52

shengpeizhe 发表于 2022-7-19 09:00
有没有DM4036刷armbian的教程呀,手里两个这机器呢,没什么用。麻烦楼主出个简单的教程

同求楼主,出个DM4036刷armbian的教程。

euzen 发表于 2023-2-6 09:17

跪下叫大哥 发表于 2022-10-6 23:42
楼主,备份的bootloader数据能分享下吗?谢谢

链接: https://pan.baidu.com/s/1gplF44ZaIlXhgufqHXafFQ?pwd=x9mm 提取码: x9mm

如果那抹阳光 发表于 2023-2-16 20:38

2,找个SD卡,容量随便,在Linux环境中执行 sudo dd if=u-boot-default-aml-s905.img of=/dev/sdb bs=512 seek=1
进行到这一步了,但是对于一步不是很了解,不知道怎么做,用disk -l看到TF卡已经挂载,把命令中SDB改成自己的挂载目录,执行就返回dd: failed to open 'u-boot-default-aml-s905.img': No such file or directory,就出这条,是要把img文件放在什么位置吗?

如果那抹阳光 发表于 2023-2-16 21:44

搞明白这一步了,已经TTl跑马 gxb_p200_v1#这个了,可是到这又迷茫了,手里没有linuxU盘,只有安卓的卡刷和线刷包,不知道下一步该咋办,看了好多教程,感觉没对的上的:Q
页: [1] 2
查看完整版本: 大麦DM4036(S905B) bootloader损坏后的救砖历程-飞线SD卡成功救活