#!/bin/bash # cleanup # trap ctrl-c and call ctrl_c() trap cleanup INT function cleanup() { umount -f /tmp/sdcard.boot.$$ >/dev/null 2>&1 umount -f /tmp/sdcard.root.$$ >/dev/null 2>&1 echo "Aborted." exit 1 } if [[ $EUID -ne 0 ]]; then echo "ERROR: this script must be run as root (i.e. using \`sudo'.)" exit 1 fi PATH=${PATH}:/sbin:/usr/sbin DEV="$1" IMGDIR="$2" if [ -z "$IMGDIR" ]; then IMGDIR=/home/dburr/devel/poky/build/tmp/deploy/images/beaglebone fi if [ -z "$DEV" -o -z "$IMGDIR" ]; then echo "USAGE: bb_sd_prep.sh device build-dir" exit 1 fi if [ ! -b "$DEV" ]; then echo "ERROR: no such device: $DEV" exit 1 fi if [ ! -d "$IMGDIR" -o ! -f "$IMGDIR/MLO-beaglebone" ]; then echo "ERROR: $IMGDIR does not appear to be a build directory" exit 1 fi pushd "$IMGDIR" >/dev/null 2>&1 echo "Unmoounting all partitions on $DEV:" PARTS="`df | grep ^$DEV | awk '{ print $1 }'`" if [ ! -z "$PARTS" ]; then for PART in $PARTS; do echo "...$PART" umount "$PART" done fi echo "...done" echo "Preparing partition table on $DEV:" dd if=/dev/zero of=$DEV bs=512 count=10 >/dev/null 2>&1 echo -e "n\np\n1\n\n4095\nn\np\n2\n\n\nt\n1\ne\na\n1\nw\n" | fdisk $DEV >/dev/null 2>&1 echo "...done" echo "Formatting partition on $DEV:" mkfs.vfat -F 16 -n "boot" ${DEV}1 mkfs.ext2 -j -L "root" ${DEV}2 echo "...done" echo "Mounting partition on $DEV:" mkdir -p /tmp/sdcard.boot.$$ mkdir -p /tmp/sdcard.root.$$ mount -t vfat "${DEV}1" /tmp/sdcard.boot.$$ mount -t ext4 "${DEV}2" /tmp/sdcard.root.$$ echo "...done" echo "Copying bootloader..." cp MLO-beaglebone /mnt/sdcard.boot.$$/MLO cp u-boot-beaglebone.img /mnt/sdcard.boot.$$/u-boot.img echo "...done" echo "Creating root filesystem..." tar x -C /tmp/sdcard.root.$$ -f core-image-*-beaglebone.tar.bz2 echo "...done" echo "unmounting SD card..." sync;sync;sync umount /tmp/sdcard.boot.$$ umount /tmp/sdcard.root.$$ echo "...done" rmdir /tmp/sdcard.boot.$$ rmdir /tmp/sdcard.root.$$ echo "Yocto has been installed and is ready to be booted."