Template:ArticleApprovedVersion
This page explains how to manually update the U-Boot binaries on an SD Card.
1. Copying a binary to an SD card with the Linux dd command[edit source]
When you have access to the device (with the card reader of a PC, or the UMS command on a target), the 3 first partitions on the SDCard are:
- FSBL1
- FSBL2
- SSBL
See Boot_chains_overview, for the bootloader definitions.
You can use the Linux dd command to copy the FSBL and SSBL directly to the correct partition:
dd if=<file> of=/dev/<dev> conv=fdatasync
<dev> is:
- mmcblk<X>p<n> : PC-embedded card reader case
- sd<X><N> : USB-connected SD card reader case
where <X> is the ID of the device, and <n> the ID of the partition.
Note: the dd option conv=fdatasync is used to force synchronous copying.
2. Trusted boot chain update example[edit source]
The internal card reader is /dev/mmcblk0, partition <n> is /dev/mmcblk0p<n>:
dd if=tf-a.stm32 of=/dev/mmcblk0p1 conv=fdatasync dd if=tf-a.stm32 of=/dev/mmcblk0p2 conv=fdatasync dd if=u-boot.stm32 of=/dev/mmcblk0p3 conv=fdatasync
3. Basic boot chain udpate example[edit source]
The USB card reader is /dev/sdb, partition <n> is /dev/sdb<n>
dd if=u-boot-spl.stm32 of=/dev/sdb1 conv=fdatasync dd if=u-boot-spl.stm32 of=/dev/sdb2 conv=fdatasync dd if=u-boot.img of=/dev/sdb3 conv=fdatasync
4. update of eMMC[edit source]
The same command dd can be used to update eMMC with UMS command, but the SSBL = TF-A (or SPL) can't be saved directly in the cached boot partitions and the index of other partitions need to be adapted.
For user area , we are using GPT parttionning; SSBL is the first user partition in eMMC memory mapping :
> ums 0 mmc 1 dd if=u-boot.stm32 of=/dev/sdb1 conv=fdatasync
For boot partition, the user needs to select the hardware partition with mmc partconf;
for example; to select boot partition, copy and come back to the user area, we have:
> mmc dev 1 > mmc partconf 1 1 1 1 > ums 0 mmc 1 dd if=tf-a.stm32 of=/dev/mmcblk0p1 conv=fdatasync > mmc partconf 1 1 1 0