目标:
1 - 在设备上加载旧版本的固件,因为它具有较新版本没有的功能。
2 - 将播放器设置为多重引导 (U-boot)。原始操作系统或我自定义编译的 linux 操作系统的按键。
硬件:
基于飞思卡尔 mx23 的 mp3 播放器,mmc/SD 存储 8GB,USB,4 英寸 LCD,UART。
我有 3 个播放器,据我所知,播放器之间的硬件是相同的。(LCD、MMC、UART等)
OTP eFuse 将引导模式设置为 SD_MBR_BOOT—SD 主引导记录 (MBR) 模式。它们不使用引导控制块 (BCB)。(见问题)
在我已经焊接到 UART 测试垫和连接到 PC 串行端口的缓冲区的播放器之一。我将其称为TEST播放器,而其他 2 个没有焊接 UART 的我将调用DONOR-1和DONOR-2。
该测试玩家有更新的固件,我想与旧固件更换。 DONOR-1和DONOR-2都有较旧的固件版本。
我还有一个 firware-update.SB 文件,它是较新版本。
我有 4 个不同版本的独特固件.SB 文件。其中两个包含我想要的功能。
到目前为止我所做的:
使用自定义编译的 linux,我使用 dd 从 mmc 制作了原始操作系统的映像。由于 fat32 的 3G 限制,图像分为 3 部分。这已为所有 3 个玩家完成。我使用 HID 恢复模式加载 linux。
我可以毫无问题地将TEST图像添加到TEST播放器。
如果我用其他 3 个替换任何 SB 文件,播放器将无法启动。LCD 背光灯确实亮了。
如果我从DONOR 中添加整个图像,播放器将无法启动。LCD 背光灯将亮起。
我已经用 sbtoelf (Rockbox) 从图像中解密了恢复的 SB 文件。作为比较,我对包含 u-boot 和 linux 的映像做了同样的处理。
固件 SB 文件中有 8 个部分。3 个可引导和 5 个明文。
我的 SB 文件有 1 个部分。可启动。
我已经使用“arm_disass”来反汇编 ELF 文件。我在这里的知识很薄弱,但我不认为反汇编程序会在代码在 16 位 Thumb2 指令和 32 位 ARM 指令之间切换时捕获...
简而言之,除了最初来自测试设备的固件之外,我无法在测试设备上启动任何固件。
分区表对我来说没有意义。
fdisk -l
sectors = 512
测试
p1* 193406 15859711 7833153 1 FAT12
p2 4 126207 63102 53 OnTrack DM6 Aux
p3 189310 191357 1024 1 FAT12
p4 191358 193405 1024 1 FAT12
DONOR-1类似但不准确
播放器有一个 FAT32 分区,插入计算机时大于 7GB。显示为大容量存储设备。这是媒体生活的地方。注意丢失的块。
固件在 MBR 签名 (55AA) 之后包含MBR_SIGMATEL_ID。
MBR和MBR_SIGMATEL_ID的TEST
使用TEST播放器及其良好的形象:
我已经删除了 MBR_SIGMATEL_ID 并且播放器启动或不启动的方式没有改变。
- 将引导标志从 P1 移至 P2:不引导。
- 将引导标志从 P1 移至 P3:开始引导然后崩溃。
- 将引导标志从 P1 移至 P4:开始引导然后崩溃。
- 删除了启动标志:开始启动然后崩溃
我不知道接下来要做什么。有什么建议?
STMP3780“安全二进制”u-boot linux-fslc mx23 imx233 ARMv5