|
@@ -0,0 +1,97 @@
|
|
|
+#!/bin/sh
|
|
|
+
|
|
|
+set -u
|
|
|
+set -e
|
|
|
+
|
|
|
+PROGNAME=$(basename $0)
|
|
|
+
|
|
|
+usage()
|
|
|
+{
|
|
|
+ echo "Create an SD card that boots on an i.MX28 EVK board."
|
|
|
+ echo
|
|
|
+ echo "Note: all data on the the card will be completely deleted!"
|
|
|
+ echo "Use with care!"
|
|
|
+ echo "Superuser permissions may be required to write to the device."
|
|
|
+ echo
|
|
|
+ echo "Usage: ${PROGNAME} <sd_block_device>"
|
|
|
+ echo "Arguments:"
|
|
|
+ echo " <sd_block_device> The device to be written to"
|
|
|
+ echo
|
|
|
+ echo "Example: ${PROGNAME} /dev/mmcblk0"
|
|
|
+ echo
|
|
|
+}
|
|
|
+
|
|
|
+if [ $# -ne 1 ]; then
|
|
|
+ usage
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+if [ $(id -u) -ne 0 ]; then
|
|
|
+ echo "${PROGNAME} must be run as root"
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+DEV=${1}
|
|
|
+
|
|
|
+# The partition name prefix depends on the device name:
|
|
|
+# - /dev/sde -> /dev/sde1
|
|
|
+# - /dev/mmcblk0 -> /dev/mmcblk0p1
|
|
|
+if echo ${DEV}|grep -q mmcblk ; then
|
|
|
+ PART="p"
|
|
|
+else
|
|
|
+ PART=""
|
|
|
+fi
|
|
|
+
|
|
|
+PART1=${DEV}${PART}1
|
|
|
+PART2=${DEV}${PART}2
|
|
|
+PART3=${DEV}${PART}3
|
|
|
+
|
|
|
+# Unmount the partitions if mounted
|
|
|
+umount ${PART1} || true
|
|
|
+umount ${PART2} || true
|
|
|
+umount ${PART3} || true
|
|
|
+
|
|
|
+# First, clear the card
|
|
|
+dd if=/dev/zero of=${DEV} bs=1M count=20
|
|
|
+
|
|
|
+sync
|
|
|
+
|
|
|
+# Partition the card.
|
|
|
+# SD layout for i.MX28 boot:
|
|
|
+# - Special partition type 53 at sector 2048, containing an SD-SB-encapsulated u-boot
|
|
|
+# - FAT partition containing zImage
|
|
|
+# - ext2/3 partition formatted as ext2 or ext3, containing the root filesystem.
|
|
|
+sfdisk --force -u S ${DEV} <<EOF
|
|
|
+2048,2000,53
|
|
|
+4048,16000,b
|
|
|
+20048,,L
|
|
|
+EOF
|
|
|
+
|
|
|
+sync
|
|
|
+
|
|
|
+# Copy the bootloader at offset 2048
|
|
|
+# (We need to skip the partition table in the .sd, too.)
|
|
|
+dd if=output/images/u-boot.sd of=${DEV}1 bs=1M
|
|
|
+
|
|
|
+# Prepare a temp dir for mounting partitions
|
|
|
+TMPDIR=$(mktemp -d)
|
|
|
+
|
|
|
+# FAT partition: kernel
|
|
|
+mkfs.vfat ${PART2}
|
|
|
+mount ${PART2} ${TMPDIR}
|
|
|
+cp output/images/*Image ${TMPDIR}/
|
|
|
+cp output/images/*.dtb ${TMPDIR}/ || true
|
|
|
+sync
|
|
|
+umount ${TMPDIR}
|
|
|
+
|
|
|
+# ext2 partition: root filesystem
|
|
|
+mkfs.ext2 ${PART3}
|
|
|
+mount ${PART3} ${TMPDIR}
|
|
|
+tar -C ${TMPDIR}/ -xf output/images/rootfs.tar
|
|
|
+sync
|
|
|
+umount ${TMPDIR}
|
|
|
+
|
|
|
+# Cleanup
|
|
|
+rmdir ${TMPDIR}
|
|
|
+sync
|
|
|
+echo Done
|