# # U-Boot script for installing Linux images created by Yocto from external media # into the NAND # # Reset temp variables install_abort=0 BASEFILENAME=0 setenv INSTALL_ATF_FILENAME tf-a-##MACHINE##-${module_ram}-##BOOTSCHEME_DEFAULT##-nand.stm32 setenv INSTALL_METADATA_FILENAME metadata-##MACHINE##.bin setenv INSTALL_FIP_FILENAME fip-##MACHINE##-${module_ram}-##BOOTSCHEME_DEFAULT##-nand.bin setenv INSTALL_MEDIA_INDEX ##INSTALL_MEDIA_INDEX## setenv INSTALL_MEDIA ##INSTALL_MEDIA## if test -z "${image-name}"; then setenv image-name ##DEFAULT_IMAGE_NAME## fi GRAPHICAL_IMAGES="##GRAPHICAL_IMAGES##" for g in ${GRAPHICAL_IMAGES}; do if test "${image-name}" = "${g}"; then BASEFILENAME="${image-name}-##GRAPHICAL_BACKEND##" fi done if test "${BASEFILENAME}" = "0"; then BASEFILENAME="${image-name}" fi setenv INSTALL_LINUX_FILENAME ${BASEFILENAME}-##MACHINE##.boot.ubifs setenv INSTALL_RECOVERY_FILENAME ${BASEFILENAME}-##MACHINE##.recovery.ubifs # Check for presence of firmware files on the USB FILES="${INSTALL_ATF_FILENAME} ${INSTALL_METADATA_FILENAME} ${INSTALL_FIP_FILENAME} ${INSTALL_LINUX_FILENAME}" if test "${dualboot}" != "yes"; then FILES="${FILES} ${INSTALL_RECOVERY_FILENAME}" fi for install_f in ${FILES}; do if test ! -e ${INSTALL_MEDIA} ${INSTALL_MEDIA_INDEX} ${install_f}; then echo "ERROR: Could not find file ${install_f}"; install_abort=1; fi; done # Verify what kind of rootfs is going to be programmed ROOTFS_FILENAME="${BASEFILENAME}-##MACHINE##.ubifs" ROOTFS_FILENAME_SQFS="${BASEFILENAME}-##MACHINE##.squashfs" if test -e ${INSTALL_MEDIA} ${INSTALL_MEDIA_INDEX} ${ROOTFS_FILENAME}; then setenv INSTALL_ROOTFS_FILENAME ${ROOTFS_FILENAME}; setenv rootfstype; elif test -e ${INSTALL_MEDIA} ${INSTALL_MEDIA_INDEX} ${ROOTFS_FILENAME_SQFS}; then setenv INSTALL_ROOTFS_FILENAME ${ROOTFS_FILENAME_SQFS}; setenv rootfstype squashfs; else echo "ERROR: Could not find any rootfs image"; install_abort=1; fi if test "${install_abort}" = "1"; then echo "To install a different image, set variable 'image-name', e.g.:" echo " => setenv image-name core-image-base" echo "Aborted."; exit; fi echo "############################################################" echo "# Linux firmware install from media #" echo "############################################################" echo "" echo " This process will erase your NAND and will install the following files" echo " on the partitions of the NAND." echo "" echo " PARTITION FILENAME" echo " --------- --------" echo " fsbl1 ${INSTALL_ATF_FILENAME}" echo " fsbl2 ${INSTALL_ATF_FILENAME}" echo " metadata1 ${INSTALL_METADATA_FILENAME}" echo " metadata2 ${INSTALL_METADATA_FILENAME}" echo " fip-a ${INSTALL_FIP_FILENAME}" echo " fip-b ${INSTALL_FIP_FILENAME}" if test "${dualboot}" = "yes"; then echo " linux_a ${INSTALL_LINUX_FILENAME}" if test "${install_dualboot}" = "yes"; then echo " linux_b ${INSTALL_LINUX_FILENAME}" fi echo " rootfs_a ${INSTALL_ROOTFS_FILENAME}" if test "${install_dualboot}" = "yes"; then echo " rootfs_b ${INSTALL_ROOTFS_FILENAME}" fi else echo " linux ${INSTALL_LINUX_FILENAME}" echo " recovery ${INSTALL_RECOVERY_FILENAME}" echo " rootfs ${INSTALL_ROOTFS_FILENAME}" fi echo "" echo " Press CTRL+C now if you wish to abort or wait 10 seconds" echo " to continue." sleep 10 if test $? -eq 1; then echo "Aborted by user."; exit; fi # Skip user confirmation for U-Boot update setenv forced_update 1 # Set bootdelay to zero so that firmware update is run immediately after # the first reset. setenv bootdelay 0 # Update ATF, METADATA and FIP images echo "" echo "" echo ">> Installing ATF boot loader image ${INSTALL_ATF_FILENAME}" echo "" echo "" update fsbl1 ${INSTALL_MEDIA} ${INSTALL_MEDIA_INDEX} ${INSTALL_ATF_FILENAME} if test $? -eq 1; then echo "[ERROR] Failed to update fsbl1!"; echo ""; echo "Aborted."; exit; fi update fsbl2 ${INSTALL_MEDIA} ${INSTALL_MEDIA_INDEX} ${INSTALL_ATF_FILENAME} if test $? -eq 1; then echo "[ERROR] Failed to update fsbl2!"; echo ""; echo "Aborted."; exit; fi echo "" echo "" echo ">> Installing METADATA boot loader image ${INSTALL_METADATA_FILENAME}" echo "" echo "" update metadata1 ${INSTALL_MEDIA} ${INSTALL_MEDIA_INDEX} ${INSTALL_METADATA_FILENAME} if test $? -eq 1; then echo "[ERROR] Failed to update metadata1!"; echo ""; echo "Aborted."; exit; fi update metadata2 ${INSTALL_MEDIA} ${INSTALL_MEDIA_INDEX} ${INSTALL_METADATA_FILENAME} if test $? -eq 1; then echo "[ERROR] Failed to update metadata2!"; echo ""; echo "Aborted."; exit; fi echo "" echo "" echo ">> Installing FIP boot loader image ${INSTALL_FIP_FILENAME} (target will reset)" echo "" echo "" update fip-a ${INSTALL_MEDIA} ${INSTALL_MEDIA_INDEX} ${INSTALL_FIP_FILENAME} if test $? -eq 1; then echo "[ERROR] Failed to update fip-a!"; echo ""; echo "Aborted."; exit; fi update fip-b ${INSTALL_MEDIA} ${INSTALL_MEDIA_INDEX} ${INSTALL_FIP_FILENAME} if test $? -eq 1; then echo "[ERROR] Failed to update fip-b!"; echo ""; echo "Aborted."; exit; fi # Check if uboot_config volume exists (U-Boot env) ubi part UBI ubi check uboot_config if test $? -eq 1; then # Create volumes layout (including U-Boot env) run ubivolscript; fi # Set 'bootcmd' to the second part of the script that will # - Reset environment to defaults # - Restore 'dualboot' if previously set # - Run 'ubivolscript' script to re-partition the UBI partition and save the # environment # - If Dual Boot # - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b # - Set bootlimit to 3 # - If Normal Boot: # - Update the system partitions: linux, recovery, rootfs # - Configure recovery to wipe 'update' partition # - Run 'recovery' and let the system boot after setenv bootcmd " env default -a; setenv dualboot ${dualboot}; setenv rootfstype ${rootfstype}; setenv install_dualboot ${install_dualboot}; run ubivolscript; if test \"\$\{INSTALL_MEDIA\}\" = "usb"; then usb start; fi; if test \"\$\{dualboot\}\" = yes; then echo \"\"; echo \"\"; echo \">> Installing file ${INSTALL_LINUX_FILENAME} on linux_a\"; echo \"\"; echo \"\"; update linux_a ${INSTALL_MEDIA} ${INSTALL_MEDIA_INDEX} ${INSTALL_LINUX_FILENAME}; if test \$? -eq 1; then echo \"[ERROR] Failed to update linux_a!\"; echo \"\"; echo \"Aborted.\"; exit; fi; if test \"\$\{install_dualboot\}\" = yes; then echo \"\"; echo \"\"; echo \">> Installing file ${INSTALL_LINUX_FILENAME} on linux_b\"; echo \"\"; echo \"\"; update linux_b ${INSTALL_MEDIA} ${INSTALL_MEDIA_INDEX} ${INSTALL_LINUX_FILENAME}; if test \$? -eq 1; then echo \"[ERROR] Failed to update linux_b!\"; echo \"\"; echo \"Aborted.\"; exit; fi; fi; if test \"\$\{INSTALL_MEDIA\}\" = "usb"; then usb reset; fi; echo \"\"; echo \"\"; echo \">> Installing file ${INSTALL_ROOTFS_FILENAME} on rootfs_a\"; echo \"\"; echo \"\"; update rootfs_a ${INSTALL_MEDIA} ${INSTALL_MEDIA_INDEX} ${INSTALL_ROOTFS_FILENAME}; if test \$? -eq 1; then echo \"[ERROR] Failed to update rootfs_a partition!\"; echo \"\"; echo \"Aborted.\"; exit; fi; if test \"\$\{install_dualboot\}\" = yes; then echo \"\"; echo \"\"; echo \">> Installing file ${INSTALL_ROOTFS_FILENAME} on rootfs_b\"; echo \"\"; echo \"\"; update rootfs_b ${INSTALL_MEDIA} ${INSTALL_MEDIA_INDEX} ${INSTALL_ROOTFS_FILENAME}; if test \$? -eq 1; then echo \"[ERROR] Failed to update rootfs_b partition!\"; echo \"\"; echo \"Aborted.\"; exit; fi; fi; setenv bootlimit 3; else echo \"\"; echo \"\"; echo \">> Installing file ${INSTALL_LINUX_FILENAME} on linux\"; echo \"\"; echo \"\"; update linux ${INSTALL_MEDIA} ${INSTALL_MEDIA_INDEX} ${INSTALL_LINUX_FILENAME}; if test \$? -eq 1; then echo \"[ERROR] Failed to update linux!\"; echo \"\"; echo \"Aborted.\"; exit; fi; echo \"\"; echo \"\"; echo \">> Installing file ${INSTALL_RECOVERY_FILENAME} on recovery\"; echo \"\"; echo \"\"; update recovery ${INSTALL_MEDIA} ${INSTALL_MEDIA_INDEX} ${INSTALL_RECOVERY_FILENAME}; if test \$? -eq 1; then echo \"[ERROR] Failed to update recovery partition!\"; echo \"\"; echo \"Aborted.\"; exit; fi; echo \"\"; echo \"\"; echo \">> Installing file ${INSTALL_ROOTFS_FILENAME} on rootfs\"; echo \"\"; echo \"\"; update rootfs ${INSTALL_MEDIA} ${INSTALL_MEDIA_INDEX} ${INSTALL_ROOTFS_FILENAME}; if test \$? -eq 1; then echo \"[ERROR] Failed to update rootfs partition!\"; echo \"\"; echo \"Aborted.\"; exit; fi; echo \"\"; setenv boot_recovery yes; setenv recovery_command wipe_update; fi; saveenv; echo \"\"; echo \"\"; echo \">> Firmware installation complete.\"; if test \"\$\{dualboot\}\" != yes; then echo \"Rebooting into recovery mode for final deployment.\"; fi; echo \"\"; echo \"\"; sleep 1; bootcount reset; reset; " bootcount reset saveenv reset