| #!/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 |