meta-digi-arm: add DEY firmware install U-Boot script

The install script allows for an easy deployment of the DEY firmware
artifacts into the eMMC of the ConnectCore 6 by using a micro SD card.
The install script:
	- updates U-Boot
	- resets the U-Boot environmnet to default values
	- formats the User Data partition of the eMMC
	- installs the firmware images (linux and rootfs partitions)
	- resets/starts the system

Signed-off-by: Hector Palacios <hector.palacios@digi.com>

https://jira.digi.com/browse/DEL-2192
This commit is contained in:
Hector Palacios 2016-02-12 09:31:15 +01:00
parent d59fab0cc9
commit e9481ecd19
2 changed files with 169 additions and 0 deletions

View File

@ -0,0 +1,164 @@
#
# 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
# Ask for user confirmation (to be enabled in the future when shipped U-Boot
# supports the 'askenv' command)
#askenv install_yn "Do you want to continue? (y/n):" 1
#if test "${install_yn}" != "y" && test "${install_yn}" != "Y"; then
# echo "Aborted.";
# exit;
#fi
# Determine U-Boot file to program basing on module variant
if test "${module_variant}" = "0x12"; then
setenv INSTALL_UBOOT_FILENAME u-boot-ccimx6qsbc2GB.imx;
elif test "${module_variant}" = "0x02" || test "${module_variant}" = "0x04" || test "${module_variant}" = "0x05" || test "${module_variant}" = "0x11"; then
setenv INSTALL_UBOOT_FILENAME u-boot-ccimx6qsbc.imx;
elif test "${module_variant}" = "0x03" || test "${module_variant}" = "0x0e" || test "${module_variant}" = "0x0f"; then
setenv INSTALL_UBOOT_FILENAME u-boot-ccimx6qsbc512MB.imx;
elif test "${module_variant}" = "0x0b"; then
setenv INSTALL_UBOOT_FILENAME u-boot-ccimx6dlsbc.imx;
elif test "${module_variant}" = "0x0c" || test "${module_variant}" = "0x13"; then
setenv INSTALL_UBOOT_FILENAME u-boot-ccimx6dlsbc512MB.imx;
else
if test -z "${INSTALL_UBOOT_FILENAME}"; then
echo "[ERROR] Cannot determine U-Boot file for this module!";
echo "";
echo "1. Set variable 'INSTALL_UBOOT_FILENAME' depending on your ConnectCore 6 variant:";
echo " - For a Quad/Dual CPU with 2GB DDR3, run:";
echo " => setenv INSTALL_UBOOT_FILENAME u-boot-ccimx6qsbc2GB.imx";
echo " - For a Quad/Dual CPU with 1GB DDR3, run:";
echo " => setenv INSTALL_UBOOT_FILENAME u-boot-ccimx6qsbc.imx";
echo " - For a Quad/Dual CPU with 512MB DDR3, run:";
echo " => setenv INSTALL_UBOOT_FILENAME u-boot-ccimx6qsbc512MB.imx";
echo " - For a DualLite/Solo CPU with 1GB DDR3, run:";
echo " => setenv INSTALL_UBOOT_FILENAME u-boot-ccimx6dlsbc.imx";
echo " - For a DualLite/Solo CPU with 512MB DDR3, run:";
echo " => setenv INSTALL_UBOOT_FILENAME u-boot-ccimx6dlsbc512MB.imx";
echo "";
echo "2. Run the install script again.";
echo "";
echo "Aborted";
exit;
fi;
fi
setenv INSTALL_LINUX_FILENAME dey-image-qt-##GRAPHICAL_BACKEND##-ccimx6sbc.boot.vfat
setenv INSTALL_ROOTFS_FILENAME dey-image-qt-##GRAPHICAL_BACKEND##-ccimx6sbc.ext4
# Check for presence of firmware files on the SD card
for install_f in $INSTALL_UBOOT_FILENAME $INSTALL_LINUX_FILENAME $INSTALL_ROOTFS_FILENAME; do
if test ! -e mmc 1:1 $install_f; then
echo "ERROR: Could not find file $install_f";
install_abort=1
fi;
done
if test "${install_abort}" = "1"; 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 1 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
# - Partition the eMMC user data area for Linux
# - Update the 'linux' partition
# - Update the 'rootfs' partition
# - Reset the system and let it boot
setenv bootcmd '
env default -a;
saveenv;
setenv mmcdev 0;
setenv INSTALL_LINUX_FILENAME dey-image-qt-##GRAPHICAL_BACKEND##-ccimx6sbc.boot.vfat
setenv INSTALL_ROOTFS_FILENAME dey-image-qt-##GRAPHICAL_BACKEND##-ccimx6sbc.ext4
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 1 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 Linux root file system";
echo "";
echo "";
update rootfs mmc 1 fat $INSTALL_ROOTFS_FILENAME;
if test $? -eq 1; then
echo "[ERROR] Failed to update rootfs partition!";
echo "";
echo "Aborted.";
exit;
fi;
echo "";
echo "#######################";
echo "# Install complete! #";
echo "#######################";
echo "";
sleep 1;
echo ">> Restarting the system";
sleep 1;
reset;
'
saveenv
reset

View File

@ -19,6 +19,7 @@ UBOOT_GIT_URI = "${@base_conditional('DIGI_INTERNAL_GIT', '1' , '${DIGI_GIT}u-bo
SRC_URI = " \ SRC_URI = " \
${UBOOT_GIT_URI};branch=${SRCBRANCH} \ ${UBOOT_GIT_URI};branch=${SRCBRANCH} \
file://boot.txt \ file://boot.txt \
file://install_linux_fw_sd.txt \
" "
LOCALVERSION ?= "" LOCALVERSION ?= ""
@ -48,6 +49,10 @@ do_deploy_append() {
unset i unset i
fi fi
# DEY firmware install script
sed -i -e 's,##GRAPHICAL_BACKEND##,${GRAPHICAL_BACKEND},g' ${WORKDIR}/install_linux_fw_sd.txt
mkimage -T script -n "DEY firmware install script" -C none -d ${WORKDIR}/install_linux_fw_sd.txt ${DEPLOYDIR}/install_linux_fw_sd.scr
# Boot script for DEY images # Boot script for DEY images
mkimage -T script -n bootscript -C none -d ${WORKDIR}/boot.txt ${DEPLOYDIR}/boot.scr mkimage -T script -n bootscript -C none -d ${WORKDIR}/boot.txt ${DEPLOYDIR}/boot.scr
} }