This is the script I use to create the microSD boot disks. This
version always reformats the disk, which takes about 3 minutes.
Updating the MLO, u-boot, or zImage on a prebuilt card can be done
using a simple copy.
Updating the rootfs, beyond simply overwriting a few files, is best
done by nuking the site from orbit; run the mkboot script from
start.
mkboot.sh:
#!/bin/sh
# fdisk portion of script based on mkcard.sh v0.4
# (c) Copyright 2009 Graeme Gregory
# Additional functionality by Steve Sakoman
# (c) Copyright 2010-2013 Steve Sakoman
# Licensed under terms of GPLv2
#
# Parts of the procudure base on the work of Denys Dmytriyenko
# http://wiki.omap.com/index.php/MMC_Boot_Format
VERSION=1.0
RELEASE="vekolako"
IMAGE=gumstix-console-image-overo.tar.bz2
# hack to use a particular kernel variant
KERNEL_VARIANT=""
export LC_ALL=C
MOUNT_POINT="/media/microsd"
# PWD=`pwd`
# WORK_DIR=$PWD
if [ $# -eq 0 ]; then
echo ""
echo "$0 version $VERSION"
echo "Usage:sudo -E $0 "
echo " src: directory containing image files"
echo " drive: SD device (i.e. /dev/sdc)"
exit 1;
fi
WORK_DIR=`realpath $1`
DEST_DIR=$2
# Confirm this is the correct directory:
if [ ! -f $WORK_DIR/MLO ] ; then
echo "No $WORK_DIR/MLO"
exit 1;
fi
echo "Using image files from ${WORK_DIR}"
cd ${WORK_DIR}
if ! id | grep -q root; then
echo "This utility must be run prefixed with sudo -E "
exit 1;
fi
if [ "$DEST_DIR" = "/dev/sda" ] ; then
echo "Sorry, /dev/sda probably holds your PC's rootfs."
echo "Please specify an SD device."
exit 1;
fi
DRIVE=$DEST_DIR
# Make sure that the SD card isn't mounted before we start
if [ -b ${DRIVE}1 ]; then
umount ${DRIVE}1
umount ${DRIVE}2
elif [ -b ${DRIVE}p1 ]; then
umount ${DRIVE}p1
umount ${DRIVE}p2
else
umount ${DRIVE}
fi
SIZE=`fdisk -l $DRIVE | grep Disk | grep bytes | awk '{print $5}'`
echo DISK SIZE $SIZE bytes
if [ $SIZE -gt 34359738368 ]; then
echo "This device is > 32GB and is probably not an SD card!"
exit 1;
fi
#CYLINDERS=`echo $SIZE/255/63/512 | bc`
# wipe current partion setup
echo "Good bye $DRIVE..."
dd if=/dev/zero of=$DRIVE bs=1024 count=1024
# Align partitions for SD card performance/wear optimization
# FAT partition size is 131072 sectors (64MB) less:
# MBR - 1 sector
# padding to align to the page size of the underlying flash - 127 sectors
# so we start the first partition at sector 128 and make it 131072 - 128 = 130944 sectors
# second partition starts at 131072 and continues to fill the card
# Updated for sfdisk version 2.27 (Ubuntu 16.04)
{
echo label: dos
echo label-id: 0
echo 128,130944,0x0C,*
echo 131072,,,-
} | sfdisk --force $DRIVE
sleep 1
if [ -b ${DRIVE}1 ]; then
PART1=${DRIVE}1
PART2=${DRIVE}2
elif [ -b ${DRIVE}p1 ]; then
PART1=${DRIVE}p1
PART2=${DRIVE}p2
else
echo "Improper partitioning on $DRIVE"
exit 1;
fi
umount ${PART1}
mkfs.vfat -F 32 -n BOOT ${PART1}
umount ${PART2}
mke2fs -j -L rootfs ${PART2}
# create a mount point if it doesn't already exist
if [ ! -d $MOUNT_POINT ]; then
if ! mkdir $MOUNT_POINT; then
echo "Could not create mount point: $MOUNT_POINT"
echo "SD card creation was not successful"
exit 1;
fi
fi
if mount -t vfat ${PART1} $MOUNT_POINT; then
echo "Populating boot partition files"
cp MLO $MOUNT_POINT
cp u-boot.img $MOUNT_POINT
cp zImage $MOUNT_POINT
sync
umount $MOUNT_POINT
echo "Boot partition complete"
else
echo "Can't mount ${PART1} at $MOUNT_POINT for boot partition creation"
echo "SD card creation was not successful"
exit 1;
fi
# this shouldn't be necessary, but Ubuntu seems to remove the mount point!
if [ ! -d $MOUNT_POINT ]; then
if ! mkdir $MOUNT_POINT; then
echo "Could not create mount point: $MOUNT_POINT"
echo "SD card creation was not successful"
exit 1;
fi
fi
if mount -t ext3 ${PART2} $MOUNT_POINT; then
if cd $MOUNT_POINT; then
echo "Populating rootfs partition files"
echo "This will take several minutes . . ."
tar xf $WORK_DIR/$IMAGE
cp $WORK_DIR/MLO boot/
cp $WORK_DIR/u-boot.img boot/
cp $WORK_DIR/$IMAGE boot/
sync
cd $WORK_DIR
umount $MOUNT_POINT
echo "Rootfs partition complete"
else
echo "Error populating rootfs partition"
echo "SD card creation was not successful"
fi
else
echo "Can't mount ${PART2} at $MOUNT_POINT for rootfs creation"
echo "SD card creation was not successful"
exit 1;
fi
echo "SD card creation was successful"
exit 0;
This is the version for Ubuntu 12.04, for historical purpose.
Old mkboot.sh:
#!/bin/sh
# fdisk portion of script based on mkcard.sh v0.4
# (c) Copyright 2009 Graeme Gregory
# Additional functionality by Steve Sakoman
# (c) Copyright 2010-2013 Steve Sakoman
# Licensed under terms of GPLv2
#
# Parts of the procudure base on the work of Denys Dmytriyenko
# http://wiki.omap.com/index.php/MMC_Boot_Format
VERSION=1.0
RELEASE="vekolako"
IMAGE=gumstix-console-image-overo.tar.bz2
# hack to use a particular kernel variant
KERNEL_VARIANT=""
export LC_ALL=C
MOUNT_POINT="/media/microsd"
# PWD=`pwd`
# WORK_DIR=$PWD
if [ $# -eq 0 ]; then
echo ""
echo "$0 version $VERSION"
echo "Usage:sudo -E $0 "
echo " src: directory containing image files"
echo " drive: SD device (i.e. /dev/sdc)"
exit 1;
fi
WORK_DIR=$1
DEST_DIR=$2
# Confirm this is the correct directory:
if [ ! -f $WORK_DIR/MLO ] ; then
echo "No $WORK_DIR/MLO"
exit 1;
fi
echo "Using image files from ${WORK_DIR}"
cd ${WORK_DIR}
if ! id | grep -q root; then
echo "This utility must be run prefixed with sudo -E "
exit 1;
fi
if [ "$DEST_DIR" = "/dev/sda" ] ; then
echo "Sorry, /dev/sda probably holds your PC's rootfs."
echo "Please specify an SD device."
exit 1;
fi
DRIVE=$DEST_DIR
# Make sure that the SD card isn't mounted before we start
if [ -b ${DRIVE}1 ]; then
umount ${DRIVE}1
umount ${DRIVE}2
elif [ -b ${DRIVE}p1 ]; then
umount ${DRIVE}p1
umount ${DRIVE}p2
else
umount ${DRIVE}
fi
SIZE=`fdisk -l $DRIVE | grep Disk | grep bytes | awk '{print $5}'`
echo DISK SIZE $SIZE bytes
if [ $SIZE -gt 34359738368 ]; then
echo "This device is > 32GB and is probably not an SD card!"
exit 1;
fi
CYLINDERS=`echo $SIZE/255/63/512 | bc`
# wipe current partion setup
echo "Good bye $DRIVE..."
dd if=/dev/zero of=$DRIVE bs=1024 count=1024
# Align partitions for SD card performance/wear optimization
# FAT partition size is 131072 sectors (64MB) less:
# MBR - 1 sector
# padding to align to the page size of the underlying flash - 127 sectors
# so we start the first partition at sector 128 and make it 131072 - 128 = 130944 sectors
# second partition starts at 131072 and continues to fill the card
{
echo 128,130944,0x0C,*
echo 131072,,,-
} | sfdisk --force -D -uS -H 255 -S 63 -C $CYLINDERS $DRIVE
sleep 1
if [ -b ${DRIVE}1 ]; then
PART1=${DRIVE}1
PART2=${DRIVE}2
elif [ -b ${DRIVE}p1 ]; then
PART1=${DRIVE}p1
PART2=${DRIVE}p2
else
echo "Improper partitioning on $DRIVE"
exit 1;
fi
umount ${PART1}
mkfs.vfat -F 32 -n boot ${PART1}
umount ${PART2}
mke2fs -j -L rootfs ${PART2}
# create a mount point if it doesn't already exist
if [ ! -d $MOUNT_POINT ]; then
if ! mkdir $MOUNT_POINT; then
echo "Could not create mount point: $MOUNT_POINT"
echo "SD card creation was not successful"
exit 1;
fi
fi
if mount -t vfat ${PART1} $MOUNT_POINT; then
echo "Populating boot partition files"
cp MLO $MOUNT_POINT
cp u-boot.img $MOUNT_POINT
cp zImage $MOUNT_POINT
sync
umount $MOUNT_POINT
echo "Boot partition complete"
else
echo "Can't mount ${PART1} at $MOUNT_POINT for boot partition creation"
echo "SD card creation was not successful"
exit 1;
fi
# this shouldn't be necessary, but Ubuntu seems to remove the mount point!
if [ ! -d $MOUNT_POINT ]; then
if ! mkdir $MOUNT_POINT; then
echo "Could not create mount point: $MOUNT_POINT"
echo "SD card creation was not successful"
exit 1;
fi
fi
if mount -t ext3 ${PART2} $MOUNT_POINT; then
if cd $MOUNT_POINT; then
echo "Populating rootfs partition files"
echo "This will take several minutes . . ."
tar xf $WORK_DIR/$IMAGE
cp $WORK_DIR/MLO boot/
cp $WORK_DIR/u-boot.img boot/
cp $WORK_DIR/$IMAGE boot/
sync
cd $WORK_DIR
umount $MOUNT_POINT
echo "Rootfs partition complete"
else
echo "Error populating rootfs partition"
echo "SD card creation was not successful"
fi
else
echo "Can't mount ${PART2} at $MOUNT_POINT for rootfs creation"
echo "SD card creation was not successful"
exit 1;
fi
echo "SD card creation was successful"
exit 0;
WebV7 (C)2018 nlited | Rendered by tikope in 33.181ms | 3.144.228.91