找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 5156|回复: 36

大麦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里连接,反复只有类似下面的信息:
  1. 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上传到盒子内存后运行。
  1. [00:01:30 485][HUB1-3][Inf]--Start burning...
  2. [00:01:30 546][HUB1-3][Inf]--------------ERASE BOOTLOADER------------
  3. [00:01:31 056][HUB1-3][Inf]--2-0-0-0
  4. [00:01:31 056][HUB1-3][Inf]-------------Download DDR.USB-----------
  5. [00:01:31 056][HUB1-3][Inf]--2-0-0-0
  6. [00:01:31 056][HUB1-3][Inf]--Control write pll reg1 0xd9000000:0x000000b1
  7. [00:01:31 569][HUB1-3][Inf]--Control write pll reg1 0xd9000000:0x00005183
  8. [00:01:32 085][HUB1-3][Inf]--Control write pll reg1 0xd9000000:0x000000b1
  9. [00:01:32 595][HUB1-3][Inf]--Control write pll reg1 0xd9000000:0x00005183
  10. [00:01:33 106][HUB1-3][Inf]--Write initial succeed
  11. [00:01:33 106][HUB1-3][Inf]--Upload encrypt at 0xc8100228
  12. [00:01:33 106][HUB1-3][Inf]--ulValue = 0xfdfd31bc
  13. [00:01:33 106][HUB1-3][Inf]--File change to DDR_ENC.USB
  14. [00:01:33 106][HUB1-3][Inf]--Read encrypt value succeed
  15. [00:01:33 119][HUB1-3][Inf]--Transfer complete
  16. [00:01:33 119][HUB1-3][Inf]--Run at address 0xd9000000
  17. [00:01:33 120][HUB1-3][Inf]--RunInRam succeed
  18. [00:01:33 134][HUB1-3][Inf]--2-0-0-0
  19. [00:01:33 134][HUB1-3][Inf]--CheckFileRunState succeed
  20. [00:01:33 134][HUB1-3][Inf]--runResult:0x       0,paraMagic:0x3412cdab
  21. [00:01:33 134][HUB1-3][Err]--ReadPara failed
  22. [00:01:33 136][HUB1-3][Err]--[0x10105002]Romcode/初始化DDR/读取初始化结果/USB控制命令出错
  23. [00:01:33 136][HUB1-3][Inf]--Close device handle 0x00000650
  24. [00:01:51 777][Global][Inf]--Catch DBT_DEVICEREMOVECOMPLETE
复制代码


变砖后,对各种方法都进行了尝试。
首选方案是大家都首先想到的救砖包,但DM4036不是理财产品N1、T1,作为盒子它似乎比较小众(我错了!)玩它的人不多。既然都是晶晨的CPU,前面都是S905,反正都变砖了,所以尝试了webpad著名的T1救砖包,当然是失败了。上面日志就是使用T1救砖包刷机的失败过程,也是很多人会求助的卡在1%,2%”[0x10105002]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的同一面上,需要将板子从散热硅胶上拆下来才能进行焊接。相关定义如下:
  1. TP19-D0
  2. TP20-D1
  3. TP21-D2
  4. TP22-D3
  5. TP23-CLK
  6. TP24-CMD
  7. 另外 电源和地可以使用
  8. TP10-3.3V
  9. TP11-GND
复制代码


怎样制作可以启动的SD卡呢,在这里又走了不少弯路,官方有制作工具:SDcardMaker,因为使用的是win10系统,启动工具后连读卡器盘符都出不来,后面尝试以“管理员身份运行”才成功出现读卡器盘符。另外程序不要放在有中文字符的文件夹里,否则会一直提示找不到你选择的bin文件。因最后,在选择*.bin时又兜回去高安版本的困境,没有适用的加密版本固件。在一众下载回来的uboot.bin里不断尝试还是失败告终。(后话:可以尝试将备份的4Mb bootload数据改后缀为.bin来进行制作,因为自己拆除了焊接了SD卡槽后才想到这方面,没有进行验证)
然后是使用Linux的dd命令进行写入,在这里也踩了坑。因为之前分析过那个害我变砖的脚本,它是从emmc的0字节开始保存4MB数据的,于是我也将备份从0字节开始写回SD卡,结果是:
  1. 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启动起来。我的内容如下,可能因不同版本并不相同。
  1. setenv env_addr "0x10400000"
  2. setenv kernel_addr "0x11000000"
  3. setenv initrd_addr "0x13000000"
  4. setenv boot_start booti ${kernel_addr} ${initrd_addr} ${dtb_mem_addr}
  5. 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系统,不需要修复安卓,而且论坛里其他帖子有很多这部分的讨论,就不再重复了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

评分

参与人数 1恩山币 +2 收起 理由
ga*** + 2 强大的恩山!(以下重复1万次)

查看全部评分

我的恩山、我的无线 The best wifi forum is right here.
 楼主| | 显示全部楼层
补两张图。1,SD/TF卡接口定义。



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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

   眼好 活好  
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

我有个玩客云pro和你砖的类似,按T1救砖也是不行
详见https://www.right.com.cn/forum/thread-8220531-1-1.html
我去哪里找uboot呢
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
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是否通用,可以备一份给你试试。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
本帖最后由 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线一看,果然是刷了第三方刷机包,正在进行首次进桌面的优化工作。
修复到此完成。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
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上生效,估计是同一厂家的原因,别家的产品应该不能使用。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

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

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

我也有一个B860av2.1 被我一不留神写入了一个错误的uboot,给干废了,
手头也没有原机备份下来的uboot,现在痛苦万分,找了很多不同s905的盒子里的uboot,都是不行,,,
困顿中。。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

有没有DM4036刷armbian的教程呀,手里两个这机器呢,没什么用。麻烦楼主出个简单的教程
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

谢谢分享
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

楼主,备份的bootloader数据能分享下吗?谢谢
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

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

同求楼主,出个DM4036刷armbian的教程。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

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

链接: https://pan.baidu.com/s/1gplF44ZaIlXhgufqHXafFQ?pwd=x9mm 提取码: x9mm
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

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文件放在什么位置吗?
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

搞明白这一步了,已经TTl跑马 gxb_p200_v1#这个了,可是到这又迷茫了,手里没有linuxU盘,只有安卓的卡刷和线刷包,不知道下一步该咋办,看了好多教程,感觉没对的上的
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-5-6 07:18

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表