From: Drew Moseley <drew.mose...@mender.io> Add a U-Boot script to handle flashing the SPL, U-Boot and UBI root filesystem images into the onboard flash. Also generate a script showing how to execute the flash steps.
Signed-off-by: Drew Moseley <drew.mose...@mender.io> --- README | 26 ++++++++- recipes-bsp/chip-u-boot-scr/chip-u-boot-scr.bb | 70 +++++++++++++++++++++++++ recipes-bsp/chip-u-boot-scr/files/boot.cmd.full | 32 +++++++++++ recipes-bsp/chip-u-boot-scr/files/boot.cmd.in | 43 +++++++++++++++ recipes-bsp/u-boot/u-boot-chip_git.bb | 1 + 5 files changed, 171 insertions(+), 1 deletion(-) create mode 100644 recipes-bsp/chip-u-boot-scr/chip-u-boot-scr.bb create mode 100644 recipes-bsp/chip-u-boot-scr/files/boot.cmd.full create mode 100644 recipes-bsp/chip-u-boot-scr/files/boot.cmd.in diff --git a/README b/README index cccf59e..cf52e05 100644 --- a/README +++ b/README @@ -59,4 +59,28 @@ To build a machine supported by this BSP layer follow the next steps: II. Flashing a C.H.I.P. board ======================================== -<TODO> +As part of the build including this BSP layer, a U-Boot script and a shell script +are created to assist in flashing your images to the CHIP board. Note that this +script assumes a maximum size for your UBI image of 0x0A000000 bytes. If your UBI +image exceeds that, then you will need to adapt this to your environment. + +To successfully run this script you will first need to set your board into FEL mode. +chip. https://docs.getchip.com/chip.html#flash-chip-with-an-os +Insert a wire into the U14 header between pin 7 (FEL) and GND. Then connect the +board with a USB cable to your build system. + +You need to specify the base filename of your UBI image using the UBI_IMAGE shell +variable before invoking the generated script as follows: + +$ UBI_IMAGE=core-image-full-cmdline-chip.ubi ./tmp/deploy/images/chip/flash_CHIP_board.sh + +This script will take some time to execute. If you have a serial console connected to +your board, you will see the progress and a message on the console will indicate when +the flashing is completed. Additionally, once the image is properly flashed, the status +LED on the CHIP board will flash 30 times per second indicating that it is safe to power +down your board and disable FEL mode. + +WARNING: This will erase the entire contents of your CHIP board. + +NOTE: This setup is still compatible with the CHIP flashing utility available +at http://flash.getchip.com if you choose to reinstall the stock images. diff --git a/recipes-bsp/chip-u-boot-scr/chip-u-boot-scr.bb b/recipes-bsp/chip-u-boot-scr/chip-u-boot-scr.bb new file mode 100644 index 0000000..726fca3 --- /dev/null +++ b/recipes-bsp/chip-u-boot-scr/chip-u-boot-scr.bb @@ -0,0 +1,70 @@ +SUMMARY = "U-boot boot scripts for CHIP boards" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" +COMPATIBLE_MACHINE = "chip" + +inherit deploy + +DEPENDS = "u-boot-mkimage-native" + +SRC_URI = "file://boot.cmd.in" + +NAND_FLASH_START_ADDR = "0x00000000" +SPL_MEMIMG_ADDR = "0x44000000" +UBOOT_MEMIMG_ADDR = "0x4a000000" +SPL_FLASH_UPPER_ADDR = "0x400000" +LED_I2C_CHIP = "0x34" +LED_I2C_ADDR = "0x93" +UBOOT_FLASH_ADDR = "0x800000" +UBI_MEMIMG_ADDR = "0x4b000000" +UBI_FLASH_ADDR = "0x1000000" +PAGE_SIZE = "16384" +OOB_SIZE = "1664" +SCRIPTADDR = "0x43100000" + +do_compile[depends] += "u-boot-chip:do_deploy" +do_compile() { + PADDED_SPL_SIZE_BLOCKS=$(stat --dereference --printf="%s" "${DEPLOY_DIR_IMAGE}/${SPL_ECC_BINARY}") + PADDED_SPL_SIZE_BLOCKS=$(expr $PADDED_SPL_SIZE_BLOCKS / \( ${PAGE_SIZE} + ${OOB_SIZE} \)) + PADDED_SPL_SIZE_BLOCKS=$(echo $PADDED_SPL_SIZE_BLOCKS | xargs printf "0x%08x") + PADDED_UBOOT_SIZE=$(stat --dereference --printf="%s" "${DEPLOY_DIR_IMAGE}/${UBOOT_BINARY}" | xargs printf "0x%08x") + UBI_SIZE="0x0A000000" + + sed -e "s,@NAND_FLASH_START_ADDR@,${NAND_FLASH_START_ADDR},g" \ + -e "s,@SPL_MEMIMG_ADDR@,${SPL_MEMIMG_ADDR},g" \ + -e "s,@UBOOT_MEMIMG_ADDR@,${UBOOT_MEMIMG_ADDR},g" \ + -e "s,@SPL_FLASH_UPPER_ADDR@,${SPL_FLASH_UPPER_ADDR},g" \ + -e "s,@LED_I2C_CHIP@,${LED_I2C_CHIP},g" \ + -e "s,@LED_I2C_ADDR@,${LED_I2C_ADDR},g" \ + -e "s,@PADDED_SPL_SIZE_BLOCKS@,${PADDED_SPL_SIZE_BLOCKS},g" \ + -e "s,@PADDED_UBOOT_SIZE@,${PADDED_UBOOT_SIZE},g" \ + -e "s,@UBOOT_FLASH_ADDR@,${UBOOT_FLASH_ADDR},g" \ + -e "s,@UBI_FLASH_ADDR@,${UBI_FLASH_ADDR},g" \ + -e "s,@UBI_MEMIMG_ADDR@,${UBI_MEMIMG_ADDR},g" \ + -e "s,@UBI_SIZE@,${UBI_SIZE},g" \ + < "${WORKDIR}/boot.cmd.in" > "${WORKDIR}/boot.cmd" + mkimage -A arm -T script -C none -n "Boot script" -d "${WORKDIR}/boot.cmd" "${WORKDIR}/boot.scr" +} + +do_deploy() { + install -d ${DEPLOYDIR} + install -m 0644 ${WORKDIR}/boot.scr ${DEPLOYDIR}/boot.scr-${PV}-${PR} + ln -sf boot.scr-${PV}-${PR} ${DEPLOYDIR}/boot.scr + + cat > ${DEPLOYDIR}/flash_CHIP_board.sh-${PV}-${PR} <<-EOF + #!/bin/sh + # + + ${COMPONENTS_DIR}/x86_64/sunxi-tools-native/usr/bin/sunxi-fel spl ${DEPLOY_DIR_IMAGE}/${SPL_BINARY} + ${COMPONENTS_DIR}/x86_64/sunxi-tools-native/usr/bin/sunxi-fel --progress write ${SPL_MEMIMG_ADDR} ${DEPLOY_DIR_IMAGE}/${SPL_ECC_BINARY} + ${COMPONENTS_DIR}/x86_64/sunxi-tools-native/usr/bin/sunxi-fel --progress write ${UBOOT_MEMIMG_ADDR} ${DEPLOY_DIR_IMAGE}/${UBOOT_BINARY} + ${COMPONENTS_DIR}/x86_64/sunxi-tools-native/usr/bin/sunxi-fel --progress write ${SCRIPTADDR} ${DEPLOY_DIR_IMAGE}/boot.scr + ${COMPONENTS_DIR}/x86_64/sunxi-tools-native/usr/bin/sunxi-fel --progress write ${UBI_MEMIMG_ADDR} ${DEPLOY_DIR_IMAGE}/\${UBI_IMAGE} + ${COMPONENTS_DIR}/x86_64/sunxi-tools-native/usr/bin/sunxi-fel exe ${UBOOT_MEMIMG_ADDR} + EOF + chmod +x ${DEPLOYDIR}/flash_CHIP_board.sh-${PV}-${PR} + + ln -sf flash_CHIP_board.sh-${PV}-${PR} ${DEPLOYDIR}/flash_CHIP_board.sh +} + +addtask do_deploy after do_compile before do_build diff --git a/recipes-bsp/chip-u-boot-scr/files/boot.cmd.full b/recipes-bsp/chip-u-boot-scr/files/boot.cmd.full new file mode 100644 index 0000000..9589c87 --- /dev/null +++ b/recipes-bsp/chip-u-boot-scr/files/boot.cmd.full @@ -0,0 +1,32 @@ +echo Scrubbing NAND +nand scrub -y 0x0 0x200000000 +echo Writing SPL (with ECC) to NAND address 0x0 +nand write.raw.noverify $SPL_MEM_ADDR 0x0 $PADDED_SPL_SIZE +echo Writing SPL (with ECC) to NAND address 0x400000 +nand write.raw.noverify $SPL_MEM_ADDR 0x400000 $PADDED_SPL_SIZE +echo Writing UBoot image to address 0x800000 +nand write $UBOOT_MEM_ADDR 0x800000 $PADDED_UBOOT_SIZE + +# Setup the default environment +setenv bootargs root=ubi0:rootfs rootfstype=ubifs rw earlyprintk ubi.mtd=4 +setenv bootcmd 'mtdparts; ubi part UBI; ubifsmount ubi0:rootfs; ubifsload \$fdt_addr_r /boot/sun5i-r8-chip.dtb; ubifsload \$kernel_addr_r /boot/zImage; bootz \$kernel_addr_r - \$fdt_addr_r' +setenv fel_booted 0 + +echo Enabling Splash +setenv stdout serial +setenv stderr serial +setenv splashpos m,m + +echo Setting Video Mode +setenv video-mode sunxi:640x480-24@60,monitor=composite-ntsc,overscan_x=40,overscan_y=20 + +echo Saving default environment +saveenv + +echo Writing UBI rootfs to NAND address 0x1000000 +nand write.slc-mode.trimffs $UBI_MEM_ADDR 0x1000000 $UBI_SIZE + +echo =========================================================== +echo Flashing Complete. Please power down and disable FEL mode. +echo =========================================================== + diff --git a/recipes-bsp/chip-u-boot-scr/files/boot.cmd.in b/recipes-bsp/chip-u-boot-scr/files/boot.cmd.in new file mode 100644 index 0000000..dc060be --- /dev/null +++ b/recipes-bsp/chip-u-boot-scr/files/boot.cmd.in @@ -0,0 +1,43 @@ +echo Erasing NAND +nand erase.chip +echo Writing SPL (with ECC) to NAND address @NAND_FLASH_START_ADDR@ +nand write.raw.noverify @SPL_MEMIMG_ADDR@ @NAND_FLASH_START_ADDR@ @PADDED_SPL_SIZE_BLOCKS@ +echo Writing SPL (with ECC) to NAND address @SPL_FLASH_UPPER_ADDR@ +nand write.raw.noverify @SPL_MEMIMG_ADDR@ @SPL_FLASH_UPPER_ADDR@ @PADDED_SPL_SIZE_BLOCKS@ +echo Writing UBoot image to address 0x800000 +nand write @UBOOT_MEMIMG_ADDR@ @UBOOT_FLASH_ADDR@ @PADDED_UBOOT_SIZE@ + +# Setup the default environment +setenv bootargs root=ubi0:rootfs rootfstype=ubifs rw earlyprintk ubi.mtd=4 +setenv bootcmd_ubi 'mtdparts; ubi part UBI; ubifsmount ubi0:rootfs; ubifsload \$fdt_addr_r /boot/sun5i-r8-chip.dtb; ubifsload \$kernel_addr_r /boot/zImage; bootz \$kernel_addr_r - \$fdt_addr_r' +setenv boot_targets fel ubi usb0 pxe dhcp +setenv fel_booted 0 + +echo Enabling Splash +setenv stdout serial +setenv stderr serial +setenv splashpos m,m + +echo Setting Video Mode +setenv video-mode sunxi:640x480-24@60,monitor=composite-ntsc,overscan_x=40,overscan_y=20 + +echo Saving default environment +saveenv + +echo Writing UBI rootfs to NAND address 0x1000000 +nand write.slc-mode.trimffs @UBI_MEMIMG_ADDR@ @UBI_FLASH_ADDR@ @UBI_SIZE@ + + +echo =========================================================== +echo Flashing Complete. Please power down and disable FEL mode. +echo =========================================================== + +# Loop continually flashing the status LED +while true ; do + mw.l @SPL_MEMIMG_ADDR@ 0x00000000 1 + i2c write @SPL_MEMIMG_ADDR@ @LED_I2C_CHIP@ @LED_I2C_ADDR@ 4 + sleep 1 + mw.l @SPL_MEMIMG_ADDR@ 0xffffffff 1 + i2c write @SPL_MEMIMG_ADDR@ @LED_I2C_CHIP@ @LED_I2C_ADDR@ 4 + sleep 1 +done diff --git a/recipes-bsp/u-boot/u-boot-chip_git.bb b/recipes-bsp/u-boot/u-boot-chip_git.bb index f12fae6..008f346 100644 --- a/recipes-bsp/u-boot/u-boot-chip_git.bb +++ b/recipes-bsp/u-boot/u-boot-chip_git.bb @@ -6,6 +6,7 @@ LIC_FILES_CHKSUM = "file://Licenses/README;md5=0507cd7da8e7ad6d6701926ec9b84c95" DEPENDS += "dtc-native" PROVIDES += "u-boot" +RDEPENDS_${PN}_append_chip = " chip-u-boot-scr" UBOOT_VERSION ?= "2016.01" PV = "${UBOOT_VERSION}+git${SRCPV}" -- 2.7.4 -- _______________________________________________ yocto mailing list yocto@yoctoproject.org https://lists.yoctoproject.org/listinfo/yocto