diff --git a/tools/bb_sd_prep.sh b/tools/bb_sd_prep.sh new file mode 100755 index 0000000..f2f7018 --- /dev/null +++ b/tools/bb_sd_prep.sh @@ -0,0 +1,87 @@ +#!/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."