From 10c7f1c840a2434e65ac7e2545c6d83b3fa4e4ab Mon Sep 17 00:00:00 2001 From: Alex Gonzalez Date: Fri, 26 Oct 2012 16:20:53 +0200 Subject: [PATCH] meta-digi-arm: Add recipes-bsp/u-boot Also add the image_types_digi class. Signed-off-by: Alex Gonzalez --- .../classes/image_types_digi.bbclass | 199 ++++++++++++++++++ .../recipes-bsp/u-boot/u-boot-digi_2009.08.bb | 48 +++++ 2 files changed, 247 insertions(+) create mode 100644 meta-digi-arm/classes/image_types_digi.bbclass create mode 100644 meta-digi-arm/recipes-bsp/u-boot/u-boot-digi_2009.08.bb diff --git a/meta-digi-arm/classes/image_types_digi.bbclass b/meta-digi-arm/classes/image_types_digi.bbclass new file mode 100644 index 000000000..1b58df849 --- /dev/null +++ b/meta-digi-arm/classes/image_types_digi.bbclass @@ -0,0 +1,199 @@ +inherit image_types + +IMAGE_BOOTLOADER ?= "u-boot" + +# Handle u-boot suffixes +UBOOT_SUFFIX ?= "bin" +UBOOT_PADDING ?= "0" +UBOOT_SUFFIX_SDCARD ?= "${UBOOT_SUFFIX}" + +# +# Handles i.MX mxs bootstream generation +# + +# IMX Bootlets Linux bootstream +IMAGE_DEPENDS_linux.sb = "elftosb-native imx-bootlets virtual/kernel" +IMAGE_LINK_NAME_linux.sb = "" +IMAGE_CMD_linux.sb () { + kernel_bin="`readlink ${KERNEL_IMAGETYPE}-${MACHINE}.bin`" + kernel_dtb="`readlink ${KERNEL_IMAGETYPE}-${MACHINE}.dtb || true`" + linux_bd_file=imx-bootlets-linux.bd-${MACHINE} + if [ `basename $kernel_bin .bin` = `basename $kernel_dtb .dtb` ]; then + # When using device tree we build a zImage with the dtb + # appended on the end of the image + linux_bd_file=imx-bootlets-linux.bd-dtb-${MACHINE} + cat $kernel_bin $kernel_dtb \ + > $kernel_bin-dtb + rm -f ${KERNEL_IMAGETYPE}-${MACHINE}.bin-dtb + ln -s $kernel_bin-dtb ${KERNEL_IMAGETYPE}-${MACHINE}.bin-dtb + fi + + # Ensure the file is generated + rm -f ${IMAGE_NAME}.linux.sb + elftosb -z -c $linux_bd_file -o ${IMAGE_NAME}.linux.sb + + # Remove the appended file as it is only used here + rm -f $kernel_bin-dtb +} + + +# U-Boot mxsboot generation to SD-Card +UBOOT_SUFFIX_SDCARD_mxs ?= "mxsboot-sdcard" +IMAGE_DEPENDS_uboot.mxsboot-sdcard = "u-boot-mxsboot-native u-boot" +IMAGE_CMD_uboot.mxsboot-sdcard = "mxsboot sd ${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.${UBOOT_SUFFIX} \ + ${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.${UBOOT_SUFFIX_SDCARD}" + +# Default to 3.4GiB images +SDCARD_SIZE ?= "3400" + +# Boot partition volume id +BOOTDD_VOLUME_ID ?= "Boot ${MACHINE}" + +# Addional space for boot partition +BOOT_SPACE ?= "5MiB" + +IMAGE_DEPENDS_sdcard = "parted-native dosfstools-native mtools-native \ + virtual/kernel ${IMAGE_BOOTLOADER}" + +SDCARD = "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.sdcard" + +SDCARD_GENERATION_COMMAND_mxs = "generate_mxs_sdcard" +SDCARD_GENERATION_COMMAND_mx5 = "generate_imx_sdcard" +SDCARD_GENERATION_COMMAND_mx6 = "generate_imx_sdcard" + +# +# Create an image that can by written onto a SD card using dd for use +# with i.MX SoC family +# +# External variables needed: +# ${SDCARD_ROOTFS} - the rootfs image to incorporate +# ${IMAGE_BOOTLOADER} - bootloader to use {u-boot, barebox} +# +# The disk layout used is: +# +# 0 - 1M - reserved to bootloader (not partitioned) +# 1M - BOOT_SPACE - kernel +# BOOT_SPACE - SDCARD_SIZE - rootfs +# +generate_imx_sdcard () { + # Create partition table + parted -s ${SDCARD} mklabel msdos + parted -s ${SDCARD} mkpart primary 1MiB ${BOOT_SPACE} + parted -s ${SDCARD} mkpart primary ${BOOT_SPACE} 100% + parted ${SDCARD} print + + case "${IMAGE_BOOTLOADER}" in + imx-bootlets) + bberror "The imx-bootlets is not supported for i.MX based machines" + exit 1 + ;; + u-boot) + dd if=${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.${UBOOT_SUFFIX_SDCARD} of=${SDCARD} conv=notrunc seek=2 skip=${UBOOT_PADDING} bs=512 + ;; + barebox) + dd if=${DEPLOY_DIR_IMAGE}/barebox-${MACHINE}.bin of=${SDCARD} conv=notrunc seek=1 skip=1 bs=512 + dd if=${DEPLOY_DIR_IMAGE}/bareboxenv-${MACHINE}.bin of=${SDCARD} conv=notrunc seek=1 bs=512k + ;; + *) + bberror "Unkown IMAGE_BOOTLOADER value" + exit 1 + ;; + esac + + BOOT_BLOCKS=$(LC_ALL=C parted -s ${SDCARD} unit b print \ + | awk '/ 1 / { print substr($4, 1, length($4 -1)) / 1024 }') + mkfs.vfat -n "${BOOTDD_VOLUME_ID}" -S 512 -C ${WORKDIR}/boot.img $BOOT_BLOCKS + mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/uImage-${MACHINE}.bin ::/uImage + if [ -e "${KERNEL_IMAGETYPE}-${MACHINE}.dtb" ]; then + kernel_bin="`readlink ${KERNEL_IMAGETYPE}-${MACHINE}.bin`" + kernel_dtb="`readlink ${KERNEL_IMAGETYPE}-${MACHINE}.dtb`" + if [ `basename $kernel_bin .bin` = `basename $kernel_dtb .dtb` ]; then + mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.dtb ::/machine.dtb + fi + fi + + dd if=${WORKDIR}/boot.img of=${SDCARD} conv=notrunc seek=1 bs=1M + dd if=${SDCARD_ROOTFS} of=${SDCARD} conv=notrunc seek=1 bs=${BOOT_SPACE} +} + +# +# Create an image that can by written onto a SD card using dd for use +# with i.MXS SoC family +# +# External variables needed: +# ${SDCARD_ROOTFS} - the rootfs image to incorporate +# ${IMAGE_BOOTLOADER} - bootloader to use {imx-bootlets, u-boot} +# +generate_mxs_sdcard () { + # Create partition table + parted -s ${SDCARD} mklabel msdos + + case "${IMAGE_BOOTLOADER}" in + imx-bootlets) + # The disk layout used is: + # + # 1M - BOOT_SPACE - kernel + # BOOT_SPACE - SDCARD_SIZE - rootfs + # + parted -s ${SDCARD} mkpart primary 1MiB ${BOOT_SPACE} + parted -s ${SDCARD} mkpart primary ${BOOT_SPACE} 100% + + # Empty 4 bytes from boot partition + dd if=/dev/zero of=${SDCARD} conv=notrunc seek=2048 count=4 + + # Write the bootstream in (2048 + 4) bytes + dd if=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.linux.sb of=${SDCARD} conv=notrunc seek=1 seek=2052 + ;; + u-boot) + # The disk layout used is: + # + # 1M - 2M - reserved to bootloader and other data + # 2M - BOOT_SPACE - kernel + # BOOT_SPACE - SDCARD_SIZE - rootfs + # + parted -s ${SDCARD} mkpart primary 1MiB 2MiB + parted -s ${SDCARD} mkpart primary 2MiB ${BOOT_SPACE} + parted -s ${SDCARD} mkpart primary ${BOOT_SPACE} 100% + + dd if=${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.${UBOOT_SUFFIX_SDCARD} of=${SDCARD} conv=notrunc seek=1 skip=${UBOOT_PADDING} bs=1MiB + BOOT_BLOCKS=$(LC_ALL=C parted -s ${SDCARD} unit b print \ + | awk '/ 2 / { print substr($4, 1, length($4 -1)) / 1024 }') + + mkfs.vfat -n "${BOOTDD_VOLUME_ID}" -S 512 -C ${WORKDIR}/boot.img $BOOT_BLOCKS + mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/uImage-${MACHINE}.bin ::/uImage + if [ -e "${KERNEL_IMAGETYPE}-${MACHINE}.dtb" ]; then + kernel_bin="`readlink ${KERNEL_IMAGETYPE}-${MACHINE}.bin`" + kernel_dtb="`readlink ${KERNEL_IMAGETYPE}-${MACHINE}.dtb`" + if [ `basename $kernel_bin .bin` = `basename $kernel_dtb .dtb` ]; then + mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.dtb ::/machine.dtb + fi + fi + + dd if=${WORKDIR}/boot.img of=${SDCARD} conv=notrunc seek=2 bs=1MiB + ;; + *) + bberror "Unkown IMAGE_BOOTLOADER value" + exit 1 + ;; + esac + + # Change partition type for mxs processor family + bbnote "Setting partition type to 0x53 as required for mxs' SoC family." + echo -n S | dd of=${SDCARD} bs=1 count=1 seek=450 conv=notrunc + + parted ${SDCARD} print + + dd if=${SDCARD_ROOTFS} of=${SDCARD} conv=notrunc seek=1 bs=${BOOT_SPACE} +} + +IMAGE_CMD_sdcard () { + if [ -z "${SDCARD_ROOTFS}" ]; then + bberror "SDCARD_ROOTFS is undefined. To use sdcard image from Freescale's BSP it needs to be defined." + exit 1 + fi + + # Initialize a sparse file + dd if=/dev/zero of=${SDCARD} bs=1 count=0 seek=$(expr 1000 \* 1000 \* ${SDCARD_SIZE}) + + ${SDCARD_GENERATION_COMMAND} +} diff --git a/meta-digi-arm/recipes-bsp/u-boot/u-boot-digi_2009.08.bb b/meta-digi-arm/recipes-bsp/u-boot/u-boot-digi_2009.08.bb new file mode 100644 index 000000000..4a9a30b4e --- /dev/null +++ b/meta-digi-arm/recipes-bsp/u-boot/u-boot-digi_2009.08.bb @@ -0,0 +1,48 @@ +# Copyright (C) 2011 Freescale Semiconductor +# Copyright (C) 2012 Digi International +# Released under the MIT license (see COPYING.MIT for the terms) + +DESCRIPTION = "bootloader for Digi platforms" +require recipes-bsp/u-boot/u-boot.inc + +PROVIDES += "u-boot-digi" + +LICENSE = "GPLv2+" +LIC_FILES_CHKSUM = "file://COPYING;md5=4c6cde5df68eff615d36789dc18edd3b" + +DEPENDS_mxs += "elftosb-native" + +PR = "r8" + +# Revision for MX28 based platforms. +SRCREV_mxs = "DUB-4.1.2" + +# Revision for MX51 and MX53 platforms +# [DIGI] This is currently the agonzal/yocto branch +# [DIGI] until DIGI-UBOOT-93 is fixed. +SRCREV_mx5 = "f684e0259c4a9f63476a3694d9f0f5a6d21b1943" + +SRC_URI = "git://log-sln-cvs.digi.com/data/vcs/git/u-boot-denx.git" + +UBOOT_MACHINE_ccxmx53js = "ccxmx53js_config" +UBOOT_MACHINE_ccxmx51js = "ccxmx51js_config" +UBOOT_MACHINE_ccardxmx28js = "ccardxmx28js_config" + +UBOOT_MAKE_TARGET = "u-boot.bin" +UBOOT_SUFFIX = "bin" +UBOOT_PADDING = "2" + +S = "${WORKDIR}/git" +EXTRA_OEMAKE += 'HOSTSTRIP=true' + +PACKAGE_ARCH = "${MACHINE_ARCH}" + +# [DIGI] GNU gold linker is an alternative to GNU linker. +do_compile_prepend() { + if [ "${@base_contains('DISTRO_FEATURES', 'ld-is-gold', 'ld-is-gold', '', d)}" = "ld-is-gold" ] ; then + sed -i 's/$(CROSS_COMPILE)ld/$(CROSS_COMPILE)ld.bfd/g' config.mk + fi +} + +COMPATIBLE_MACHINE = "(mxs|mx5)" +