# # U-Boot script for installing Linux images created by Yocto from the SD # card into the eMMC # echo "############################################################" echo "# Linux firmware install from micro SD #" echo "############################################################" echo "" echo " This process will erase your eMMC and will install a new" echo " U-Boot and Linux firmware images on the eMMC." 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 # Determine U-Boot file to program basing on SOM's RAM size and SOC type (linked to bus width) ram_freq="1.2GHz" bus_width="32bit" if test -n "${module_ram}" && test -n "${soc_type}"; then if test "${soc_type}" == "dx"; then bus_width="16bit" fi setenv INSTALL_UBOOT_FILENAME imx-boot-ccimx8x-sbc-express-${ram_freq}_${module_ram}_${bus_width}.bin; else # Determine U-Boot file to program basing on SOM's variant if test -n "${module_variant}"; then if test "${module_variant}" = "0x01"; then setenv INSTALL_UBOOT_FILENAME imx-boot-ccimx8x-sbc-express-1.2GHz_1GB_32bit.bin; elif test "${module_variant}" = "0x02" || test "${module_variant}" = "0x03"; then setenv INSTALL_UBOOT_FILENAME imx-boot-ccimx8x-sbc-express-1.2GHz_2GB_32bit.bin; elif test "${module_variant}" = "0x04" || test "${module_variant}" = "0x05"; then setenv INSTALL_UBOOT_FILENAME imx-boot-ccimx8x-sbc-express-1.2GHz_1GB_16bit.bin; fi fi fi # Use 'test -n ...' because 'test -z ...' does not work well on old versions of # u-boot when the checked value is empty. if test -n "${INSTALL_UBOOT_FILENAME}"; then true; else echo ""; echo "[ERROR] Cannot determine U-Boot file for this module!"; echo ""; echo "1. Set variable 'INSTALL_UBOOT_FILENAME' depending on your ConnectCore 8X variant:"; echo " - For a QuadXPlus CPU with 1GB LPDDR4, run:"; echo " => setenv INSTALL_UBOOT_FILENAME imx-boot-ccimx8x-sbc-express-1.2GHz_1GB_32bit.bin"; echo " - For a QuadXPlus CPU with 2GB LPDDR4, run:"; echo " => setenv INSTALL_UBOOT_FILENAME imx-boot-ccimx8x-sbc-express-1.2GHz_2GB_32bit.bin"; echo " - For a DualX CPU with 1GB LPDDR4, run:"; echo " => setenv INSTALL_UBOOT_FILENAME imx-boot-ccimx8x-sbc-express-1.2GHz_1GB_16bit.bin"; echo ""; echo "2. Run the install script again."; echo ""; echo "Aborted"; echo ""; exit; fi; setenv INSTALL_MMCDEV 1 setenv INSTALL_LINUX_FILENAME dey-image-qt-##GRAPHICAL_BACKEND##-ccimx8x-sbc-express.boot.vfat setenv INSTALL_RECOVERY_FILENAME dey-image-qt-##GRAPHICAL_BACKEND##-ccimx8x-sbc-express.recovery.vfat setenv INSTALL_ROOTFS_FILENAME dey-image-qt-##GRAPHICAL_BACKEND##-ccimx8x-sbc-express.ext4 # Check for presence of firmware files on the SD card for install_f in ${INSTALL_UBOOT_FILENAME} ${INSTALL_LINUX_FILENAME} ${INSTALL_RECOVERY_FILENAME} ${INSTALL_ROOTFS_FILENAME}; do if test ! -e mmc ${INSTALL_MMCDEV} ${install_f}; then echo "ERROR: Could not find file ${install_f}"; install_abort=1; fi; done if test -n "${install_abort}"; then echo "Aborted."; 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 # Set target MMC device index to eMMC setenv mmcdev 0 # Update U-Boot echo "" echo "" echo ">> Installing U-Boot boot loader (target will reset)" echo "" echo "" update uboot mmc ${INSTALL_MMCDEV} fat ${INSTALL_UBOOT_FILENAME} if test $? -eq 1; then echo "[ERROR] Failed to update U-Boot boot loader!"; echo ""; echo "Aborted."; exit; fi # Set 'bootcmd' to the second part of the script that will # - Reset environment to defaults # - Save the environment # - Force on-the-fly updates to avoid possible verification errors # - Partition the eMMC user data area for Linux # - Update the 'linux' partition # - Update the 'recovery' partition # - Update the 'rootfs' partition # - Configure recovery to wipe 'update' partition # - Disable on-the-fly updates # - Run 'recovery' and let the system boot after setenv bootcmd " env default -a; saveenv; setenv otf-update yes; echo \"\"; echo \"\"; echo \">> Creating Linux partition table on the eMMC\"; echo \"\"; echo \"\"; run partition_mmc_linux; if test \$? -eq 1; then echo \"[ERROR] Failed to create Linux partition table!\"; echo \"\"; echo \"Aborted.\"; exit; fi; echo \"\"; echo \"\"; echo \">> Installing Linux kernel and device tree files\"; echo \"\"; echo \"\"; update linux mmc ${INSTALL_MMCDEV} fat ${INSTALL_LINUX_FILENAME}; if test \$? -eq 1; then echo \"[ERROR] Failed to update linux partition!\"; echo \"\"; echo \"Aborted.\"; exit; fi; echo \"\"; echo \"\"; echo \">> Installing recovery\"; echo \"\"; echo \"\"; update recovery mmc ${INSTALL_MMCDEV} fat ${INSTALL_RECOVERY_FILENAME}; if test \$? -eq 1; then echo \"[ERROR] Failed to update recovery partition!\"; echo \"\"; echo \"Aborted.\"; exit; fi; echo \"\"; echo \"\"; echo \">> Installing Linux root file system\"; echo \"\"; echo \"\"; update rootfs mmc ${INSTALL_MMCDEV} fat ${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; setenv otf-update; saveenv; echo \"\"; echo \"\"; echo \">> Firmware installation complete. Rebooting into recovery mode for final deployment.\"; echo \"\"; echo \"\"; sleep 1; reset; " saveenv reset