mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-11-10 09:40:53 +01:00
8d6bc3b17d
Signed-off-by: SergeySlice <sergey.slice@gmail.com>
159 lines
3.7 KiB
Bash
Executable File
159 lines
3.7 KiB
Bash
Executable File
#!/bin/bash
|
|
SCRIPT_ABS_FILENAME=`LC_ALL=en_US.ISO8859-1 perl -e 'use Cwd "abs_path";print abs_path(shift)' "${BASH_SOURCE[0]}"`
|
|
SCRIPT_DIR=`dirname "$SCRIPT_ABS_FILENAME"`
|
|
|
|
# we can't cd "$SCRIPT_DIR" because the 1st arg maybe a relative path to the current dir (and NOT relative to the SCRIPT_DIR)
|
|
|
|
OSTYPE=`uname -s`
|
|
#echo $OSTYPE
|
|
|
|
if [ -z "$1" ]
|
|
then
|
|
if [ -f "${1%.*}".debug ]
|
|
then
|
|
clover_debug_file="${1%.*}".debug
|
|
echo Using debug file "$clover_debug_file"
|
|
else
|
|
if [ -f "${1%.*}".dll.dSYM ]
|
|
then
|
|
clover_debug_file="${1%.*}".dll.dSYM
|
|
echo Using debug file "$clover_debug_file"
|
|
else
|
|
echo "Usage: $SCRIPT_ABS_FILENAME [Clover debug file]"
|
|
exit 1
|
|
fi
|
|
fi
|
|
else
|
|
clover_debug_file="${1%.*}".dll.dSYM
|
|
fi
|
|
|
|
clover_debug_file="${1%.*}".dll.dSYM
|
|
clover_efi_file="${1%.*}".efi
|
|
|
|
#if ! [ -f "$clover_debug_file" ]
|
|
#then
|
|
# echo Debug file "$clover_debug_file" doesn\'t exist
|
|
# exit 1
|
|
#fi
|
|
|
|
#clover_efi_file="${clover_debug_file%.*}".efi
|
|
#if ! [ -f "$clover_efi_file" ]
|
|
#then
|
|
# echo Efi file "$clover_efi_file" doesn\'t exist
|
|
# exit 1
|
|
#fi
|
|
|
|
echo clover_debug_file="$clover_debug_file"
|
|
echo clover_efi_file="$clover_efi_file"
|
|
|
|
#qemu_path="$SCRIPT_DIR"/qemu_portable-v4.2.0/qemu-system-x86_64
|
|
qemu_path="$SCRIPT_DIR"/qemu_portable-v5.2.0/qemu-system-x86_64
|
|
#set -x
|
|
|
|
if [ "$OSTYPE" = "Darwin" ]
|
|
then
|
|
if ! [ -f "$qemu_path" ]
|
|
then
|
|
echo "You must restore the folder \'"$(dirname "$qemu_path")"\'"
|
|
exit 1
|
|
fi
|
|
if ! [ -f "$SCRIPT_DIR"/disk_image_gpt.img ]
|
|
then
|
|
unzip -o "$SCRIPT_DIR"/disk_image_gpt.img.zip -d "$SCRIPT_DIR"
|
|
rm -rf "$SCRIPT_DIR"/__MACOSX
|
|
fi
|
|
|
|
if pgrep qemu
|
|
then
|
|
killall qemu-system-x86_64
|
|
fi
|
|
> "$SCRIPT_DIR"/serial0_qemu_out.log # empty file without erasing it. Useful for editor for refreshing and reloading.
|
|
|
|
hdiutil attach "$SCRIPT_DIR"/disk_image_gpt.img || exit 1
|
|
|
|
shopt -s nocasematch
|
|
|
|
if [[ "$(basename "$clover_debug_file")" =~ "CloverX64"* ]]
|
|
then
|
|
echo ditto "${clover_efi_file}" /Volumes/QEMU_EFI/EFI/CLOVER/CLOVERX64.efi
|
|
ditto "${clover_efi_file}" /Volumes/QEMU_EFI/EFI/CLOVER/CLOVERX64.efi || exit 1
|
|
|
|
#no need to replace BootX64.efi, it's not used in legacy boot
|
|
else
|
|
: # TODO : if it's a module, has to be copied in Drivers
|
|
fi
|
|
|
|
shopt -u nocasematch
|
|
|
|
diskutil eject /Volumes/QEMU_EFI || exit 1
|
|
|
|
sleep 1 # not 100% sure it's needed
|
|
set -m
|
|
|
|
cd "$SCRIPT_DIR"
|
|
|
|
bios_file=("$(dirname "$qemu_path")"/bios*)
|
|
|
|
"$qemu_path" \
|
|
-L "$(dirname "$qemu_path")" \
|
|
-m 2048 \
|
|
-cpu Penryn \
|
|
-bios "$bios_file" \
|
|
-machine q35 \
|
|
-device ahci,id=ahi \
|
|
-drive format=raw,id=hda,file=./disk_image_gpt.img \
|
|
-usb \
|
|
-device usb-mouse,bus=usb-bus.0,port=2 \
|
|
-device usb-kbd,bus=usb-bus.0,port=1 \
|
|
-serial file:./serial0_qemu_out.log \
|
|
-gdb tcp::9000 &
|
|
[[ $? == 0 ]] || exit 1
|
|
|
|
set +m
|
|
|
|
count=1
|
|
timeout=60
|
|
image_base_str="CloverX64 : Image base = "
|
|
|
|
getImageBase() {
|
|
[ -f ./serial0_qemu_out.log ] || return 1
|
|
grep "$image_base_str" ./serial0_qemu_out.log
|
|
return $?
|
|
}
|
|
|
|
|
|
while [ $count -le $timeout ] && ! getImageBase
|
|
do
|
|
sleep 1
|
|
count=$((count+1))
|
|
done
|
|
|
|
if [ $count -ge $timeout ]
|
|
then
|
|
echo Cannot find "\"Clover : Image base = \"" in ./serial0_qemu_out.log after $timeout seconds
|
|
exit 1
|
|
fi
|
|
|
|
adr="$(grep "$image_base_str" ./serial0_qemu_out.log | awk '{printf "0x%x",$NF}')"
|
|
echo adr="$adr"
|
|
|
|
GDB=gdb
|
|
if [ -f ../../../toolchain.gdb/gdb ]
|
|
then
|
|
GDB=../../../toolchain.gdb/gdb
|
|
fi
|
|
|
|
"$GDB" --eval-command="file "$clover_debug_file" -o $adr" \
|
|
--eval-command="target remote localhost:9000" \
|
|
--eval-command="rwatch *0" \
|
|
--eval-command="br panic_" \
|
|
--eval-command="continue"
|
|
|
|
|
|
exit 0
|
|
|
|
|
|
|
|
fi
|
|
|