如何使用 fastboot 将整个 emmc 刷新为单个映像

问题描述 投票:0回答:1

我有一个专有的 ARM 设备,工具和 SDK 非常有限,但我可以设法在 RAM 中启动 Android 引导加载程序。在主机上,我看到:

# fastboot devices
SERIAL   Android Fastboot

# lsusb
Bus 003 Device 098: ID 18d1:0002 Google Inc. USB download gadget

换句话说,设备通过 USB OTG 连接到 PC,并且该 Android 引导加载程序在 RAM 中运行。

该设备只有一个 emmc,而我有一个工作 emmc:图像 img-4GB(0x0 到 0xE9000000)。该镜像是一个自定义操作系统,与 Android 无关。这不是安卓。 emmc全是零,上面什么都没有。

如何通过fastboot直接将整个镜像刷入emmc而无需加载内核?

如果需要,我已准备好在 PC 上修补 fastboot。我尝试使用partmap.txt 文件:

flash=mmc,0:all:all:0x0,0xE9000000:img-4GB;

并且想做类似的事情:

fastboot flash partmap partmap_emmc.txt
fastboot flash all

但它不起作用。

android u-boot fastboot
1个回答
0
投票

如果您有 U-Boot v2021.04 或更高版本,则可以使用 U-Boot 分区语法 来指定整个分区。例如,

$ fastboot flash 1:0 img-4GB

会将您的映像刷新到 MMC 1。您还可以刷新单个分区:

$ fastboot flash 0:2 partition2.img

将闪存 MMC 0 的分区 2。

但是,听起来您可能会被供应商的 U-Boot 所困扰,它可能不够新,无法支持上述语法。如果是这种情况,您可以尝试先暂存图像

$ fastboot stage img-4GB

这会将图像下载到

CONFIG_FASTBOOT_BUF_ADDR
,通常与
CONFIG_LOAD_ADDR
相同。如果您不知道那是什么地址,您可以尝试使用内存搜索(
ms
)命令在磁盘映像中查找已知值:

=> ms.l <start> <size> 0xcafebabe

其中

<start>
<size>
是 RAM 的起始位置和 RAM 的大小,以 4 字节字 (
l
ongs) 为单位。如果您不知道 RAM 在哪里,可以通过运行
bdinfo
来找到。

一旦你弄清楚了

CONFIG_FASTBOOT_BUF_ADDR
是什么,就跑吧

=> mmc dev 0
=> mmc write <CONFIG_FASTBOOT_BUF_ADDR> 0 <size in sectors>

其中

<size in sectors>
是图像的大小(以 512 字节扇区为单位,以十六进制表示)。

© www.soinside.com 2019 - 2024. All rights reserved.