From 585c573c8a388e97d115c77cbecd9d6b42d693cb Mon Sep 17 00:00:00 2001
From: srs5694
Date: Sun, 29 Nov 2015 16:04:17 -0500
Subject: [PATCH 1/1] More cleanup relating to ARM64 support.
---
debian/control | 2 +-
docs/man/refind-install.8 | 5 ++--
docs/refind/todo.html | 15 ++++++----
mvrefind | 58 +++++++++++++++++++++++----------------
4 files changed, 48 insertions(+), 32 deletions(-)
diff --git a/debian/control b/debian/control
index 3c130f3..fe66d1c 100644
--- a/debian/control
+++ b/debian/control
@@ -10,7 +10,7 @@ Vcs-Browser: https://anonscm.debian.org/cgit/collab-maint/refind.git
Vcs-Git: git://anonscm.debian.org/collab-maint/refind.git
Package: refind
-Architecture: amd64 i386
+Architecture: amd64 i386 arm64
Depends: efibootmgr, openssl, parted, ${misc:Depends}
Description: boot manager for EFI-based computers
A graphical boot manager for EFI- and UEFI-based computers, such as all
diff --git a/docs/man/refind-install.8 b/docs/man/refind-install.8
index 5034051..6c874f6 100644
--- a/docs/man/refind-install.8
+++ b/docs/man/refind-install.8
@@ -149,8 +149,9 @@ logical volumes.
.TP
.B \-\-usedefault \fIdevice-file\fR
You can install rEFInd to a disk using the default/fallback filename of
-\fBEFI/BOOT/bootx64.efi\fR (and \fBEFI/BOOT/bootia32.efi\fR, if the 32\-bit
-build is available) using this option. The device\-file should be an
+\fBEFI/BOOT/bootx64.efi\fR (as well as \fBEFI/BOOT/bootia32.efi\fR and
+\fBEFI/BOOT/bootaa64.efi\fR, if the IA\-32 and ARM64
+builds are available) using this option. The device\-file should be an
unmounted ESP, or at least a FAT partition, as in \fB\-\-usedefault
/dev/sdc1\fR. Your computer's NVRAM entries will not be modified when
installing in this way. The intent is that you can create a bootable USB
diff --git a/docs/refind/todo.html b/docs/refind/todo.html
index fafc9ef..351c2e2 100644
--- a/docs/refind/todo.html
+++ b/docs/refind/todo.html
@@ -179,11 +179,16 @@ href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com
optical drives and uses generic icons rather than OS-specific
icons.
- Currently, rEFInd can detect whether it's compiled for x86
- or x86-64 systems and displays this information in its
- "About" screen (AboutrEFInd() in main.c). I'd
- like to add detection for Itanium and ARM systems, but I have no
- way to test such changes.
+ rEFInd's Makefiles and, to a lesser extent, C code,
+ support x86, x86-64, and ARM64 CPUs. EFI is also
+ available for Itanium (IA-64) and ARM32 CPUs, so I'd like to add
+ this support.
+
+ Currently, rEFInd can detect whether it's compiled for x86,
+ x86-64, or ARM64 systems and displays this information in
+ its "About" screen (AboutrEFInd() in main.c). I'd
+ like to add detection for Itanium and 32-bit ARM systems, but I
+ have no way to test such changes.
Further to the preceding, rEFInd's GPT-scanning code (used to
extract partition names) includes assumptions about byte order, and
diff --git a/mvrefind b/mvrefind
index d910a55..1446e4c 100755
--- a/mvrefind
+++ b/mvrefind
@@ -12,6 +12,7 @@
#
# Revision history:
#
+# 0.10.1 -- Generalized to support ARM64 (aka AARCH64, aa64)
# 0.10.0 -- Renamed from mvrefind.sh to mvrefind
# 0.6.3 -- Initial release
#
@@ -19,10 +20,6 @@
# with which they first appeared.
RootDir="/"
-SourceX64="refind_x64.efi"
-TargetX64=$SourceX64
-SourceIA32="refind_ia32.efi"
-TargetIA32=$SourceIA32
SourceShim="shim.efi"
TargetShim=$SourceShim
SourceDir=`readlink -f ${1}`
@@ -76,14 +73,34 @@ FindLinuxESP() {
fi
} # FindLinuxESP
+DeterminePlatform() {
+ CpuType=`uname -m`
+ case "$CpuType" in
+ aarch64)
+ Platform="aa64"
+ ;;
+ x86_64)
+ Platform="x64"
+ ;;
+ i?86)
+ Platform="ia32"
+ ;;
+ *)
+ echo "Unsupported CPU type; aborting!"
+ exit 1
+ esac
+ Source="refind_$Platform.efi"
+ Target=$Source
+}
+
# Adjust filename variables appropriately for their locations and detected
# presence (or lack thereof) of shim installation
AdjustFilenames() {
- if [[ -f $SourceDir/grubx64.efi ]] ; then
- SourceX64="grubx64.efi"
- TargetX64=$SourceX64
+ if [[ -f $SourceDir/grub$Platform.efi ]] ; then
+ Source="grub$Platform.efi"
+ Target=$Source
if [[ $EspSourceDir == "/efi/boot" ]] ; then
- SourceShim="bootx64.efi"
+ SourceShim="boot$Platform.efi"
elif [[ $EspSourceDir == "/efi/microsoft/boot" ]] ; then
SourceShim="bootmgfw.efi"
fi
@@ -91,23 +108,21 @@ AdjustFilenames() {
SourceShim="none"
TargetShim="none"
if [[ $EspSourceDir == "/efi/boot" ]] ; then
- SourceX64="bootx64.efi"
- SourceIA32="bootia32.efi"
+ Source="boot$Platform.efi"
elif [[ $EspSourceDir == "/efi/microsoft/boot" ]] ; then
- SourceX64="bootmgfw.efi"
+ Source="bootmgfw.efi"
fi
fi
if [[ $EspTargetDir == "/efi/boot" ]] ; then
if [[ $TargetShim == "none" ]] ; then
- TargetX64="bootx64.efi"
- TargetIA32="bootia32.efi"
+ Target="boot$Platform.efi"
else
- TargetShim="bootx64.efi"
+ TargetShim="boot$Platform.efi"
fi
elif [[ $EspTargetDir == "/efi/microsoft/boot" ]] ; then
if [[ $TargetShim == "none" ]] ; then
- TargetX64="bootmgfw.efi"
+ Target="bootmgfw.efi"
else
TargetShim="bootmgfw.efi"
fi
@@ -117,7 +132,7 @@ AdjustFilenames() {
# Checks for the presence of necessary files, including both boot loaders
# and support utilities (efibootmgr, etc.)
CheckForFiles() {
- if [[ (! -f $SourceDir/$SourceX64 && ! -f $SourceDir/$SourceIA32) ||
+ if [[ (! -f $SourceDir/$Source) ||
($SourceShim != "none" && ! -f $SourceDir/SourceShim) ||
! -f $SourceDir/refind.conf ]] ; then
echo "There doesn't seem to be a rEFInd installation at $SourceDir!"
@@ -174,8 +189,7 @@ MoveFiles() {
mv $SourceDir/icons-backup $TargetDir/ 2> /dev/null
mv $SourceDir/drivers_* $TargetDir/ 2> /dev/null
mv $SourceDir/keys $TargetDir 2> /dev/null
- mv $SourceDir/$SourceX64 $TargetDir/$TargetX64 2> /dev/null
- mv $SourceDir/$SourceIA32 $TargetDir/$TargetIA32 2> /dev/null
+ mv $SourceDir/$Source $TargetDir/$Target 2> /dev/null
mv $SourceDir/$SourceShim $TargetDir/$TargetShim 2> /dev/null
mv $SourceDir/refind.conf* $TargetDir/ 2> /dev/null
rmdir $SourceDir 2> /dev/null
@@ -201,12 +215,7 @@ AddNvramEntry() {
if [[ $TargetShim != "none" ]] ; then
EntryFilename=$EspTargetDir/$TargetShim
else
- CpuType=`uname -m`
- if [[ $CpuType == 'x86_64' ]] ; then
- EntryFilename=$EspTargetDir/$TargetX64
- else
- EntryFilename=$EspTargetDir/$TargetIA32
- fi
+ EntryFilename=$EspTargetDir/$Target
fi # if/else
EfiEntryFilename=`echo ${EntryFilename//\//\\\}`
@@ -258,6 +267,7 @@ if [[ `whoami` != "root" ]] ; then
fi
FindLinuxESP
+DeterminePlatform
AdjustFilenames
CheckForFiles
MoveFiles
--
2.39.2