mirror of
git://git.yoctoproject.org/meta-rockchip.git
synced 2025-07-19 12:49:03 +02:00

If a new build is kicked off, and no changes are required to the image contents themselves, but a new rockchip gpt image needs to be generated, the build will fail because this build (run now) will look for an ext4 rootfs that should also exist from this build. However, since no changes were made to the rootfs, a rootfs with this build's timestamp will not exist. I.e. when generating the rockchip gpt image, the script currently looks for the rootfs in: <image name>-<machine name>-<timestamp>.rootfs.<rootfs type> In other words, if the last build to be done had a timestamp of <yesterday> and the build the is currently running has a timestamp of <now>, when the build tries to generate the rockchip gpt image, it will look for: <image name>-<machine name>-<now>.rootfs.ext4 but that file will not exist. The file that will exist is: <image name>-<machine name>-<yesterday>.rootfs.ext4 Therefore, don't look for the absolute file, but use the symlink instead which does not include the timestamp, but will point to the latest rootfs: <image name>-<machine name>.ext4 Signed-off-by: Trevor Woerner <twoerner@gmail.com>
144 lines
4.6 KiB
Plaintext
144 lines
4.6 KiB
Plaintext
# Copyright (C) 2017 Fuzhou Rockchip Electronics Co., Ltd
|
|
# Copyright (C) 2017 Trevor Woerner <twoerner@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_LINK_NAME}.${IMG_ROOTFS_TYPE}"
|
|
|
|
# This image depends on the rootfs image
|
|
IMAGE_TYPEDEP_rockchip-gpt-img = "${IMG_ROOTFS_TYPE}"
|
|
|
|
GPTIMG = "${IMAGE_NAME}-gpt.img"
|
|
GPTIMG_SYMLK = "${IMAGE_BASENAME}-${MACHINE}-gpt.img"
|
|
GPTIMG_SIZE ?= "4096"
|
|
BOOT_IMG = "boot.img"
|
|
BOOTIMG_SYMLK = "${IMAGE_BASENAME}-${MACHINE}-${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"
|
|
|
|
do_image_rockchip_gpt_img[depends] = "parted-native:do_populate_sysroot \
|
|
u-boot-mkimage-native:do_populate_sysroot \
|
|
mtools-native:do_populate_sysroot \
|
|
dosfstools-native:do_populate_sysroot \
|
|
virtual/kernel:do_deploy \
|
|
virtual/bootloader:do_deploy"
|
|
|
|
PER_CHIP_IMG_GENERATION_COMMAND_rk3288 = "generate_rk3288_loader1_image"
|
|
|
|
IMAGE_CMD_rockchip-gpt-img () {
|
|
# Change to image directory
|
|
cd ${DEPLOY_DIR_IMAGE}
|
|
|
|
# Remove the existing image symlinks
|
|
rm -f "${GPTIMG_SYMLK}"
|
|
rm -f "${BOOTIMG_SYMLK}"
|
|
|
|
create_rk_image
|
|
|
|
${PER_CHIP_IMG_GENERATION_COMMAND}
|
|
|
|
# create symlink to full GPT image
|
|
cd ${DEPLOY_DIR_IMAGE}
|
|
ln -s ${GPTIMG} ${GPTIMG_SYMLK}
|
|
|
|
# create per-build boot.img with symlink
|
|
cd ${DEPLOY_DIR_IMAGE}
|
|
rm -f ${IMAGE_NAME}-boot.img
|
|
if [ -f ${WORKDIR}/${BOOT_IMG} ]; then
|
|
cp ${WORKDIR}/${BOOT_IMG} ${IMAGE_NAME}-boot.img
|
|
fi
|
|
ln -s ${IMAGE_NAME}-boot.img ${BOOTIMG_SYMLK}
|
|
}
|
|
|
|
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}
|
|
|
|
# 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_loader1_image () {
|
|
|
|
# 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
|
|
|
|
}
|