You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

127 lines
2.8 KiB

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