#!/bin/bash
|
|
# SPDX-License-Identifier: GPL-3.0+
|
|
# Copyright (C) 2019, Martin Kepplinger <martink@posteo.de>
|
|
|
|
set -e
|
|
|
|
cd "$(dirname "$0")"
|
|
|
|
IFDTOOL=./util/ifdtool/ifdtool
|
|
ME_CLEANER=./util/me_cleaner/me_cleaner.py
|
|
have_input_image=0
|
|
|
|
usage()
|
|
{
|
|
echo "EXPERIMENTAL"
|
|
echo ""
|
|
echo "This generates files for building Heads from your original 12M backup:"
|
|
echo " (cat bottom.bin top.bin > full_backup_image.rom)"
|
|
echo " ifd/me will be shrinked by me_cleaner and unlocked"
|
|
echo ""
|
|
echo " http://osresearch.net"
|
|
echo ""
|
|
echo "Usage: $0 -f <full_backup_image>.rom -i <ifdtool>(optional) -m <me_cleaner.py(optional)"
|
|
}
|
|
|
|
args=$(getopt -o f:m:i:h -- "$@")
|
|
if [ $? -ne 0 ] ; then
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
eval set -- "$args"
|
|
while [ $# -gt 0 ]
|
|
do
|
|
case "$1" in
|
|
-f)
|
|
INPUT_IMAGE_PATH=$2
|
|
have_input_image=1
|
|
shift
|
|
;;
|
|
-m)
|
|
ME_CLEANER=$2
|
|
shift
|
|
;;
|
|
-i)
|
|
IFDTOOL=$2
|
|
shift
|
|
;;
|
|
-h)
|
|
usage
|
|
exit 1
|
|
;;
|
|
--)
|
|
shift
|
|
break
|
|
;;
|
|
*)
|
|
echo "Invalid option: $1"
|
|
exit 1
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [ ! "$have_input_image" -gt 0 ] ; then
|
|
echo "No image file specified. Please add -f <file>"
|
|
echo ""
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -e ${IFDTOOL} ] ; then
|
|
if [ ! -d util/ifdtool ] ; then
|
|
echo "Please specify -i <ifdtool>"
|
|
exit 1
|
|
fi
|
|
make -C util/ifdtool
|
|
if [ ! -e ${IFDTOOL} ] ; then
|
|
echo "Failed to build ifdtool"
|
|
exit 1
|
|
fi
|
|
fi
|
|
if [ ! -e ${ME_CLEANER} ] ; then
|
|
mkdir -p util/me_cleaner
|
|
curl -L https://raw.githubusercontent.com/corna/me_cleaner/v1.2/me_cleaner.py -o util/me_cleaner/me_cleaner.py
|
|
if [ ! -e ${ME_CLEANER} ] ; then
|
|
echo "Failed to download me_cleaner"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
OUTPUT_PATH=output
|
|
INPUT_IMAGE_NAME=$(basename "${INPUT_IMAGE_PATH}")
|
|
WORK_IMAGE_NAME=${INPUT_IMAGE_NAME%%.*}_prepared.rom
|
|
|
|
input_filesize=$(wc -c <"$INPUT_IMAGE_PATH")
|
|
reference_filesize=12582912
|
|
if [ ! "$input_filesize" -eq "$reference_filesize" ] ; then
|
|
echo "Error: input file must be 12MB of size"
|
|
exit 1
|
|
fi
|
|
|
|
rm -rf ${OUTPUT_PATH}
|
|
mkdir ${OUTPUT_PATH}
|
|
cp "${INPUT_IMAGE_PATH}" "${OUTPUT_PATH}/${WORK_IMAGE_NAME}"
|
|
|
|
${IFDTOOL} -x "${OUTPUT_PATH}/${WORK_IMAGE_NAME}"
|
|
mv flashregion*bin "${OUTPUT_PATH}/"
|
|
cp "${OUTPUT_PATH}/flashregion_3_gbe.bin" "${OUTPUT_PATH}/gbe.bin"
|
|
rm ${OUTPUT_PATH}/flashregion*bin
|
|
|
|
python ${ME_CLEANER} -r -t -d -S -O "${OUTPUT_PATH}/unneeded_cleaned_image.bin" -D "${OUTPUT_PATH}/ifd_shrinked.bin" -M "${OUTPUT_PATH}/me.bin" "${OUTPUT_PATH}/${WORK_IMAGE_NAME}"
|
|
rm "${OUTPUT_PATH}/unneeded_cleaned_image.bin"
|
|
|
|
${IFDTOOL} -u "${OUTPUT_PATH}/ifd_shrinked.bin"
|
|
mv "${OUTPUT_PATH}/ifd_shrinked.bin.new" "${OUTPUT_PATH}/descriptor.bin"
|
|
rm "${OUTPUT_PATH}/ifd_shrinked.bin"
|
|
|
|
rm "${OUTPUT_PATH}/${WORK_IMAGE_NAME}"
|
|
|
|
echo "done. this is what a layout file should look like:"
|
|
echo "0x00000000:0x00000fff ifd"
|
|
echo "0x00001000:0x00002fff gbe"
|
|
echo "0x00003000:0x0001afff me"
|
|
echo "0x0001b000:0x00bfffff bios"
|
|
|
|
mv ${OUTPUT_PATH}/* . && rm -rf ${OUTPUT_PATH}
|