96 lines
1.9 KiB
Bash
96 lines
1.9 KiB
Bash
|
#!/bin/sh
|
||
|
|
||
|
set -u
|
||
|
set -e
|
||
|
|
||
|
PROGNAME=$(basename $0)
|
||
|
|
||
|
usage()
|
||
|
{
|
||
|
echo "Create an SD card that boots on an i.MX6DL SABRESD board."
|
||
|
echo "It is supposed to work also for the i.MX6Q SABRESD board, but"
|
||
|
echo "it this is not tested."
|
||
|
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
|
||
|
|
||
|
# Unmount the partitions if mounted
|
||
|
umount ${PART1} || true
|
||
|
umount ${PART2} || true
|
||
|
|
||
|
# First, clear the card
|
||
|
dd if=/dev/zero of=${DEV} bs=1M count=20
|
||
|
|
||
|
sync
|
||
|
|
||
|
# Partition the card.
|
||
|
# SD layout for i.MX6 boot:
|
||
|
# - Bootloader at offset 1024
|
||
|
# - FAT partition starting at 1MB offset, containing uImage and *.dtb
|
||
|
# - ext2/3 partition formatted as ext2 or ext3, containing the root filesystem.
|
||
|
sfdisk ${DEV} <<EOF
|
||
|
32,480,b
|
||
|
512,,L
|
||
|
EOF
|
||
|
|
||
|
sync
|
||
|
|
||
|
# Copy the bootloader at offset 1024
|
||
|
dd if=output/images/u-boot.imx of=${DEV} obs=512 seek=2
|
||
|
|
||
|
# Prepare a temp dir for mounting partitions
|
||
|
TMPDIR=$(mktemp -d)
|
||
|
|
||
|
# FAT partition: kernel and DTBs
|
||
|
mkfs.vfat ${PART1}
|
||
|
mount ${PART1} ${TMPDIR}
|
||
|
cp output/images/uImage ${TMPDIR}/
|
||
|
cp output/images/*.dtb ${TMPDIR}/
|
||
|
sync
|
||
|
umount ${TMPDIR}
|
||
|
|
||
|
# ext2 partition: root filesystem
|
||
|
mkfs.ext2 ${PART2}
|
||
|
mount ${PART2} ${TMPDIR}
|
||
|
tar -C ${TMPDIR}/ -xf output/images/rootfs.tar
|
||
|
sync
|
||
|
umount ${TMPDIR}
|
||
|
|
||
|
# Cleanup
|
||
|
rmdir ${TMPDIR}
|
||
|
sync
|
||
|
echo Done
|