Um eine IMG-Datei (um diese dann mit Etcher oder dd auf die SD-Karte zu kopieren), geht man wie folgt vor:
Zuerst wird eine leere IMG-Daten mit der "richtigen" Größe erstellt, dazu wird das altbewährte Werkzeug dd verwendet:
dd if=/dev/zero of=imx6_marsboard.img bs=1024KB count=6000
if ist input file, also die Quelle, of ist output file, also das Ziel, bs steht für BlockSize, kann in KB, MB oder GB angegeben werden und count ist entsprechend die Anzahl der Blöcke, also 1024 * 6000 = 6144000KB oder 6000MB (ich rechne mit 1024, nicht mit 1000).
Nach dem die IMG-Datei erstellt wurde, muss man sie als loop noch mounten:
losetup -f --show imx6_marsboard.img
Als Ausgabe kommt dann sowas wie /dev/loop0 zurück. Jetzt hat man quasi die "Festplatte" ohne Partitionen ins System eingehängt.
Nun erstellt man die Partitionen auf in der /dev/loop0. Ich bin dazu übergegangen für meine SBC nur eine Partition zu erstellen mit ext4 zu erstellen. Es vereinfacht vieles und da u-boot mit ext2 umgehen kann, ist es auch kein Problem den Kernel von ext4 zu starten. Dieser Befehl erstellt eine Partition über die gesamte Datei:
sfdisk /dev/loop0 << EOF
;
EOF
Nun wird das /dev/loop0 wieder entfernt:
losetup -d /dev/loop0
Mit kpartx werden nun die Device Maps für die Partitionstabelle erstellt:
kpartx -va /dev/loop0
die Ausgabe ich dann die Liste der Partitionen, in meinem Fall gibt es nur loop0p1.
Jetzt wird das Filesystem auf dem loop0p1 erstellt, in meinem Fall, wie schon gesagt, ein ext4:
mkfs.ext4 /dev/mapper/loop0p1
Anschließend kann die Partition gemountet werden:
mount /dev/mapper/loop0P1 /mnt/
Nun kann man das RootFS nach /mnt/ kopieren, mit cp oder mit rsync:
rsync -a <PFAD ZU ROOTFS> /mnt/
Anschliessend ein
umount /dev/mapper/loop0p1
und man kann die IMG-Datei mit Etcher oder dd auf die SD-Karte übertragen.