工具与软件:
我最近开始在 eMMC 上使用硬件启动分区。 从/dev/mmcblk1boot 读取[0|1]通常会返回预期的数据。 但有时、执行读操作将返回的数据不是来自/dev/mmcblk1boot0、而是来自/dev/mmcblk1。 使用 hexdump、我可以看到指定的偏移量是正确的、只是数据来自错误的器件节点。 下面是这种情况的一个示例。 我尝试使用 strace 运行 hexdump 以比较好与坏的读取、这两者之间唯一有意义的区别是返回的数据。 我可以看到两者都打开了器件节点/dev/mmcblk1boot0。 该 eMMC 器件也用于另一个非 AM57目标、并且没有同样的行为。
我的 Linux 内核版本是6.1.38、可以在中编译 CONFIG_MMC_OMAP 和 CONFIG_MMC_OMAP_HS。 是否想过哪些问题可能会导致偶尔出现的不良读取?
良好的阅读:
hexdump -C /dev/mmcblk1boot0 -s 0x3FC000 -n 20.
003fc000 4b D8 fa 7e 42 4F 54 5F 41 5F 4c 45 46 54 3d |k..~boot_a_left=|
003fc010 33 00 42 4F |3.BO|
003fc014
错误读取:
hexdump -C /dev/mmcblk1boot0 -s 0x3FC000 -n 20.
003fc000 51 b9 9a 36 f0 56 e7 C4 D3 36 2b 2d 2c D2 E5 BD |Q.6.V.6+-、...|
003fc010 66 8a 00 98 |f
003fc014
从/dev/mmcblk1的相同偏移量读取
hexdump -C /dev/mmcblk1 -s 0x3FC000 -n 20.
003fc000 51 b9 9a 36 f0 56 e7 C4 D3 36 2b 2d 2c D2 E5 BD |Q.6.V.6+-、...|
003fc010 66 8a 00 98 |f
003fc014
谢谢!
Dave