Last active
February 1, 2021 18:10
-
-
Save RobertCNelson/246884a56476bc686b0f829836a5919e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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