Okay, thanks for the review!! I'll create a v3 and post it next week. I'm away and don't have a board with me to test.
On Sun, Feb 19, 2017 at 7:18 AM, Eddie Cai <eddie.cai.li...@gmail.com> wrote: > Hi > > 2017-02-19 16:31 GMT+08:00 Jacob Chen <jacob2.c...@rock-chips.com>: >> >> Hi all, >> >> >> Eddie Cai wrote on 2017年02月19日 14:32: >> >> Hi Trevor >> >> 2017-02-19 10:43 GMT+08:00 Trevor Woerner <twoer...@gmail.com>: >> > This bbclass was taken from the Rockchip team's work at >> > >> > https://github.com/rockchip-linux/meta-rockchip/commit/53d2e2e474a3014e3013d0059fd1da773fb0e2b7 >> > It was mostly written by Jacob Chen <jacob-c...@iotwrt.com>. I've made >> > some >> > small modifications and added it. >> > >> > Older images used (what Rockchip calls) the "rk-boot" format. Newer >> > images use >> We call it legacy parameter format >> > u-boot and a GPT partitioning scheme. This class allows the build to >> > generate >> > a gpt-img file that can either be flashed to eMMC or written to an >> > SDcard (the >> > same image is used for both). >> gpt-img is much better than previous one. I like this name. >> > >> > This is the new image format used for rk3288 SoCs (e.g. the Firefly >> > board). >> > >> > Signed-off-by: Trevor Woerner <twoer...@gmail.com> >> > --- >> > classes/rockchip-gpt-img.bbclass | 132 >> > +++++++++++++++++++++++++++++++++++++++ >> > 1 file changed, 132 insertions(+) >> > create mode 100644 classes/rockchip-gpt-img.bbclass >> > >> > diff --git a/classes/rockchip-gpt-img.bbclass >> > b/classes/rockchip-gpt-img.bbclass >> > new file mode 100644 >> > index 0000000..fd80625 >> > --- /dev/null >> > +++ b/classes/rockchip-gpt-img.bbclass >> > @@ -0,0 +1,132 @@ >> > +# Copyright (C) 2017 Fuzhou Rockchip Electronics Co., Ltd >> > +# Copyright (C) 2017 Trevor Woerner <twoer...@gmail.com> >> > +# Released under the MIT license (see COPYING.MIT for the terms) >> > + >> > +inherit image_types >> > + >> > +# Use an uncompressed ext4 by default as rootfs >> > +IMG_ROOTFS_TYPE = "ext4" >> > +IMG_ROOTFS = "${IMGDEPLOYDIR}/${IMAGE_NAME}.rootfs.${IMG_ROOTFS_TYPE}" >> > + >> > +# This image depends on the rootfs image >> > +IMAGE_TYPEDEP_rockchip-gpt-img = "${IMG_ROOTFS_TYPE}" >> > + >> > +GPTIMG_SUFFIX = "gpt-img" >> > +GPTIMG = "${IMAGE_NAME}.${GPTIMG_SUFFIX}" >> > +GPTIMG_SIZE ?= "4096" >> This should be GPT size in sectors which is 64 sectors. The name >> GPTIMG_SIZE is not clear enough. People may think it is whole gpt image. >> What about call it GPT_SIZE? >> >> >> It's whole gpt image. > > OK, my mistake. So that look good to me. >> >> >> >> > +BOOT_IMG = "boot.img" >> > +MINILOADER = "loader.bin" >> > +UBOOT = "u-boot.out" >> > +TRUST = "trust.out" >> > +GPTIMG_APPEND ?= "console=tty1 console=ttyS2,115200n8 rw >> > root=/dev/mmcblk2p7 rootfstype=ext4 init=/sbin/init" >> > + >> > +# default partitions [in Sectors] >> > +# More info at http://rockchip.wikidot.com/partitions >> > +LOADER1_SIZE = "8000" >> > +RESERVED1_SIZE = "128" >> > +RESERVED2_SIZE = "8192" >> > +LOADER2_SIZE = "8192" >> > +ATF_SIZE = "8192" >> > +BOOT_SIZE = "229376" >> > + >> > +IMAGE_DEPENDS_rockchip-gpt-img = "parted-native \ >> > + u-boot-mkimage-native \ >> > + mtools-native \ >> > + dosfstools-native \ >> > + virtual/kernel:do_deploy \ >> > + virtual/bootloader:do_deploy" >> > + >> > +PER_CHIP_IMG_GENERATION_COMMAND_rk3288 = "generate_rk3288_image" >> This is not just for rk3288. in fact, it can be used for all the Rockchip >> SoC. >> >> >> There're many differences between Chips. >> Some chips didn't implement SPL support and have to use rk-miniloader to >> create u-boot blob. (e.g. previous rk3399, rk3229) > > all the chips supported by uboot-rockchip and upstream u-boot have SPL > support . The legacy should go to use legacy update image intead. >> >> Some chips didn't use "spl_back_to_brom" so their tpl have a different >> offset.(e.g. previous rk3288) > > The back_to_brom is not chip configuration. It is board configuration. > Actually all the rk3288 board in uboot-rockchip and upstream u-boot support > it now. >> >> >> The name "generate_load1" can't express it clearly. > > Sorry, should be generate_loader1 which is the partition name shows in > http://rockchip.wikidot.com/partitions >> >> >> >> > + >> > +IMAGE_CMD_rockchip-gpt-img () { >> > + # Change to image directory >> > + cd ${DEPLOY_DIR_IMAGE} >> > + >> > + # Remove the exist image >> > + rm -rf *${GPTIMG_SUFFIX} >> ${IMAGE_NAME} is derived using the IMAGE_BASENAME, MACHINE, and DATETIME >> variables. So we don't need to delete previous one to avoid mistake. >> > + >> > + create_rk_image >> > + >> > + ${PER_CHIP_IMG_GENERATION_COMMAND} >> > + >> > + cd ${DEPLOY_DIR_IMAGE} >> > + ln -s ${GPTIMG} "${IMAGE_BASENAME}-${MACHINE}.${GPTIMG_SUFFIX}" >> > +} >> > + >> > +create_rk_image () { >> > + >> > + # Initialize sdcard image file >> > + dd if=/dev/zero of=${GPTIMG} bs=1M count=0 seek=${GPTIMG_SIZE} >> > + >> > + # Create partition table >> > + parted -s ${GPTIMG} mklabel gpt >> > + >> > + # Create vendor defined partitions >> > + LOADER1_START=64 >> > + RESERVED1_START=`expr ${LOADER1_START} + ${LOADER1_SIZE}` >> > + RESERVED2_START=`expr ${RESERVED1_START} + ${RESERVED1_SIZE}` >> > + LOADER2_START=`expr ${RESERVED2_START} + ${RESERVED2_SIZE}` >> > + ATF_START=`expr ${LOADER2_START} + ${LOADER2_SIZE}` >> > + BOOT_START=`expr ${ATF_START} + ${ATF_SIZE}` >> > + ROOTFS_START=`expr ${BOOT_START} + ${BOOT_SIZE}` >> > + >> > + parted -s ${GPTIMG} unit s mkpart loader1 ${LOADER1_START} `expr >> > ${RESERVED1_START} - 1` >> > + parted -s ${GPTIMG} unit s mkpart reserved1 ${RESERVED1_START} >> > `expr ${RESERVED2_START} - 1` >> > + parted -s ${GPTIMG} unit s mkpart reserved2 ${RESERVED2_START} >> > `expr ${LOADER2_START} - 1` >> > + parted -s ${GPTIMG} unit s mkpart loader2 ${LOADER2_START} `expr >> > ${ATF_START} - 1` >> > + parted -s ${GPTIMG} unit s mkpart atf ${ATF_START} `expr >> > ${BOOT_START} - 1` >> > + >> > + # Create boot partition and mark it as bootable >> > + parted -s ${GPTIMG} unit s mkpart boot ${BOOT_START} `expr >> > ${ROOTFS_START} - 1` >> > + parted -s ${GPTIMG} set 6 boot on >> > + >> > + # Create rootfs partition >> > + parted -s ${GPTIMG} unit s mkpart root ${ROOTFS_START} 100% >> > + >> > + parted ${GPTIMG} print >> > + >> > + # Delete the boot image to avoid trouble with the build cache >> > + rm -f ${WORKDIR}/${BOOT_IMG} >> what about use BOOT_IMG = "boot-${MACHINE}-${DATETIME}.img" instead? That >> will leave the previous build for debug and avoid trouble. >> >> >> BOOT_IMG seems will not be deleted automatically so i delete it in here. >> If we leave the previous build, it will make a mess. > > Can you try to fix it instead of just delete it? I believe add a timestamp > can help. >> >> >> >> >> > + >> > + # Create boot partition image >> > + BOOT_BLOCKS=$(LC_ALL=C parted -s ${GPTIMG} unit b print | awk '/ >> > 6 / { print substr($4, 1, length($4 -1)) / 512 /2 }') >> > + BOOT_BLOCKS=`expr $BOOT_BLOCKS / 63 \* 63` >> > + >> > + mkfs.vfat -n "boot" -S 512 -C ${WORKDIR}/${BOOT_IMG} >> > $BOOT_BLOCKS >> > + mcopy -i ${WORKDIR}/${BOOT_IMG} -s >> > ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin >> > ::${KERNEL_IMAGETYPE} >> > + >> > + DEVICETREE_DEFAULT="" >> > + for DTS_FILE in ${KERNEL_DEVICETREE}; do >> > + [ -n "${DEVICETREE_DEFAULT}"] && >> > DEVICETREE_DEFAULT="${DTS_FILE}" >> > + mcopy -i ${WORKDIR}/${BOOT_IMG} -s >> > ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${DTS_FILE} ::${DTS_FILE} >> > + done >> > + >> > + # Create extlinux config file >> > + cat > ${WORKDIR}/extlinux.conf <<EOF >> > +default yocto >> > + >> > +label yocto >> > + kernel /${KERNEL_IMAGETYPE} >> > + devicetree /${DEVICETREE_DEFAULT} >> > + append ${GPTIMG_APPEND} >> > +EOF >> > + >> > + mmd -i ${WORKDIR}/${BOOT_IMG} ::/extlinux >> > + mcopy -i ${WORKDIR}/${BOOT_IMG} -s ${WORKDIR}/extlinux.conf >> > ::/extlinux/ >> > + >> > + # Burn Boot Partition >> > + dd if=${WORKDIR}/${BOOT_IMG} of=${GPTIMG} conv=notrunc,fsync >> > seek=${BOOT_START} >> > + >> > + # Burn Rootfs Partition >> > + dd if=${IMG_ROOTFS} of=${GPTIMG} seek=${ROOTFS_START} >> > + >> > +} >> > + >> > +generate_rk3288_image () { >> It is not only for rk3288. In fact, This function is for create load1 >> partition. So what about using generate_load1 or create_loader1 ? >> > + >> > + # Burn bootloader >> > + mkimage -n rk3288 -T rksd -d ${DEPLOY_DIR_IMAGE}/${SPL_BINARY} >> > ${WORKDIR}/${UBOOT} >> > + cat ${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.bin >> >> > ${WORKDIR}/${UBOOT} >> > + dd if=${WORKDIR}/${UBOOT} of=${GPTIMG} conv=notrunc,fsync >> > seek=64 >> > + >> > +} >> > -- >> > 2.12.0.rc1.48.g076c053 >> > >> > -- >> > _______________________________________________ >> > yocto mailing list >> > yocto@yoctoproject.org >> > https://lists.yoctoproject.org/listinfo/yocto >> >> >> It looks good, Reviewed-by: Jacob Chen <jacob-c...@iotwrt.com> > > -- _______________________________________________ yocto mailing list yocto@yoctoproject.org https://lists.yoctoproject.org/listinfo/yocto