DD schlägt über 2 GB hinaus fehl

Wenn ich versuche, dd zum Flashen von Bildern zu verwenden, treten einige Probleme auf, wenn der Suchwert 2 GB überschreitet (dh bs * seek >= 2 GB ).

dd bs=512 count=8 if=sample.img of=/dev/block/mmcblk0 seek=4194304
dd: /dev/block/mmcblk0: Invalid argument

Wenn ich es mit einem Wert (2 GB-1) versuche, ist der Befehl dd erfolgreich. Kann jemand darauf hinweisen, warum genau die 2-GB-Grenze für den Suchwert existiert? Bezieht es sich auf das Dateisystem (FAT-Limit?)? Gibt es eine einfache Problemumgehung, um dd-Arbeit über das Suchlimit hinaus zu bekommen?

dd bs=512 count=8 if=sample.img  of=/dev/block/mmcblk0 seek=4194303                         <
8+0 records in
8+0 records out
4096 bytes transferred in 0.001 secs (4096000 bytes/sec)

Anscheinend tritt das Problem nur bei Suchwerten im Bereich (2GB-4GB) auf. Das dd gelingt über 4GB hinaus - sehr seltsam.

Ich habe noch keine andere dd-Binärdatei ausprobiert. Aber ich denke, das Problem ist ähnlich wie das erwähnte listens.busybox.net/pipermail/busybox/2012-July/078193.html Ich konnte den Patch nicht herunterladen, um das Problem zu beheben. Ich schreibe in mmcblk0 selbst (nicht in eine bestimmte Partition).
Für mich schlägt Androids Toolbox dd fehl. Ich habe ein anderes DD (Toybox) ausprobiert und es hat gut funktioniert.

Antworten (1)

Verwenden Sie nicht busybox dd (kompiliert mit bionic libc). Stattdessen können Sie die statische dd-Binärdatei von gnu coreutils verwenden, die mit glibc oder musl kompiliert wurde. Auf meinem Gerät funktionieren alle Binärdateien gut; Toolbox dd von Android, busybox dd von meefik und statisch aufgebautes dd.

Es wurde bestätigt, dass Bionic mit großen Dateien fehlerhaft ist .

PS: Das Spielen mit eMMC ist gefährlich, besonders beim Testen von Buggy dd. dd ist meiner Meinung nach ein Killer. Sie können versehentlich die ersten paar Bytes von mmcblk0 überschreiben, wodurch Ihr Gerät unbrauchbar wird.