[meta-ti] [PATCH v3 1/3] sdcard_image: rewrote to avoid using loopback and mount/unmount
William Mills
wmills at ti.com
Fri Dec 16 06:17:35 PST 2011
On 12/16/2011 02:23 AM, Koen Kooi wrote:
> Op 15 dec. 2011, om 16:29 heeft Kridner, Jason het volgende geschreven:
>
>> Sorry for the top-post. Using the number of clusters is important to make sure that the DOS partitioning is valid. I'm not confident that we'll end up with a whole number of clusters using this method. Perhaps it isn't completely critical, but I'm not 100% comfortable getting rid of it.
> You can now try it :)
>
> http://dominion.thruhere.net/koen/angstrom/beaglebone/test/
>
> The 'oldmethod' is built using the old method, the other one with otavios patches.
Isn't the question whether the ROM bootloader handles it or not? If so
we need to test on Beagleboard classic (Rev B & Rev C) and -xM as well.
The classic's on board flash should be wiped for a real test.
> regards,
>
> Koen
>
>
>> ________________________________________
>> From: meta-ti-bounces at yoctoproject.org [meta-ti-bounces at yoctoproject.org] on behalf of Otavio Salvador [otavio at ossystems.com.br]
>> Sent: Thursday, December 15, 2011 10:05 AM
>> To: meta-ti at yoctoproject.org
>> Subject: [meta-ti] [PATCH v3 1/3] sdcard_image: rewrote to avoid using loopback and mount/unmount
>>
>> Allow generation by regular users without fancy setup requirements and
>> use of loopback and mount/unmount. Besides, this also includes
>> following improvements:
>>
>> * use of megabytes when specifying SDIMG_SIZE
>> * remove restriction of filesystem to rootfs
>>
>> Images that use this class needs to generate the rootfs filesystem and
>> set ROOTFS variable according.
>>
>> Signed-off-by: Otavio Salvador<otavio at ossystems.com.br>
>> ---
>> classes/sdcard_image.bbclass | 180 +++++++++++++++---------------------------
>> 1 files changed, 63 insertions(+), 117 deletions(-)
>>
>> diff --git a/classes/sdcard_image.bbclass b/classes/sdcard_image.bbclass
>> index 519bd9a..5f2d091 100644
>> --- a/classes/sdcard_image.bbclass
>> +++ b/classes/sdcard_image.bbclass
>> @@ -1,99 +1,42 @@
>> +#
>> +# Create an image that can by written onto a SD card using dd.
>> +#
>> +# External variables needed:
>> +# ${ROOTFS} - the rootfs image to incorporate
>> +
>> inherit image
>>
>> # Add the fstypes we need
>> -IMAGE_FSTYPES_append = " tar.bz2 sdimg"
>> +IMAGE_FSTYPES += "sdimg"
>>
>> # Ensure required utilities are present
>> -IMAGE_DEPENDS_sdimg = "genext2fs-native e2fsprogs-native"
>> -
>> -# Change this to match your host distro
>> -LOSETUP ?= "/sbin/losetup"
>> -
>> -# Since these need to go in /etc/fstab we can hardcode them
>> -# Since the vars are weakly assigned, you can override them from your local.conf
>> -LOOPDEV ?= "/dev/loop1"
>> -LOOPDEV_BOOT ?= "/dev/loop2"
>> -LOOPDEV_FS ?= "/dev/loop3"
>> +IMAGE_DEPENDS_sdimg = "dosfstools-native parted-native"
>>
>> -# Default to 4GiB images
>> -SDIMG_SIZE ?= "444"
>> +# Default to 3.4GiB images
>> +SDIMG_SIZE ?= "3400"
>>
>> -# FS type for rootfs
>> -ROOTFSTYPE ?= "ext3"
>> +# Boot partition volume id
>> +BOOTDD_VOLUME_ID_beaglebone = "BEAGLE_BONE"
>> +BOOTDD_VOLUME_ID ?= "${MACHINE}"
>>
>> -BOOTPARTNAME_beaglebone = "BEAGLE_BONE"
>> -BOOTPARTNAME ?= "${MACHINE}"
>> -
>> -IMAGEDATESTAMP = "${@time.strftime('%Y.%m.%d',time.gmtime())}"
>> +# Addional space for boot partition
>> +BOOTDD_EXTRA_SPACE ?= "16384"
>>
>> # Files and/or directories to be copied into the vfat partition
>> FATPAYLOAD ?= ""
>>
>> IMAGE_CMD_sdimg () {
>> - SDIMG=${WORKDIR}/sd.img
>> -
>> - # sanity check fstab entry for boot partition mounting
>> - if [ "x$(cat /etc/fstab | grep ${LOOPDEV_BOOT} | grep ${WORKDIR}/tmp-mnt-boot | grep user || true)" = "x" ]; then
>> - echo "/etc/fstab entries need to be created with the user flag for the loop devices like:"
>> - echo "${LOOPDEV_BOOT} ${WORKDIR}/tmp-mnt-boot vfat user 0 0"
>> - false
>> - fi
>> -
>> - # cleanup loops
>> - for loop in ${LOOPDEV} ${LOOPDEV_BOOT} ${LOOPDEV_FS} ; do
>> - ${LOSETUP} -d $loop || true
>> - done
>> -
>> - # If an SD image is already present, reuse and reformat it
>> - if [ ! -e ${SDIMG} ] ; then
>> - dd if=/dev/zero of=${SDIMG} bs=$(echo '255 * 63 * 512' | bc) count=${SDIMG_SIZE}
>> - fi
>> -
>> - ${LOSETUP} ${LOOPDEV} ${SDIMG}
>> -
>> - # Create partition table
>> - dd if=/dev/zero of=${LOOPDEV} bs=1024 count=1024
>> - SIZE=$(/sbin/fdisk -l ${LOOPDEV} | grep Disk | grep bytes | awk '{print $5}')
>> - CYLINDERS=$(echo $SIZE/255/63/512 | bc)
>> - {
>> - echo ,9,0x0C,*
>> - echo ,,,-
>> - } | /sbin/sfdisk -D -H 255 -S 63 -C ${CYLINDERS} ${LOOPDEV}
>> -
>> - # Prepare loop devices for boot and filesystem partitions
>> - BOOT_OFFSET=32256
>> - FS_OFFSET_SECT=$(/sbin/fdisk -l -u ${LOOPDEV} 2>&1 | grep Linux | perl -p -i -e "s/\s+/ /"|cut -d " " -f 2)
>> - FS_OFFSET=$(echo "$FS_OFFSET_SECT * 512" | bc)
>> - FS_SIZE_BLOCKS=$(/sbin/fdisk -l -u ${LOOPDEV} 2>&1 | grep Linux | perl -p -i -e "s/\s+/ /g" \
>> - |cut -d " " -f 4 | cut -d "+" -f 1)
>> -
>> - LOOPDEV_BLOCKS=$(/sbin/fdisk -l -u ${LOOPDEV} 2>&1 | grep FAT | perl -p -i -e "s/\s+/ /g"|cut -d " " -f 5)
>> - LOOPDEV_BYTES=$(echo "$LOOPDEV_BLOCKS * 1024" | bc)
>> -
>> - ${LOSETUP} -d ${LOOPDEV}
>> -
>> - ${LOSETUP} ${LOOPDEV_BOOT} ${SDIMG} -o ${BOOT_OFFSET}
>> -
>> - /sbin/mkfs.vfat ${LOOPDEV_BOOT} -n ${BOOTPARTNAME} $LOOPDEV_BLOCKS
>> -
>> - # Prepare filesystem partition
>> - # Copy ubi used by flashing scripts
>> - if [ -e ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ubi ] ; then
>> - echo "Copying UBIFS image to file system"
>> - cp ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ubi ${IMAGE_ROOTFS}/boot/fs.ubi
>> - fi
>> + TMP=${WORKDIR}/tmp
>> + SDIMG=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.sdimg
>>
>> - # Prepare boot partion. First mount the boot partition, and copy the boot loader and supporting files
>> - # from the root filesystem
>> -
>> - mkdir -p ${WORKDIR}/tmp-mnt-boot
>> - mount $LOOPDEV_BOOT ${WORKDIR}/tmp-mnt-boot
>> + # Prepare boot filesystem
>> + install -d $TMP/boot
>>
>> echo "Copying bootloaders into the boot partition"
>> if [ -e ${IMAGE_ROOTFS}/boot/MLO ] ; then
>> - cp -v ${IMAGE_ROOTFS}/boot/MLO ${WORKDIR}/tmp-mnt-boot
>> + cp -v ${IMAGE_ROOTFS}/boot/MLO $TMP/boot
>> else
>> - cp -v ${DEPLOY_DIR_IMAGE}/MLO ${WORKDIR}/tmp-mnt-boot
>> + cp -v ${DEPLOY_DIR_IMAGE}/MLO $TMP/boot
>> fi
>>
>> # Check for u-boot SPL
>> @@ -103,54 +46,57 @@ IMAGE_CMD_sdimg () {
>> suffix=bin
>> fi
>>
>> - cp -v ${IMAGE_ROOTFS}/boot/uEnv.txt ${WORKDIR}/tmp-mnt-boot || true
>> - cp -v ${IMAGE_ROOTFS}/boot/user.txt ${WORKDIR}/tmp-mnt-boot || true
>> - cp -v ${IMAGE_ROOTFS}/boot/uImage ${WORKDIR}/tmp-mnt-boot || true
>> -
>> if [ -e ${IMAGE_ROOTFS}/boot/u-boot.$suffix ] ; then
>> - cp -v ${IMAGE_ROOTFS}/boot/{u-boot.$suffix} ${WORKDIR}/tmp-mnt-boot || true
>> + cp -v ${IMAGE_ROOTFS}/boot/u-boot.$suffix $TMP/boot || true
>> else
>> - cp -v ${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.$suffix ${WORKDIR}/tmp-mnt-boot/u-boot.$suffix
>> + cp -v ${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.$suffix $TMP/boot/u-boot.$suffix
>> + fi
>> +
>> + if [ -e ${IMAGE_ROOTFS}/boot/uImage ]; then
>> + cp -v ${IMAGE_ROOTFS}/boot/uImage $TMP/boot || true
>> + else
>> + cp -v ${DEPLOY_DIR_IMAGE}/uImage-${MACHINE}.$suffix $TMP/boot/uImage
>> + fi
>> +
>> + cp -v ${IMAGE_ROOTFS}/boot/uEnv.txt $TMP/boot || true
>> + cp -v ${IMAGE_ROOTFS}/boot/user.txt $TMP/boot || true
>> +
>> + # Copy ubi used by flashing scripts
>> + if [ -e ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ubi ] ; then
>> + echo "Copying UBIFS image to file system"
>> + cp ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ubi ${IMAGE_ROOTFS}/boot/fs.ubi
>> fi
>>
>> if [ -n ${FATPAYLOAD} ] ; then
>> echo "Copying payload into VFAT"
>> for entry in ${FATPAYLOAD} ; do
>> # add the || true to stop aborting on vfat issues like not supporting .~lock files
>> - cp -av ${IMAGE_ROOTFS}$entry ${WORKDIR}/tmp-mnt-boot || true
>> + cp -av ${IMAGE_ROOTFS}$entry $TMP/boot || true
>> done
>> fi
>>
>> - echo "${IMAGE_NAME}-${IMAGEDATESTAMP}"> ${IMAGE_ROOTFS}/etc/image-version-info
>> -
>> - # Cleanup VFAT mount
>> - echo "Cleaning up VFAT mount"
>> - umount ${WORKDIR}/tmp-mnt-boot
>> - ${LOSETUP} -d ${LOOPDEV_BOOT} || true
>> -
>> - # Prepare rootfs parition
>> - echo "Creating rootfs loopback"
>> - ${LOSETUP} ${LOOPDEV_FS} ${SDIMG} -o ${FS_OFFSET}
>> -
>> - FS_NUM_INODES=$(echo $FS_SIZE_BLOCKS / 4 | bc)
>> -
>> - case "${ROOTFSTYPE}" in
>> - ext3)
>> - genext2fs -z -N $FS_NUM_INODES -b $FS_SIZE_BLOCKS -d ${IMAGE_ROOTFS} ${LOOPDEV_FS}
>> - tune2fs -L ${IMAGE_NAME} -j ${LOOPDEV_FS}
>> - ;;
>> - ext4)
>> - genext2fs -z -N $FS_NUM_INODES -b $FS_SIZE_BLOCKS -d ${IMAGE_ROOTFS} ${LOOPDEV_FS}
>> - tune2fs -L ${IMAGE_NAME} -j -O extents,uninit_bg,dir_index ${LOOPDEV_FS}
>> - ;;
>> - *)
>> - echo "Please set ROOTFSTYPE to something supported"
>> - exit 1
>> - ;;
>> - esac
>> -
>> - ${LOSETUP} -d ${LOOPDEV_FS} || true
>> -
>> - gzip -c ${WORKDIR}/sd.img> ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-${IMAGEDATESTAMP}.img.gz
>> - rm -f ${WORKDIR}/sd.img
>> + dd if=/dev/zero of=${SDIMG} bs=$(expr 1000 \* 1000) count=${SDIMG_SIZE}
>> +
>> + # Create the boot filesystem
>> + BOOT_OFFSET=32256
>> + BOOT_BLOCKS=$(du -bks $TMP/boot | cut -f 1)
>> + BOOT_SIZE=$(expr $BOOT_BLOCKS + ${BOOTDD_EXTRA_SPACE})
>> + mkfs.vfat -n ${BOOTDD_VOLUME_ID} -d $TMP/boot -C $TMP/boot.img $BOOT_SIZE
>> +
>> + # Create partition table
>> + END1=$(expr $BOOT_SIZE \* 1024)
>> + END2=$(expr $END1 + 512)
>> + parted -s ${SDIMG} mklabel msdos
>> + parted -s ${SDIMG} mkpart primary fat16 ${BOOT_OFFSET}B ${END1}B
>> + parted -s ${SDIMG} mkpart primary ext3 ${END2}B 100%
>> + parted -s ${SDIMG} set 1 boot on
>> + parted ${SDIMG} print
>> +
>> + OFFSET1=$(expr $BOOT_OFFSET / 512)
>> + OFFSET2=$(expr $END2 / 512)
>> + dd if=$TMP/boot.img of=${SDIMG} conv=notrunc seek=$OFFSET1 bs=512
>> + dd if=${ROOTFS} of=${SDIMG} conv=notrunc seek=$OFFSET2 bs=512
>> +
>> + cd ${DEPLOY_DIR_IMAGE}
>> + ln -sf ${IMAGE_NAME}.sdimg ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.sdimg
>> }
>> --
>> 1.7.2.5
>>
>> _______________________________________________
>> meta-ti mailing list
>> meta-ti at yoctoproject.org
>> https://lists.yoctoproject.org/listinfo/meta-ti
>> _______________________________________________
>> meta-ti mailing list
>> meta-ti at yoctoproject.org
>> https://lists.yoctoproject.org/listinfo/meta-ti
>
>
> _______________________________________________
> meta-ti mailing list
> meta-ti at yoctoproject.org
> https://lists.yoctoproject.org/listinfo/meta-ti
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.yoctoproject.org/pipermail/meta-ti/attachments/20111216/c2e8767c/attachment.html>
More information about the meta-ti
mailing list