]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - glsdk/meta-ti-glsdk.git/blobdiff - classes/sdcard_image.bbclass
gadget-init: Add network-gadget services and other fixes
[glsdk/meta-ti-glsdk.git] / classes / sdcard_image.bbclass
index 9d582bdcb000697f5ff8635d4e1d2441c1eb1418..531b419230816c52220f3f94cdd9abd28459d6a0 100644 (file)
@@ -3,6 +3,9 @@ inherit image
 # Add the fstypes we need
 IMAGE_FSTYPES_append = " tar.bz2 sdimg"
 
+# Ensure required utilities are present
+IMAGE_DEPENDS_sdimg = "genext2fs-native e2fsprogs-native"
+
 # Change this to match your host distro
 LOSETUP ?= "/sbin/losetup"
 
@@ -15,6 +18,9 @@ LOOPDEV_FS ?= "/dev/loop3"
 # Default to 4GiB images
 SDIMG_SIZE ?= "444" 
 
+# FS type for rootfs
+ROOTFSTYPE ?= "ext3"
+
 BOOTPARTNAME_beaglebone = "BEAGLE_BONE"
 BOOTPARTNAME ?= "${MACHINE}"
 
@@ -29,7 +35,7 @@ IMAGE_CMD_sdimg () {
        # 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 msdos user 0 0"
+               echo "${LOOPDEV_BOOT} ${WORKDIR}/tmp-mnt-boot vfat user 0 0"
         false
        fi
 
@@ -68,7 +74,7 @@ IMAGE_CMD_sdimg () {
 
        ${LOSETUP} ${LOOPDEV_BOOT} ${SDIMG} -o ${BOOT_OFFSET} 
 
-       /sbin/mkfs.msdos ${LOOPDEV_BOOT} -n ${BOOTPARTNAME} $LOOPDEV_BLOCKS
+       /sbin/mkfs.vfat ${LOOPDEV_BOOT} -n ${BOOTPARTNAME} $LOOPDEV_BLOCKS
 
        # Prepare filesystem partition
        # Copy ubi used by flashing scripts
@@ -99,6 +105,7 @@ IMAGE_CMD_sdimg () {
 
        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
@@ -109,7 +116,8 @@ IMAGE_CMD_sdimg () {
        if [ -n ${FATPAYLOAD} ] ; then
                echo "Copying payload into VFAT"
                for entry in ${FATPAYLOAD} ; do
-                       cp -av $entry ${WORKDIR}/tmp-mnt-boot
+                               # add the || true to stop aborting on vfat issues like not supporting .~lock files
+                               cp -av ${IMAGE_ROOTFS}$entry ${WORKDIR}/tmp-mnt-boot || true
                done
        fi
 
@@ -118,18 +126,32 @@ IMAGE_CMD_sdimg () {
        umount ${WORKDIR}/tmp-mnt-boot
        ${LOSETUP} -d ${LOOPDEV_BOOT} || true
 
-       # Prepare ext3 parition
-       echo "Creating ext3 loopback"
+       # Prepare rootfs parition
+       echo "Creating rootfs loopback"
        ${LOSETUP} ${LOOPDEV_FS} ${SDIMG} -o ${FS_OFFSET}
 
        # should use fdisk info
-       echo "Creating ext3 image"
-       touch ${WORKDIR}/${IMAGE_NAME}.rootfs.ext3
-       # lots of small files, so use 8k per inode, not 64k
-       genext2fs -i 8192 -b $FS_SIZE_BLOCKS -d ${IMAGE_ROOTFS} ${WORKDIR}/${IMAGE_NAME}.rootfs.ext3
-       tune2fs -L ${IMAGE_NAME} -j ${WORKDIR}/${IMAGE_NAME}.rootfs.ext3
-
-       dd if=${WORKDIR}/${IMAGE_NAME}.rootfs.ext3 of=${LOOPDEV_FS}
+       echo "Creating rootfs image"
+       touch ${WORKDIR}/${IMAGE_NAME}.rootfs.img
+
+       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} ${WORKDIR}/${IMAGE_NAME}.rootfs.img
+                               tune2fs -L ${IMAGE_NAME} -j ${WORKDIR}/${IMAGE_NAME}.rootfs.img
+                               ;;
+               ext4)
+                               genext2fs -z -N $FS_NUM_INODES -b $FS_SIZE_BLOCKS -d ${IMAGE_ROOTFS} ${WORKDIR}/${IMAGE_NAME}.rootfs.img
+                               tune2fs -L ${IMAGE_NAME} -j -O extents,uninit_bg,dir_index ${WORKDIR}/${IMAGE_NAME}.rootfs.img
+                               ;;
+               *)
+                               echo "Please set ROOTFSTYPE to something supported"
+                               exit 1
+                               ;;
+       esac
+
+       dd if=${WORKDIR}/${IMAGE_NAME}.rootfs.img of=${LOOPDEV_FS}
 
        ${LOSETUP} -d ${LOOPDEV_FS} || true