On 15.09.25 19:37, Cédric Le Goater wrote: > On 9/14/25 14:46, Jan Kiszka wrote: >> From: Jan Kiszka <jan.kis...@siemens.com> >> >> Signed-off-by: Jan Kiszka <jan.kis...@siemens.com> >> Reviewed-by: Alex Bennée <alex.ben...@linaro.org> >> --- >> docs/system/device-emulation.rst | 1 + >> docs/system/devices/emmc.rst | 52 ++++++++++++++++++++++++++++++++ >> 2 files changed, 53 insertions(+) >> create mode 100644 docs/system/devices/emmc.rst >> >> diff --git a/docs/system/device-emulation.rst b/docs/system/device- >> emulation.rst >> index 911381643f..36429b1d17 100644 >> --- a/docs/system/device-emulation.rst >> +++ b/docs/system/device-emulation.rst >> @@ -101,3 +101,4 @@ Emulated Devices >> devices/canokey.rst >> devices/usb-u2f.rst >> devices/igb.rst >> + devices/emmc.rst >> diff --git a/docs/system/devices/emmc.rst b/docs/system/devices/emmc.rst >> new file mode 100644 >> index 0000000000..dbea6d6c7e >> --- /dev/null >> +++ b/docs/system/devices/emmc.rst >> @@ -0,0 +1,52 @@ >> +============== >> +eMMC Emulation >> +============== >> + >> +Besides SD card emulation, QEMU also offers an eMMC model as found on >> many >> +embedded boards. An eMMC, just like an SD card, is connected to the >> machine >> +via an SDHCI controller. >> + >> +Create eMMC Images >> +================== >> + >> +A recent eMMC consists of 4 partitions: 2 boot partitions, 1 Replay >> protected >> +Memory Block (RPMB), and the user data area. QEMU expects backing >> images for >> +the eMMC to contain those partitions concatenated in exactly that order. >> +However, the boot partitions as well as the RPMB might be absent if >> their sizes >> +are configured to zero. >> + >> +The eMMC specification defines alignment constraints for the >> partitions. The >> +two boot partitions must be of the same size. Furthermore, boot and RPMB >> +partitions must be multiples of 128 KB with a maximum of 32640 KB for >> each >> +boot partition and 16384K for the RPMB partition. >> + >> +The alignment constrain of the user data area depends on its size. Up >> to 2 >> +GByte, the size must be a power of 2. From 2 GByte onward, the size >> has to be >> +multiples of 512 byte. >> + >> +QEMU is enforcing those alignment rules before instantiating the device. >> +Therefore, the provided image has to strictly follow them as well. >> The helper >> +script `scripts/mkemmc.sh` can be used to create compliant images, >> with or > > the single backquote would interpret scripts/mkemmc.sh as a ref. I think > you want ``scripts/mkemmc.sh`` > >> +without pre-filled partitions. E.g., to create an eMMC image from a >> firmware >> +image and an OS image with an empty 2 MByte RPMB, use the following >> command: >> + >> +.. code-block:: console >> + >> + scripts/mkemmc.sh -b firmware.img -r /dev/zero:2MB os.img emmc.img >> + >> +This will take care of rounding up the partition sizes to the next >> valid value >> +and will leave the RPMB and the second boot partition empty (zeroed). >> + >> +Adding eMMC Devices >> +=================== >> + >> +An eMMC is either automatically created by a machine model (e.g. >> Aspeed boards) >> +or can be user-created when using a PCI-attached SDHCI controller. To >> +instantiate the eMMC image from the example above while assuming that >> the >> +firmware needs a boot partitions of 1 MB, use the following options: >> + >> +.. code-block:: console >> + >> + -drive file=emmc.img,if=none,format=raw,id=emmc-img >> + -device sdhci-pci >> + -device emmc,drive=emmc-img,boot-partition-size=1048576,rpmb- >> partition-size=2097152 > > I will see if I can adjust the existing aspeed test with your proposal. >
Thanks in advance! Yeah, the existing alignment rules were incorrect once you turned on boot partitions. So there is unfortunately no way around fixing images that followed them. Jan -- Siemens AG, Foundational Technologies Linux Expert Center