Skip to content

Instantly share code, notes, and snippets.

@RobertCNelson
Last active February 1, 2021 18:10
Show Gist options
  • Select an option

  • Save RobertCNelson/246884a56476bc686b0f829836a5919e to your computer and use it in GitHub Desktop.

Select an option

Save RobertCNelson/246884a56476bc686b0f829836a5919e to your computer and use it in GitHub Desktop.
#!/bin/bash -e
#
DIR="$PWD"
TEMPDIR=$(mktemp -d)
###
imagename="beaglev-$(git rev-parse --short HEAD)"
image_size_mb="2048"
time=$(date +%Y-%m-%d)
VFAT=EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
UBOOT=5B193300-FC78-40CD-8002-E86C45580B47
LINUX=0FC63DAF-8483-4772-8E79-3D69D8477DE4
###
check_root () {
if ! [ $(id -u) = 0 ] ; then
echo "$0 must be run as sudo user or root"
exit 1
fi
}
check_for_command () {
if ! which "$1" > /dev/null ; then
echo -n "You're missing command $1"
NEEDS_COMMAND=1
if [ -n "$2" ] ; then
echo -n " (consider installing package $2)"
fi
echo
fi
}
detect_software () {
unset NEEDS_COMMAND
check_for_command mkfs.vfat dosfstools
check_for_command partprobe parted
check_for_command kpartx kpartx
if [ "${NEEDS_COMMAND}" ] ; then
echo ""
echo "Your system is missing some dependencies"
echo ""
exit
fi
}
create_img () {
vfat_partition=1
uboot_partition=2
echo "Using GPT fdisk (sgdisk) to create partition layout"
echo "Version: `LC_ALL=C sgdisk --version`"
echo "-----------------------------"
LC_ALL=C /sbin/sgdisk --clear --new=1:4096:69502 --change-name=1:"Vfat Boot" --typecode=1:${VFAT} -new=2:2048:4048 --change-name=2:uboot --typecode=2:${UBOOT} --new=3:264192:0 --change-name=3:root --typecode=3:${LINUX} "${media}"
echo "Partition Setup:"
echo "-----------------------------"
LC_ALL=C fdisk -l "${media}"
echo "-----------------------------"
media_loop=$(losetup -f || true)
if [ ! "${media_loop}" ] ; then
echo "losetup -f failed"
echo "Unmount some via: [sudo losetup -a]"
echo "-----------------------------"
losetup -a
echo "sudo kpartx -d /dev/loopX ; sudo losetup -d /dev/loopX"
echo "-----------------------------"
exit
fi
losetup ${media_loop} "${media}"
kpartx -av ${media_loop}
sleep 5
sync
test_loop=$(echo ${media_loop} | awk -F'/' '{print $3}')
if [ -e /dev/mapper/${test_loop}p${vfat_partition} ] ; then
media_prefix="/dev/mapper/${test_loop}p"
else
echo "ls -lh /dev/mapper/"
ls -lh /dev/mapper/
echo "Error: not sure what to do (new feature)."
exit
fi
echo "dd if=./work/HiFive_U-Boot/u-boot.bin of=${media_prefix}${uboot_partition} bs=4096"
dd if="${DIR}/work/HiFive_U-Boot/u-boot.bin" of=${media_prefix}${uboot_partition} bs=4096
echo "dd if=./work/hifive-unleashed-vfat.part of=${media_prefix}${vfat_partition} bs=4096"
dd if="${DIR}/work/hifive-unleashed-vfat.part" of=${media_prefix}${vfat_partition} bs=4096
sync
kpartx -d ${media_loop} || true
losetup -d ${media_loop} || true
}
detect_software
if [ ! -d "${DIR}/deploy/${time}" ] ; then
mkdir -p "${DIR}/deploy/${time}" || true
fi
media="${DIR}/deploy/${time}/${imagename}.img"
check_root
if [ -f "${media}" ] ; then
rm -rf "${media}" || true
fi
dd if=/dev/zero of="${media}" bs=1024 count=0 seek=$((1024 * ${image_size_mb}))
create_img
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment