如何使用相同类型的播放器固件.sb 使飞思卡尔 imx233 mp3 播放器启动?

逆向工程 拆卸 固件 手臂 硬件
2021-06-26 05:32:38

目标

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-1DONOR-2

测试玩家有更新的固件,我想与旧固件更换。 DONOR-1DONOR-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_IDTEST

使用TEST播放器及其良好的形象:

我已经删除了 MBR_SIGMATEL_ID 并且播放器启动或不启动的方式没有改变。

  • 将引导标志从 P1 移至 P2:不引导。
  • 将引导标志从 P1 移至 P3:开始引导然后崩溃。
  • 将引导标志从 P1 移至 P4:开始引导然后崩溃。
  • 删除了启动标志:开始启动然后崩溃

我不知道接下来要做什么。有什么建议?

STMP3780“安全二进制”u-boot linux-fslc mx23 imx233 ARMv5

1个回答

我对这些相同系统上的固件和硬件的发现。

它们实际上并不相同。使用的 LCD 存在硬件差异。这就是旧固件不起作用的原因。