1-由于设备具有较新版本的固件,因此无法在设备上加载较旧版本的固件。
2-将播放器设置为多重启动(U-boot)。
硬件:
基于Freescale的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。
TEST播放器具有更新的固件,我想更换旧的固件。
DONOR-1和DONOR-2都有较旧的固件版本。
我也有一个较新版本的firware-update.SB文件。
我有4个独特的firmware.SB文件,所有版本均不同。其中两个包含我想要的功能。
到目前为止,我所做的是:
使用自定义编译的linux,我从mmc制作了原始操作系统的映像。使用dd。由于fat32的3G限制,图像分为3部分。这已针对所有3位玩家完成。我使用HID恢复模式加载linux。
我可以将TEST映像dd到TEST播放器,而不会出现任何问题。
如果我将任何SB文件替换为其他3个播放器将无法启动。 LCD背光确实亮了。
如果我从DONORs上读取整个图像,播放器将无法启动。 LCD背光将亮起。
我已经用sbtoelf(Rockbox)解密了从图像中恢复的SB文件。作为比较,我对包含u-boot和linux的映像进行了相同的操作。
固件SB文件中有8个部分。 3个可启动文件和5个明文。
我的SB文件有1个部分。可引导。
我已经使用“ arm_disass”反汇编了ELF文件。我的知识很薄弱,但是当代码在16位Thumb2指令和32位ARM指令之间切换时,我认为反汇编程序不会捕获...
总之,我无法启动任何固件在TEST设备上,除了最初来自它的设备。
分区表对我来说没有意义。
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。
TEST的MBR和MBR_SIGMATEL_ID
TEST播放器及其良好的图像:
我已删除MBR_SIGMATEL_ID,并且播放器启动或无法启动的方式没有改变。
将启动标志从P1移至P3:开始启动,然后崩溃。
将启动标志从P1移至P4:开始启动,然后崩溃。 br />删除了启动标志:开始启动然后崩溃
我不确定下一步该怎么做。有什么建议吗?
STMP3780“安全二进制” u-boot linux-fslc mx23 imx233 ARMv5
#1 楼
我发现了这些相同系统上的固件和硬件。它们实际上并不相同。使用的LCD有硬件差异。这就是较旧的固件无法正常工作的原因。
评论
我将开始将供者的文件系统之一的一部分复制到测试者的文件系统中,然后查看何时出现问题。例如,逻辑上复制第一个(可启动)分区是否有效?复制该分区的某些文件是否有效?现在,这个问题似乎有点笼统,我认为如果不作进一步的修改,我们就无法提出答案。在问题中,您可以看到我确实将DONAR的克隆图像和提取的SB文件复制到了Type 53分区。结果是一样的。我不确定如何看到“哪里出错了”。我已经通过duart从所有引导尝试中捕获了调试输出。 duart包含很多噪音,但我仍然可以看到大部分噪音。我正在尝试以这种方式跟踪逻辑流。
当我使用HID恢复模式并加载了自定义的Linux内核时,我可以对mmc进行fdisk。分区表与数据不匹配。例。 P1,P3,P4被标识为FAT12。我无法安装任何分区。如果我更改了任何分区信息,类型或启动标志,则设备将无法启动。当设备正常并插入PC时,可以在主机PC上安装FAT32大容量存储设备。
JTAG不可用。我试图将调试输出与BIN和ELF文件中的字符串进行匹配,以查看引导崩溃的代码部分。使用objdump,字符串,arm_disass(摇滚箱),sbtoelf(摇滚箱)。
我还能在这里提供什么其他信息?我在这里所做的工作要多得多。