| Submitter | Joel A Fernandes |
|---|---|
| Date | Aug. 26, 2011, 7:54 p.m. |
| Message ID | <1314388460-9781-1-git-send-email-joelagnel@ti.com> |
| Download | mbox | patch |
| Permalink | /patch/10683/ |
| State | New, archived |
| Headers | show |
Comments
Op 26 aug. 2011, om 21:54 heeft Joel A Fernandes het volgende geschreven: > Here's an initial version of the SDCard image build functionality. Its not a direct copy paste from Narcissus Be careful when doing that, narcissus is GPLv2, OE-core is MIT > , I had to replace paths and am copying files from IMAGE_ROOTFS instead of how Narcissus untars into a mount point. > > Not build tested. > > @Koen and all, here are some questions: > 1. Where in openembedded-core do we store the "img.gz" template files so that they are available to image.bbclass? We don't, we can generate is everytime now that we aren't running as www-data > I'm thinking in the images/ directory where the beagleboard-gnome-image bb recipe is itself stored? What's a clean way?/ > 2. I've hardcoded loop device names just like Narcissus, what's a cleaner way? > 3. Same as 2. but for temporary mount point names? > 4. For copying ubifs, how do we ensure IMAGE_CMD_ubifs runs first before IMAGE_CMD_sdimg does? > > Thanks, if you get a chance to work on it, that'll be cool. I will continue to work on it after my class. > > Signed-off-by: Joel A Fernandes <joelagnel@ti.com> > Cc: Koen Kooi <k-kooi@ti.com> > Cc: Jason Kridner <jdk@ti.com> > --- > meta/classes/image_types.bbclass | 99 ++++++++++++++++++++++++++++++++++++++ > 1 files changed, 99 insertions(+), 0 deletions(-) > > diff --git a/meta/classes/image_types.bbclass b/meta/classes/image_types.bbclass > index cd901c1..39e7984 100644 > --- a/meta/classes/image_types.bbclass > +++ b/meta/classes/image_types.bbclass > @@ -88,6 +88,105 @@ IMAGE_CMD_ubi () { > } > IMAGE_CMD_ubifs = "mkfs.ubifs -r ${IMAGE_ROOTFS} -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.ubifs.img ${MKUBIFS_ARGS}" > > +IMAGE_CMD_sdimg () { > + MD5SUM_SD="$(md5sum ${IMAGE_ROOTFS}/boot/uImage | awk '{print $1}')" > + for sdsize in $(ls ${WORKDIR}/conf/sd/sd-master* | sed -e s:${WORKDIR}/conf/sd/sd-master-::g -e 's:.img.gz::g' | xargs echo) ; do > + echo "SD size: $sdsize" > + > + if true ; then > + echo "No cached SD image found, generating new one" > + zcat ${WORKDIR}/conf/sd/sd-master-$sdsize.img.gz > ${WORKDIR}/sd.img > + /sbin/fdisk -l -u ${WORKDIR}/sd.img > + > + # Output looks like: > + # Disk sd-master-1GiB.img: 0 MB, 0 bytes > + # 255 heads, 63 sectors/track, 0 cylinders, total 0 sectors > + # Units = sectors of 1 * 512 = 512 bytes > + # Sector size (logical/physical): 512 bytes / 512 bytes > + # I/O size (minimum/optimal): 512 bytes / 512 bytes > + # Disk identifier: 0x00000000 > + # > + # Device Boot Start End Blocks Id System > + # sd-master-1GiB.img1 * 63 144584 72261 c W95 FAT32 (LBA) > + # sd-master-1GiB.img2 144585 1959929 907672+ 83 Linux > + > + > + BYTES_PER_SECTOR="$(/sbin/fdisk -l -u sd.img | grep Units | awk '{print $9}')" > + VFAT_SECTOR_OFFSET="$(/sbin/fdisk -l -u sd.img | grep img1 | awk '{print $3}')" > + EXT3_SECTOR_OFFSET="$(/sbin/fdisk -l -u sd.img | grep img2 | awk '{print $2}')" > + > + LOOP_DEV="/dev/loop1" > + LOOP_DEV_FS="/dev/loop2" > + umount ${LOOP_DEV} || true > + umount ${LOOP_DEV_FS} || true > + /sbin/losetup -d ${LOOP_DEV} || true > + /sbin/losetup -d ${LOOP_DEV_FS} || true > + > + echo "" > + > + # VFAT > + echo "/sbin/losetup -v -o $(expr ${BYTES_PER_SECTOR} "*" ${VFAT_SECTOR_OFFSET}) ${LOOP_DEV} ${WORKDIR}/sd.img" > + /sbin/losetup -v -o $(expr ${BYTES_PER_SECTOR} "*" ${VFAT_SECTOR_OFFSET}) ${LOOP_DEV} ${WORKDIR}/sd.img > + > + # EXT3 > + echo "/sbin/losetup -v -o $(expr ${BYTES_PER_SECTOR} "*" ${EXT3_SECTOR_OFFSET}) ${LOOP_DEV_FS} ${WORKDIR}/sd.img" > + /sbin/losetup -v -o $(expr ${BYTES_PER_SECTOR} "*" ${EXT3_SECTOR_OFFSET}) ${LOOP_DEV_FS} ${WORKDIR}/sd.img > + echo "/sbin/mkfs.ext3 -L Narcissus-rootfs ${LOOP_DEV_FS}" > + /sbin/mkfs.ext3 -L Narcissus-rootfs ${LOOP_DEV_FS} > + > + echo "" > + > + echo "mount ${LOOP_DEV}" > + mount ${LOOP_DEV} > + > + echo "mount ${LOOP_DEV_FS}" > + mount ${LOOP_DEV_FS} > + > + # report mount status to log > + mount | grep loop > + > + if [ -e ${IMAGE_ROOTFS}/boot/MLO ] ; then > + cp -v ${IMAGE_ROOTFS}/boot/MLO /mnt/narcissus/sd_image1/MLO > + fi > + > + echo "Remounting ${LOOP_DEV}" > + umount ${LOOP_DEV} > + mount ${LOOP_DEV} > + > + echo "Copying file system:" > + cp -r ${IMAGE_ROOTFS}/* /mnt/narcissus/sd_images2/ || true > + > + echo "Copying bootloaders into the boot partition" > + cp -v /mnt/narcissus/sd_image2/boot/u-boot-*.bin /mnt/narcissus/sd_image1/u-boot.bin || true > + cp -v /mnt/narcissus/sd_image2/boot/uImage-2.6* /mnt/narcissus/sd_image1/uImage || true > + cp -v /mnt/narcissus/sd_image2/boot/user.txt /mnt/narcissus/sd_image1/ || true > + cp -v /mnt/narcissus/sd_image2/boot/uEnv.txt /mnt/narcissus/sd_image1/ || true > + > + if [ ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.ubi ] ; then > + echo "Copying UBIFS image to file system:" > + cp ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.ubi /mnt/narcissus/sd_image2/boot/fs.ubi > + fi > + > + touch /mnt/narcissus/sd_image2/narcissus-was-here > + echo "Remounting ${LOOP_DEV_FS}" > + umount ${LOOP_DEV_FS} > + mount ${LOOP_DEV_FS} > + > + echo "files in ext3 partition:" $(du -hs /mnt/narcissus/sd_image2/* | sed s:/mnt/narcissus/sd_image2/::g) > + > + echo "umount ${LOOP_DEV}" > + umount ${LOOP_DEV} > + echo "umount ${LOOP_DEV_FS}" > + umount ${LOOP_DEV_FS} > + > + /sbin/losetup -d ${LOOP_DEV} > + /sbin/losetup -d ${LOOP_DEV_FS} > + > + gzip -c sd.img > ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-${MACHINE}-sd-$sdsize.img.gz > + fi > + done > +} > + > EXTRA_IMAGECMD = "" > EXTRA_IMAGECMD_jffs2 ?= "--pad --little-endian --eraseblock=0x40000" > # Change these if you want default genext2fs behavior (i.e. create minimal inode number) > -- > 1.7.0.4 > > > _______________________________________________ > Openembedded-core mailing list > Openembedded-core@lists.openembedded.org > http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
Hi Koen, Thanks for your feedback. On Sat, Aug 27, 2011 at 2:05 AM, Koen Kooi <koen@dominion.thruhere.net> wrote: > Op 26 aug. 2011, om 21:54 heeft Joel A Fernandes het volgende geschreven: > >> Here's an initial version of the SDCard image build functionality. Its not a direct copy paste from Narcissus > > Be careful when doing that, narcissus is GPLv2, OE-core is MIT > >> , I had to replace paths and am copying files from IMAGE_ROOTFS instead of how Narcissus untars into a mount point. >> >> Not build tested. >> >> @Koen and all, here are some questions: >> 1. Where in openembedded-core do we store the "img.gz" template files so that they are available to image.bbclass? > > We don't, we can generate is everytime now that we aren't running as www-data > I didn't follow What has running as www-data or any regular user go to do with generating img.gz? So what you're suggesting is we run dd and fdisk to create an sdcard image template everytime we bitbake an image? thanks! Joel
+Koen Jason On Sat, Aug 27, 2011 at 4:17 PM, Joel A Fernandes <agnel.joel@gmail.com> wrote: > Hi Koen, > > Thanks for your feedback. > > On Sat, Aug 27, 2011 at 2:05 AM, Koen Kooi <koen@dominion.thruhere.net> wrote: >> Op 26 aug. 2011, om 21:54 heeft Joel A Fernandes het volgende geschreven: >> >>> Here's an initial version of the SDCard image build functionality. Its not a direct copy paste from Narcissus >> >> Be careful when doing that, narcissus is GPLv2, OE-core is MIT >> >>> , I had to replace paths and am copying files from IMAGE_ROOTFS instead of how Narcissus untars into a mount point. >>> >>> Not build tested. >>> >>> @Koen and all, here are some questions: >>> 1. Where in openembedded-core do we store the "img.gz" template files so that they are available to image.bbclass? >> >> We don't, we can generate is everytime now that we aren't running as www-data >> > > I didn't follow What has running as www-data or any regular user go to > do with generating img.gz? > > So what you're suggesting is we run dd and fdisk to create an sdcard > image template everytime we bitbake an image? > > thanks! > Joel >
On Sat, Aug 27, 2011 at 5:17 PM, Joel A Fernandes <agnel.joel@gmail.com> wrote: > Hi Koen, > > Thanks for your feedback. > > On Sat, Aug 27, 2011 at 2:05 AM, Koen Kooi <koen@dominion.thruhere.net> wrote: >> Op 26 aug. 2011, om 21:54 heeft Joel A Fernandes het volgende geschreven: >> >>> Here's an initial version of the SDCard image build functionality. Its not a direct copy paste from Narcissus >> >> Be careful when doing that, narcissus is GPLv2, OE-core is MIT >> >>> , I had to replace paths and am copying files from IMAGE_ROOTFS instead of how Narcissus untars into a mount point. >>> >>> Not build tested. >>> >>> @Koen and all, here are some questions: >>> 1. Where in openembedded-core do we store the "img.gz" template files so that they are available to image.bbclass? >> >> We don't, we can generate is everytime now that we aren't running as www-data >> > > I didn't follow What has running as www-data or any regular user go to > do with generating img.gz? Narcissus ran as www-data. It was necessary to run Narcissus as an unprivileged account, since it is a web service. > > So what you're suggesting is we run dd and fdisk to create an sdcard > image template everytime we bitbake an image? > > thanks! > Joel > > _______________________________________________ > Openembedded-core mailing list > Openembedded-core@lists.openembedded.org > http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core >
Patch
diff --git a/meta/classes/image_types.bbclass b/meta/classes/image_types.bbclass index cd901c1..39e7984 100644 --- a/meta/classes/image_types.bbclass +++ b/meta/classes/image_types.bbclass @@ -88,6 +88,105 @@ IMAGE_CMD_ubi () { } IMAGE_CMD_ubifs = "mkfs.ubifs -r ${IMAGE_ROOTFS} -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.ubifs.img ${MKUBIFS_ARGS}" +IMAGE_CMD_sdimg () { + MD5SUM_SD="$(md5sum ${IMAGE_ROOTFS}/boot/uImage | awk '{print $1}')" + for sdsize in $(ls ${WORKDIR}/conf/sd/sd-master* | sed -e s:${WORKDIR}/conf/sd/sd-master-::g -e 's:.img.gz::g' | xargs echo) ; do + echo "SD size: $sdsize" + + if true ; then + echo "No cached SD image found, generating new one" + zcat ${WORKDIR}/conf/sd/sd-master-$sdsize.img.gz > ${WORKDIR}/sd.img + /sbin/fdisk -l -u ${WORKDIR}/sd.img + + # Output looks like: + # Disk sd-master-1GiB.img: 0 MB, 0 bytes + # 255 heads, 63 sectors/track, 0 cylinders, total 0 sectors + # Units = sectors of 1 * 512 = 512 bytes + # Sector size (logical/physical): 512 bytes / 512 bytes + # I/O size (minimum/optimal): 512 bytes / 512 bytes + # Disk identifier: 0x00000000 + # + # Device Boot Start End Blocks Id System + # sd-master-1GiB.img1 * 63 144584 72261 c W95 FAT32 (LBA) + # sd-master-1GiB.img2 144585 1959929 907672+ 83 Linux + + + BYTES_PER_SECTOR="$(/sbin/fdisk -l -u sd.img | grep Units | awk '{print $9}')" + VFAT_SECTOR_OFFSET="$(/sbin/fdisk -l -u sd.img | grep img1 | awk '{print $3}')" + EXT3_SECTOR_OFFSET="$(/sbin/fdisk -l -u sd.img | grep img2 | awk '{print $2}')" + + LOOP_DEV="/dev/loop1" + LOOP_DEV_FS="/dev/loop2" + umount ${LOOP_DEV} || true + umount ${LOOP_DEV_FS} || true + /sbin/losetup -d ${LOOP_DEV} || true + /sbin/losetup -d ${LOOP_DEV_FS} || true + + echo "" + + # VFAT + echo "/sbin/losetup -v -o $(expr ${BYTES_PER_SECTOR} "*" ${VFAT_SECTOR_OFFSET}) ${LOOP_DEV} ${WORKDIR}/sd.img" + /sbin/losetup -v -o $(expr ${BYTES_PER_SECTOR} "*" ${VFAT_SECTOR_OFFSET}) ${LOOP_DEV} ${WORKDIR}/sd.img + + # EXT3 + echo "/sbin/losetup -v -o $(expr ${BYTES_PER_SECTOR} "*" ${EXT3_SECTOR_OFFSET}) ${LOOP_DEV_FS} ${WORKDIR}/sd.img" + /sbin/losetup -v -o $(expr ${BYTES_PER_SECTOR} "*" ${EXT3_SECTOR_OFFSET}) ${LOOP_DEV_FS} ${WORKDIR}/sd.img + echo "/sbin/mkfs.ext3 -L Narcissus-rootfs ${LOOP_DEV_FS}" + /sbin/mkfs.ext3 -L Narcissus-rootfs ${LOOP_DEV_FS} + + echo "" + + echo "mount ${LOOP_DEV}" + mount ${LOOP_DEV} + + echo "mount ${LOOP_DEV_FS}" + mount ${LOOP_DEV_FS} + + # report mount status to log + mount | grep loop + + if [ -e ${IMAGE_ROOTFS}/boot/MLO ] ; then + cp -v ${IMAGE_ROOTFS}/boot/MLO /mnt/narcissus/sd_image1/MLO + fi + + echo "Remounting ${LOOP_DEV}" + umount ${LOOP_DEV} + mount ${LOOP_DEV} + + echo "Copying file system:" + cp -r ${IMAGE_ROOTFS}/* /mnt/narcissus/sd_images2/ || true + + echo "Copying bootloaders into the boot partition" + cp -v /mnt/narcissus/sd_image2/boot/u-boot-*.bin /mnt/narcissus/sd_image1/u-boot.bin || true + cp -v /mnt/narcissus/sd_image2/boot/uImage-2.6* /mnt/narcissus/sd_image1/uImage || true + cp -v /mnt/narcissus/sd_image2/boot/user.txt /mnt/narcissus/sd_image1/ || true + cp -v /mnt/narcissus/sd_image2/boot/uEnv.txt /mnt/narcissus/sd_image1/ || true + + if [ ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.ubi ] ; then + echo "Copying UBIFS image to file system:" + cp ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.ubi /mnt/narcissus/sd_image2/boot/fs.ubi + fi + + touch /mnt/narcissus/sd_image2/narcissus-was-here + echo "Remounting ${LOOP_DEV_FS}" + umount ${LOOP_DEV_FS} + mount ${LOOP_DEV_FS} + + echo "files in ext3 partition:" $(du -hs /mnt/narcissus/sd_image2/* | sed s:/mnt/narcissus/sd_image2/::g) + + echo "umount ${LOOP_DEV}" + umount ${LOOP_DEV} + echo "umount ${LOOP_DEV_FS}" + umount ${LOOP_DEV_FS} + + /sbin/losetup -d ${LOOP_DEV} + /sbin/losetup -d ${LOOP_DEV_FS} + + gzip -c sd.img > ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-${MACHINE}-sd-$sdsize.img.gz + fi + done +} + EXTRA_IMAGECMD = "" EXTRA_IMAGECMD_jffs2 ?= "--pad --little-endian --eraseblock=0x40000" # Change these if you want default genext2fs behavior (i.e. create minimal inode number)
Here's an initial version of the SDCard image build functionality. Its not a direct copy paste from Narcissus, I had to replace paths and am copying files from IMAGE_ROOTFS instead of how Narcissus untars into a mount point. Not build tested. @Koen and all, here are some questions: 1. Where in openembedded-core do we store the "img.gz" template files so that they are available to image.bbclass? I'm thinking in the images/ directory where the beagleboard-gnome-image bb recipe is itself stored? What's a clean way? 2. I've hardcoded loop device names just like Narcissus, what's a cleaner way? 3. Same as 2. but for temporary mount point names? 4. For copying ubifs, how do we ensure IMAGE_CMD_ubifs runs first before IMAGE_CMD_sdimg does? Thanks, if you get a chance to work on it, that'll be cool. I will continue to work on it after my class. Signed-off-by: Joel A Fernandes <joelagnel@ti.com> Cc: Koen Kooi <k-kooi@ti.com> Cc: Jason Kridner <jdk@ti.com> --- meta/classes/image_types.bbclass | 99 ++++++++++++++++++++++++++++++++++++++ 1 files changed, 99 insertions(+), 0 deletions(-)