From fe53e20674a0f3dff46aa42d5676a5304dac92bf Mon Sep 17 00:00:00 2001
From: srs5694
Date: Thu, 21 Jun 2012 19:32:42 -0400
Subject: [PATCH] Version 0.4.3 release
---
BUILDING.txt | 284 ++++++++++++++++++++----------------
NEWS.txt | 10 +-
docs/refind/bootmode.html | 2 +-
docs/refind/configfile.html | 3 +-
docs/refind/drivers.html | 4 +-
docs/refind/features.html | 2 +-
docs/refind/getting.html | 35 +++--
docs/refind/index.html | 2 +-
docs/refind/installing.html | 2 +-
docs/refind/linux.html | 4 +-
docs/refind/revisions.html | 4 +-
docs/refind/themes.html | 2 +-
docs/refind/todo.html | 9 +-
docs/refind/using.html | 2 +-
filesystems/Makefile | 12 +-
filesystems/fsw_efi.c | 2 +-
mkdistrib | 2 +-
refind/driver_support.c | 6 +-
refind/main.c | 2 +-
refind/menu.c | 7 +-
20 files changed, 227 insertions(+), 169 deletions(-)
diff --git a/BUILDING.txt b/BUILDING.txt
index 8140481..660057c 100644
--- a/BUILDING.txt
+++ b/BUILDING.txt
@@ -15,28 +15,23 @@ rEFIt package (http://packages.debian.org/sid/refit) that includes
extensive patches to enable the program to compile under Linux using the
GNU-EFI package (http://sourceforge.net/projects/gnu-efi/). Although
GNU-EFI is less sophisticated than recent versions of TianoCore's toolkit,
-GNU-EFI is my preferred environment because versions of TianoCore that can
-build under Linux use a very different set of include files and support a
-somewhat different set of system calls than are used by rEFIt/rEFInd. Thus,
-converting to a new TianoCore toolkit would entail a lot of work. Using an
-older version would require building under Windows and using old versions
-of Microsoft's Visual C. I neither have this toolchain nor do I want to use
-it. For this reason, I used Debian's patched version of rEFIt as a starting
-point in forking rEFInd.
-
-Note that the drivers, added with rEFInd 0.4.0, require use of the
-TianoCore tool kit. Driver compilation is described in more detail later.
+GNU-EFI is my preferred environment because it's provided with many Linux
+distributions and it was easy to get started with rEFInd development by
+using GNU-EFI and the Debian rEFIt package as a starting point.
+
+Over time, though, I've found that the recent TianoCore EDK2 toolkit has
+its advantages. The most important of these is that the EFI filesystem
+drivers, added with rEFInd 0.4.0, require this toolkit. This is a
+consequence of their derivation, which is via VirtualBox and the Clover
+boot loader, both of which are based on EDK2. I therefore use EDK2 for the
+drivers, and I've added EDK2 support for rEFInd itself. In short, then, the
+drivers require EDK2, whereas the main rEFInd binary can compile with
+either EDK2 or GNU-EFI.
I've dropped ancillary programs, such as the gptsync program, from rEFInd.
You can still use these tools with rEFInd, but you'll need to install them
separately.
-The patched version of rEFIt that I used as a starting point disabled the
-program's ability to load EFI drivers because of limitations in the GNU-EFI
-library. A combination of improvements in recent versions of the library
-and implementing a (now apparently abandoned) EFI function directly in
-rEFInd has enabled me to add this support back to rEFInd 0.2.7 and later.
-
Requirements
============
@@ -51,23 +46,125 @@ To compile rEFInd, you'll need the following:
* A standard set of Linux development tools, based on GCC.
-* The GNU-EFI package (http://sourceforge.net/projects/gnu-efi/). You can
- install this from a package called "gnu-efi"; however, rEFInd relies on
- features that were added in (I think) 3.0l to provide driver-loading
- capabilities. The versions I've used and that work are 3.0p and 3.0q. As
- of 5/2012, most Linux distributions seem to deliver rather elderly
- versions of GNU-EFI, so you may need to download the latest source code,
- compile it, and install it locally. Since rEFInd version 0.2.7, the
- Makefiles assume this (see below).
+* One of the following:
+
+ * The GNU-EFI package (http://sourceforge.net/projects/gnu-efi/). You can
+ install this from a package called "gnu-efi"; however, rEFInd relies on
+ features that were added in (I think) 3.0l to provide driver-loading
+ capabilities. The versions I've used and that work are 3.0p and 3.0q. As
+ of 5/2012, most Linux distributions seem to deliver rather elderly
+ versions of GNU-EFI, so you may need to download the latest source code,
+ compile it, and install it locally. Since rEFInd version 0.2.7, the
+ Makefiles assume this (see below).
+
+ * The TianoCore EDK2 package
+ (http://sourceforge.net/projects/tianocore/). I've tested using the
+ UDK2010.SR1 variant
+ (http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=UDK2010),
+ which is "frozen," rather than the main EDK2 development branch, which
+ is changing as the developers add features, fix bugs, and so on. Using
+ this package is supported in rEFInd version 0.4.3 and later (0.4.0 and
+ later for the filesystem drivers only). See below for TianoCore setup
+ instructions.
It's possible that you could use a non-Linux platform to compile rEFInd. To
the best of my knowledge, the rEFInd code doesn't rely on anything
Linux-specific in its build requirements, and GNU-EFI's Sourceforge page
-indicates that it works under Windows and OS X, too. Thus, you may be able
-to compile it on these platforms, but I've not tested it in this way. Under
-Windows, you would need to either create a project or Makefile for your
-non-GCC compiler or use a GCC port, such as MinGW (http://www.mingw.org).
-You'd probably need to adjust the Makefile in the latter case.
+indicates that it works under Windows and OS X, too; however, my one
+attempt to compile GNU-EFI under OS X failed. Using the TianoCore toolkit
+might be more likely to work under OS X or Windows, but I haven't tested
+it. Under Windows, you would need to either create a project or Makefile
+for your non-GCC compiler or use a GCC port, such as MinGW
+(http://www.mingw.org). You'd probably need to adjust the Makefiles in the
+latter case.
+
+
+Preparing Your Development Kit
+==============================
+
+If you want to build the rEFInd binary but not the drivers and if you're
+using Linux, GNU-EFI is the easiest way to do the job. I don't describe its
+setup here because it's likely to be fairly easy. If your distribution
+provides a recent enough version, you should be able to install a package
+called gnu-efi and be done with it. If not, you'll need to download the
+source code tarball, build it, and install it. This process is fairly
+typical of Linux packages. Read the GNU-EFI documentation if you need help.
+If you're using GNU-EFI, you can skip the rest of this section.
+
+To build the EFI drivers, the TianoCore toolkit is required. You might also
+want to use it if you have problems with GNU-EFI or if you want to build
+rEFInd on a non-Linux platform. Unfortunately, the TianoCore toolkit is
+weird by Linux programming standards. It's also quite large -- it's
+intended as a means to develop a complete EFI firmware implementation, so
+it contains much more code than is needed to develop standalone EFI
+applications. I don't know of any Linux distribution packages for it in
+RPM, Debian package file, or other format; you MUST install the kit from
+source code using its own unusual compilation procedure. The installation
+documentation also omits at least one step and is a bit unclear about
+others. Here's how I installed the toolkit:
+
+1) Download UDK2010.SR1 from
+ https://sourceforge.net/apps/mediawiki/tianocore/index.php?title=UDK2010.
+
+2) Type "mkdir /usr/local/UDK2010". You can use another directory, but the
+ Makefile for rEFInd's EFI drivers assumes this location. You'll need to
+ edit the EDK2BASE line in the Make.common file if you install somewhere
+ else.
+
+3) Type "cd /usr/local/UDK2010".
+
+3) Unzip the downloaded file (UDK2010.SR1.Complete.MyWorkSpace.zip) in the
+ current directory (/usr/local/UDK2010). This creates a handful of files,
+ including a tarball and a couple of .zip files.
+
+4) Type "unzip UDK2010.SR1.MyWorkSpace.zip". This extracts the
+ platform-neutral portion of the development kit.
+
+5) Type "cd MyWorkSpace".
+
+6) Type "tar xvf ../BaseTools\(Unix\)_UDK2010.SR1.tar". This extracts the
+ Linux/Unix-specific portions of the toolkit.
+
+7) Follow the build instructions at
+ https://sourceforge.net/apps/mediawiki/tianocore/index.php?title=Using_EDK_II_with_Native_GCC_4.4;
+ however, a few changes are required, as detailed below....
+
+8) Type ". edksetup.sh BaseTools" (note the leading dot). This sets up some
+ environment variables, so subsequent steps (NOT including compiling the
+ rEFInd EFI drivers) must be typed in the shell you use for this step.
+
+9) Edit Conf/target.txt and change the following:
+ - ACTIVE_PLATFORM = MdeModulePkg/MdeModulePkg.dsc
+ - TARGET = RELEASE (DEBUG might work, but I've not tested it).
+ - TARGET_ARCH = X64 (on x86-64; leave this as IA32 on x86)
+ - TOOL_CHAIN_TAG = GCC45 (or other value depending on your GCC version;
+ type "gcc -v" to learn your GCC version number). Note that GCC 4.7
+ doesn't have its own entry, so use GCC46 for GCC 4.7.
+ The TianoCore Makefiles read some of these variables from this file
+ and uses them when accessing directories, so be sure to type these
+ entries in the case specified.
+
+10) The documentation refers to editing Conf/tools_def.txt in addition to
+ Conf/target.txt, but doesn't specify what to change in
+ Conf/tools_def.txt. I haven't found it necessary to make any changes in
+ Conf/tools_def.txt EXCEPT when using GCC 4.7 on a Fedora 17 system.
+ (I haven't used GCC 4.7 on other platforms, so this may well be
+ necessary on other systems, too.) With that setup, I found it
+ necessary to change the following line:
+ *_GCC46_X64_ASM_FLAGS = DEF(GCC46_ASM_FLAGS) -m64 -melf_x86_64
+ to:
+ *_GCC46_X64_ASM_FLAGS = DEF(GCC46_ASM_FLAGS) -m64
+
+11) Type "make -C /usr/local/UDK2010/MyWorkSpace/BaseTools/Source/C".
+ (This step is not documented on the EDK Web page.)
+
+10) Type "build" to build the main set of EDK2 files. This process is
+ likely to take a few minutes.
+
+If you installed in a location other than the one I've specified, you must
+edit the EDK2BASE variable in the Make.tiano and filesystems/Make.tiano
+files in the rEFInd source package. Once the toolkit is installed, you can
+build the filesystem drivers or rEFInd, as described below.
Compiling rEFInd
@@ -84,17 +181,26 @@ With your development system set up, you can compile rEFInd as follows:
including this BUILDING.txt file and several subdirectories such as
"refind", "libeg", and "include".
-4) Type "make". With any luck, rEFInd will compile without error, leaving
- the "refind_ia32.efi" or "refind_x64.efi" file, depending on your
- platform, in the "refind" subdirectory.
+4) Type "make" to build with GNU-EFI, or "make tiano" to build with
+ TianoCore EDK2. With any luck, rEFInd will compile without error,
+ leaving the "refind_ia32.efi" or "refind_x64.efi" file, depending on
+ your platform, in the "refind" subdirectory.
+
+5) The default build process does NOT build the filesystem drivers. If you
+ want to build them, you must type "make fs" in the main rEFInd source
+ directory. The result is filesystem drivers in the filesystems
+ subdirectory, and also copies placed in the drivers subdirectory. You
+ must install the TianoCore EDK2 to build the drivers.
If rEFInd doesn't compile correctly, you'll need to track down the source
of the problem. Double-check that you've got all the necessary development
-tools installed, including GCC, make, and GNU-EFI. You may also need to
-adjust the Makefile or Make.common file for your system. The most likely
-thing you'll need to change is the path to the various GNU-EFI include
-files and libraries. Since rEFInd 0.2.7, the default Make.common file
-includes the following definitions:
+tools installed, including GCC, make, and either GNU-EFI or TianoCore EDK2.
+You may also need to adjust the Makefile, Make.common file, or Make.tiano
+file for your system. (The main Makefile controls the process for both
+toolkits, while Make.common holds GNU-EFI options and Make.tiano holds
+TianoCore options.) The most likely thing you'll need to change is the path
+to the various GNU-EFI include files and libraries. Since rEFInd 0.2.7, the
+default Make.common file includes the following definitions:
EFIINC = /usr/local/include/efi
GNUEFILIB = /usr/local/lib
@@ -107,8 +213,11 @@ remove "local" from those paths, and perhaps change references to "lib" to
out-of-date GNU-EFI implementations that will not work with rEFInd 0.2.7
and later.
-When I tried to compile rEFInd under Ubuntu 12.04 (i386), even with a
-locally-compiled GNU-EFI 3.0p or 3.0q, I got errors like this:
+If you're using TianoCore's EDK2, as noted earlier, you may need to adjust
+the EDK2BASE variable in Make.tiano and filesystems/Make.tiano.
+
+When I tried to compile rEFInd under Ubuntu 12.04 (i386) using GNU-EFI,
+even with a locally-compiled GNU-EFI 3.0p or 3.0q, I got errors like this:
main.o: In function `StartLegacy.isra.0':
main.c:(.text+0x8b1): undefined reference to `__stack_chk_fail_local'
@@ -119,6 +228,7 @@ lib.o: In function `ScanExtendedPartition.isra.4':
The solution was to recompile GNU-EFI with the -fno-stack-protector GCC
flag. In GNU-EFI, this can be added to the CFLAGS line in Make.defaults.
+
Installing rEFInd
=================
@@ -144,6 +254,7 @@ You'll then need to activate rEFInd in your EFI. This can be done with
tools such as "efibootmgr" under Linux or "bless" under OS X. See the
docs/refind/installing.html file for details.
+
Note to Distribution Maintainers
================================
@@ -158,96 +269,15 @@ Placing the files in /boot/efi/EFI/{distname}/refind and then having a
post-install script call efibootmgr is probably the better way to go,
though.
+
Compiling the EFI Filesystem Drivers
====================================
-The EFI filesystem drivers in the filesystems subdirectory require the
-TianoCore UDK2010.SR1 toolkit. The drivers might compile with another
-version of the TianoCore toolkit, but I've not tested them with anything
-else. My attempts to use GNU-EFI have failed; at best, I've gotten drivers
-that load but then hang the computer.
-
-An important caveat: I suspect the TianoCore toolkit is responsible for an
-inability to use the resulting drivers on a 32-bit Mac Mini. My suspicion
-is that it produces binaries that work on UEFI 2.x systems but not on the
-EFI 1.x that the Mac uses. If this suspicion is correct, you may be unable
-to use the rEFInd binaries on at least some Macs, as well as on other older
-EFI 1.x-based computers.
-
-Unfortunately, the TianoCore toolkit is bulky and weird by Linux
-programming standards. I don't know of any Linux distribution packages for
-it in RPM, Debian package file, or other format; you MUST install the kit
-from source code using its own unusual compilation procedure. The
-installation documentation also omits at least one step and is a bit
-unclear about others. Here's how I installed the toolkit:
-
-1) Download UDK2010.SR1 from
- https://sourceforge.net/apps/mediawiki/tianocore/index.php?title=UDK2010.
-
-2) Type "mkdir /usr/local/UDK2010". You can use another directory, but the
- Makefile for rEFInd's EFI drivers assumes this location. You'll need to
- edit the EDK2BASE line in the Make.common file if you install somewhere
- else.
-
-3) Type "cd /usr/local/UDK2010".
-
-3) Unzip the downloaded file (UDK2010.SR1.Complete.MyWorkSpace.zip) in the
- current directory (/usr/local/UDK2010). This creates a handful of files,
- including a tarball and a couple of .zip files.
-
-4) Type "unzip UDK2010.SR1.MyWorkSpace.zip". This extracts the
- platform-neutral portion of the development kit.
-
-5) Type "cd MyWorkSpace".
-
-6) Type "tar xvf ../BaseTools\(Unix\)_UDK2010.SR1.tar". This extracts the
- Linux/Unix-specific portions of the toolkit.
-
-7) Follow the build instructions at
- https://sourceforge.net/apps/mediawiki/tianocore/index.php?title=Using_EDK_II_with_Native_GCC_4.4;
- however, a few changes are required, as detailed below....
-
-8) Type ". edksetup.sh BaseTools" (note the leading dot). This sets up some
- environment variables, so subsequent steps (NOT including compiling the
- rEFInd EFI drivers) must be typed in the shell you use for this step.
-
-9) Edit Conf/target.txt and change the following:
- - ACTIVE_PLATFORM = MdeModulePkg/MdeModulePkg.dsc
- - TARGET = RELEASE (DEBUG might work, but I've not tested it).
- - TARGET_ARCH = X64 (on x86-64; leave this as IA32 on x86)
- - TOOL_CHAIN_TAG = GCC45 (or other value depending on your GCC version;
- type "gcc -v" to learn your GCC version number). Note that GCC 4.7
- doesn't have its own entry, so use GCC46 for GCC 4.7.
- The Makefile for the drivers reads some of these variables from this
- file and uses them when accessing directories, so be sure to type these
- entries in the case specified.
-
-10) The documentation refers to editing Conf/tools_def.txt in addition to
- Conf/target.txt, but doesn't specify what to change in
- Conf/tools_def.txt. I haven't found it necessary to make any changes in
- Conf/tools_def.txt EXCEPT when using GCC 4.7 on a Fedora 17 system.
- (I haven't used GCC 4.7 on other platforms, so this may well be
- necessary on other systems, too.) With that setup, I found it
- necessary to change the following line:
- *_GCC46_X64_ASM_FLAGS = DEF(GCC46_ASM_FLAGS) -m64 -melf_x86_64
- to:
- *_GCC46_X64_ASM_FLAGS = DEF(GCC46_ASM_FLAGS) -m64
-
-11) Type "make -C /usr/local/UDK2010/MyWorkSpace/BaseTools/Source/C".
- (This step is not documented on the EDK Web page.)
-
-10) Type "build" to build the main set of EDK2 files. This process is
- likely to take a few minutes.
-
-Once the toolkit is installed, you can build the filesystem drivers. If you
-installed in a location other than the one I've specified, you must edit
-the EDK2BASE variable in the filesystems/Make.common file in the rEFInd
-source package. You can then type "make" in the "filesystems" directory,
-or "make fs" in the main source directory, to build all the drivers. If you
-want to build just one driver, you can change into the "filesystems"
-directory and type "make {fsname}", where {fsname} is a filesystem name --
-"ext2", "reiserfs", "iso9660", or "hfs". The drivers will appear in the
-"filesystems" directory, and also be copied to the "drivers" directory.
+To build all the drivers, you can type "make fs" from the main directory,
+which builds the drivers and places copies in both the filesystems and
+drivers subdirectories. If you want to build just one driver, you can
+change into the "filesystems" directory and type "make {fsname}", where
+{fsname} is a filesystem name -- "ext2", "reiserfs", "iso9660", or "hfs".
To install drivers, you can type "make install" in the "filesystems"
directory. This copies all the drivers to the
diff --git a/NEWS.txt b/NEWS.txt
index 254a9b7..6b87aea 100644
--- a/NEWS.txt
+++ b/NEWS.txt
@@ -1,4 +1,4 @@
-0.4.3 (?/??/2012):
+0.4.3 (6/21/2012):
------------------
- rEFInd now supports compilation using the TianoCore UDK2010/EDK2
@@ -9,6 +9,14 @@
systems, since the boot loader that rEFInd launches is likely to set
graphics or text mode itself.)
+- Graphics-mode booting now clears the screen to the current rEFInd
+ background color (rather than black) and does NOT display boot messages.
+ The intent is for a smoother transition when booting OS X, or perhaps
+ other OSes that don't display boot loader messages. In practice, this
+ effect will be tiny for many OSes, since the boot loader generally clears
+ the screen within a fraction of a second of being launched; but the
+ "flicker" of a rEFInd message in that time can sometimes be distracting.
+
- Filesystem drivers now work on EFI 1.x systems, such as Macs.
- Removed "linux.conf" as a valid alternative name for "refind_linux.conf"
diff --git a/docs/refind/bootmode.html b/docs/refind/bootmode.html
index c26949f..d8222c0 100644
--- a/docs/refind/bootmode.html
+++ b/docs/refind/bootmode.html
@@ -15,7 +15,7 @@
href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com
Originally written: 3/14/2012; last Web page update:
-6/3/2012, referencing rEFInd 0.4.2
+6/21/2012, referencing rEFInd 0.4.3
I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!
diff --git a/docs/refind/configfile.html b/docs/refind/configfile.html
index e7eaf51..2fc949c 100644
--- a/docs/refind/configfile.html
+++ b/docs/refind/configfile.html
@@ -14,7 +14,8 @@
by Roderick W. Smith, rodsmith@rodsbooks.com
-Originally written: 3/14/2012; last Web page update: 6/3/2012, referencing rEFInd 0.4.2
+Originally written: 3/14/2012; last Web page update: 6/21/2012,
+referencing rEFInd 0.4.3
I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!
diff --git a/docs/refind/drivers.html b/docs/refind/drivers.html
index d4d0308..8b0694f 100644
--- a/docs/refind/drivers.html
+++ b/docs/refind/drivers.html
@@ -15,7 +15,7 @@
href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com
Originally written: 4/19/2012; last Web page update:
-6/3/2012, referencing rEFInd 0.4.2
+6/21/2012, referencing rEFInd 0.4.3
I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!
@@ -116,7 +116,7 @@ href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com
Using rEFInd's EFI Drivers
-
+
Since version 0.4.0, rEFInd has shipped with a small collection of read-only EFI filesystem drivers. These are:
diff --git a/docs/refind/features.html b/docs/refind/features.html
index 8a85cb9..4104928 100644
--- a/docs/refind/features.html
+++ b/docs/refind/features.html
@@ -15,7 +15,7 @@
href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com
Originally written: 3/14/2012; last Web page update:
-6/3/2012, referencing rEFInd 0.4.2
+6/21/2012, referencing rEFInd 0.4.3
I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!
diff --git a/docs/refind/getting.html b/docs/refind/getting.html
index 670eb94..25c9c3d 100644
--- a/docs/refind/getting.html
+++ b/docs/refind/getting.html
@@ -15,7 +15,7 @@
href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com
Originally written: 3/14/2012; last Web page update:
-6/7/2012, referencing rEFInd 0.4.2
+6/21/2012, referencing rEFInd 0.4.3
I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!
@@ -97,7 +97,7 @@ href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com
-- A
+
- A
source code zip file—This is useful if you want to
compile the software locally. Note that I use Linux with the GNU-EFI development
@@ -108,19 +108,30 @@ href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com
possible, but I've not attempted it.
- A
- binary zip file—Download this if you want to install
- rEFInd and/or its filesystem drivers on an x86 or x86-64
- computer and have no need to test rEFInd first by booting it on an
- optical disc. This zip file package includes both x86 (aka IA32)
- and x86-64 (aka x64, AMD64, or EM64T) versions of rEFInd.
- Which you install depends on your architecture, as described on the Installing rEFInd page.
+ href="http://sourceforge.net/projects/refind/files/0.4.3/refind-bin-0.4.3.zip/download">A
+ binary zip file (built with GNU-EFI)—Download this if you
+ want to install rEFInd and/or its filesystem drivers on an x86
+ or x86-64 computer and have no need to test rEFInd first by
+ booting it on an optical disc. This zip file package includes both
+ x86 (aka IA32) and x86-64 (aka x64, AMD64, or
+ EM64T) versions of rEFInd. Which you install depends on your
+ architecture, as described on the Installing
+ rEFInd page.
- A
+ href="http://sourceforge.net/projects/refind/files/0.4.3/refind-bin-tiano-0.4.3.zip/download">A
+ binary zip file (built with TianoCore EDK2)—This package
+ is just like the preceding one, except that it was built using the
+ TianoCore EFI Development Kit 2 (EDK2) rather than the GNU-EFI that was
+ used to build the other binary. In theory, the two should work
+ identically. In practice, they might not. I originally used GNU-EFI to
+ develop rEFInd, so it's the safer version; however, I would appreciate
+ feedback about the TianoCore EDK2 build.
+
+- A
CD-R image file—This download contains the same files as
- the zip file, but you can burn it to a CD-R to test rEFInd (and its
+ the GNU-EFI zip file, but you can burn it to a CD-R to test rEFInd (and its
filesystem drivers) without installing it first. (It boots on UEFI PCs,
but fails on some older Macs.) If you like it, you can then copy the
files from the CD-R to your hard disk. The files are named in such a
diff --git a/docs/refind/index.html b/docs/refind/index.html
index c31a8cf..7cee06d 100644
--- a/docs/refind/index.html
+++ b/docs/refind/index.html
@@ -15,7 +15,7 @@
href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com
Originally written: 3/14/2012; last Web page update:
-6/3/2012, referencing rEFInd 0.4.2
+6/21/2012, referencing rEFInd 0.4.3
I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!
diff --git a/docs/refind/installing.html b/docs/refind/installing.html
index 42b5ca5..8ea9ab1 100644
--- a/docs/refind/installing.html
+++ b/docs/refind/installing.html
@@ -15,7 +15,7 @@
href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com
Originally written: 3/14/2012; last Web page update:
-6/3/2012, referencing rEFInd 0.4.2
+6/21/2012, referencing rEFInd 0.4.3
I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!
diff --git a/docs/refind/linux.html b/docs/refind/linux.html
index e8149a9..df60b11 100644
--- a/docs/refind/linux.html
+++ b/docs/refind/linux.html
@@ -15,7 +15,7 @@
href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com
Originally written: 3/19/2012; last Web page update:
-6/3/2012, referencing rEFInd 0.4.2
+6/21/2012, referencing rEFInd 0.4.3
I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!
@@ -150,7 +150,7 @@ another possibility.
initial RAM disk is identified, rEFInd passes a suitable
initrd= option to the kernel when it boots.
-
+
- rEFInd looks for a file called refind_linux.conf in the same
directory as the kernel file. This file is a practical requirement for
diff --git a/docs/refind/revisions.html b/docs/refind/revisions.html
index 82f9e1d..1a43dce 100644
--- a/docs/refind/revisions.html
+++ b/docs/refind/revisions.html
@@ -14,7 +14,7 @@
by Roderick W. Smith, rodsmith@rodsbooks.com
-Last Web page update: 6/3/2012
+Last Web page update: 6/21/2012
I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!
@@ -93,6 +93,8 @@ href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com
+- 0.4.3 (6/21/2012)—The major user-visible change to this version is the addition of the use_graphics_for option, which enables you to specify the OSes that rEFInd launches in graphics mode vs. text mode. This effect is tiny on most systems, but can be important on some, as noted on the "Configuring the Boot Manager" page. There's also a change to the way graphics-mode boots are handled, to make for a slightly smoother visual transition. This version also fixes the incompatibility between the drivers and the firmware used by Macs (and probably other EFI 1.x systems). I've removed linux.conf as a valid alternative name for the refind_linux.conf file, so if you're still using the old name, now is the time to rename it! The biggest change is behind the scenes, though: I've added support for compiling rEFInd using the TianoCore EDK2, as well as the GNU-EFI toolkit that I've used up to this point. I have no intention of removing GNU-EFI support, but there's a chance that the TianoCore toolkit will help in implementing some future features or in debugging some problems. You can download either version from the downloads page.
+
- 0.4.2 (6/3/2012)—I've added a new dont_scan_dirs option to the configuration file, enabling creation of a directory-scanning "blacklist." See the "Configuring the Boot Manager" page for details. This version also makes a couple of changes to the install.sh script. The first is a reminder for Mac users to update refind.conf if they need to boot BIOS-based OSes. The second change makes the script a bit smarter about updating NVRAM settings when run from Linux; it now attempts to make itself the default boot loader if an entry for rEFInd already exists but isn't the default. I've made this change in response to problem reports from users; apparently some distributions' GRUB update scripts make GRUB the default boot loader under all circumstances, which causes rEFInd to be taken out of the picture after a GRUB update. The previous install.sh code wouldn't add rEFInd back to the "top spot" after this happened, but the new code should do the trick. (Although re-installing rEFInd is overkill in this case, it's something many users would logically try.)
- 0.4.1 (5/25/2012)—This version provides a number of small bug fixes and improvements: When re-scanning (initiated by pressing Esc in the main menu), a message that re-scanning is occurring appears on the screen; I've fixed a bug that could cause rEFInd to appear as an option in its own menu after running a shell program and re-scanning; the install.sh script now checks for, and optionally deletes, the rEFItBlesser program when run under OS X; and the HFS+ driver now returns a volume label of HFS+ volume, rather than nothing at all (unlike other drivers, the HFS+ driver can't yet return the volume's true label).
diff --git a/docs/refind/themes.html b/docs/refind/themes.html
index 6fc7891..dec4ea1 100644
--- a/docs/refind/themes.html
+++ b/docs/refind/themes.html
@@ -15,7 +15,7 @@
href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com
Originally written: 4/19/2012; last Web page update:
-6/3/2012, referencing rEFInd 0.4.2
+6/21/2012, referencing rEFInd 0.4.3
I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!
diff --git a/docs/refind/todo.html b/docs/refind/todo.html
index 763d699..582de71 100644
--- a/docs/refind/todo.html
+++ b/docs/refind/todo.html
@@ -15,7 +15,7 @@
href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com
Originally written: 3/14/2012; last Web page update:
-6/3/2012, referencing rEFInd 0.4.2
+6/21/2012, referencing rEFInd 0.4.3
I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!
@@ -231,8 +231,13 @@ href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com
caused by a truncated DevicePath to the shell, which includes the
shell's pathname but not the device identifier.
+ - The 32-bit build of rEFInd displays corrupted volume labels for
+ filesystems handled by built-in drivers, but not for the drivers
+ provided with rEFInd. This is presumably related to the 32-bit
+ driver bug noted below.
+
- The code is in need of review to search for memory leaks and
- similar problems.
+ similar problems.
diff --git a/docs/refind/using.html b/docs/refind/using.html
index c115d77..7578084 100644
--- a/docs/refind/using.html
+++ b/docs/refind/using.html
@@ -15,7 +15,7 @@
href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com
Originally written: 3/14/2012; last Web page update:
-6/3/2012, referencing rEFInd 0.4.2
+6/21/2012, referencing rEFInd 0.4.3
I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!
diff --git a/filesystems/Makefile b/filesystems/Makefile
index 902df49..2b24903 100644
--- a/filesystems/Makefile
+++ b/filesystems/Makefile
@@ -1,7 +1,7 @@
# meta-Makefile for rEFInd filesystem drivers
#
-# Most of the functionality is in Make.common; this Makefile merely
-# deletes critical temporary files and calls Make.common with the
+# Most of the functionality is in Make.tiano; this Makefile merely
+# deletes critical temporary files and calls Make.tiano with the
# name of the driver to be built. This is done because of a dependency
# in the fsw_efi.c file on the filesystem type; this file must be
# recompiled for each new filesystem built.
@@ -15,19 +15,19 @@ all: $(FILESYSTEMS)
ext2:
rm -f fsw_efi.o
- make DRIVERNAME=ext2 -f Make.common
+ make DRIVERNAME=ext2 -f Make.tiano
reiserfs:
rm -f fsw_efi.o
- make DRIVERNAME=reiserfs -f Make.common
+ make DRIVERNAME=reiserfs -f Make.tiano
iso9660:
rm -f fsw_efi.o
- make DRIVERNAME=iso9660 -f Make.common
+ make DRIVERNAME=iso9660 -f Make.tiano
hfs:
rm -f fsw_efi.o
- make DRIVERNAME=hfs -f Make.common
+ make DRIVERNAME=hfs -f Make.tiano
# utility rules
diff --git a/filesystems/fsw_efi.c b/filesystems/fsw_efi.c
index 7c4ea0f..faaa5d5 100644
--- a/filesystems/fsw_efi.c
+++ b/filesystems/fsw_efi.c
@@ -80,7 +80,7 @@
/** Helper macro for stringification. */
#define FSW_EFI_STRINGIFY(x) #x
/** Expands to the EFI driver name given the file system type name. */
-#define FSW_EFI_DRIVER_NAME(t) L"rEFInd 0.4.2 " FSW_EFI_STRINGIFY(t) L" File System Driver"
+#define FSW_EFI_DRIVER_NAME(t) L"rEFInd 0.4.3 " FSW_EFI_STRINGIFY(t) L" File System Driver"
// function prototypes
diff --git a/mkdistrib b/mkdistrib
index bc44a2d..bc24003 100755
--- a/mkdistrib
+++ b/mkdistrib
@@ -16,7 +16,7 @@ make clean
# Prepare a place and copy files there....
mkdir -p ../snapshots/$1/refind-$1/icons
cp --preserve=timestamps icons/*icns ../snapshots/$1/refind-$1/icons/
-cp -a docs images include libeg refind filesystems install.sh CREDITS.txt NEWS.txt BUILDING.txt COPYING.txt LICENSE.txt README.txt Make.common Makefile refind.conf-sample ../snapshots/$1/refind-$1
+cp -a docs images include EfiLib libeg refind filesystems install.sh CREDITS.txt NEWS.txt BUILDING.txt COPYING.txt LICENSE.txt README.txt refind.inf Make.tiano Make.common Makefile refind.conf-sample ../snapshots/$1/refind-$1
# Go there and prepare a souce code zip file....
cd ../snapshots/$1/
diff --git a/refind/driver_support.c b/refind/driver_support.c
index 000b410..4780dae 100644
--- a/refind/driver_support.c
+++ b/refind/driver_support.c
@@ -58,14 +58,14 @@ LibScanHandleDatabase (
UINTN OpenInfoIndex;
UINTN ChildIndex;
BOOLEAN DriverBindingHandleIndexValid;
- BOOLEAN ControllerHandleIndexValid;
+// BOOLEAN ControllerHandleIndexValid;
DriverBindingHandleIndexValid = FALSE;
if (DriverBindingHandleIndex != NULL) {
*DriverBindingHandleIndex = 0xffffffff;
}
- ControllerHandleIndexValid = FALSE;
+// ControllerHandleIndexValid = FALSE;
if (ControllerHandleIndex != NULL) {
*ControllerHandleIndex = 0xffffffff;
}
@@ -110,7 +110,7 @@ LibScanHandleDatabase (
if (ControllerHandle != NULL && ControllerHandleIndex != NULL && (*HandleBuffer)[HandleIndex] == ControllerHandle) {
*ControllerHandleIndex = (UINT32) HandleIndex;
- ControllerHandleIndexValid = TRUE;
+// ControllerHandleIndexValid = TRUE;
}
}
diff --git a/refind/main.c b/refind/main.c
index ffb22fd..f37f451 100644
--- a/refind/main.c
+++ b/refind/main.c
@@ -110,7 +110,7 @@ static VOID AboutrEFInd(VOID)
if (AboutMenu.EntryCount == 0) {
AboutMenu.TitleImage = BuiltinIcon(BUILTIN_ICON_FUNC_ABOUT);
- AddMenuInfoLine(&AboutMenu, L"rEFInd Version 0.4.2.1");
+ AddMenuInfoLine(&AboutMenu, L"rEFInd Version 0.4.3");
AddMenuInfoLine(&AboutMenu, L"");
AddMenuInfoLine(&AboutMenu, L"Copyright (c) 2006-2010 Christoph Pfisterer");
AddMenuInfoLine(&AboutMenu, L"Copyright (c) 2012 Roderick W. Smith");
diff --git a/refind/menu.c b/refind/menu.c
index 1beb3e7..221be00 100644
--- a/refind/menu.c
+++ b/refind/menu.c
@@ -530,11 +530,12 @@ static VOID TextMenuStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State,
// prepare strings for display
DisplayStrings = AllocatePool(sizeof(CHAR16 *) * Screen->EntryCount);
- for (i = 0; i <= State->MaxIndex; i++)
- SPrint(DisplayStrings[i], Screen->EntryCount, L" %-.*s ", MenuWidth, Screen->Entries[i]->Title);
-// DisplayStrings[i] = PoolPrint(L" %-.*s ", MenuWidth, Screen->Entries[i]->Title);
+ for (i = 0; i <= State->MaxIndex; i++) {
+ DisplayStrings[i] = AllocateZeroPool(256 * sizeof(CHAR16));
+ SPrint(DisplayStrings[i], 255, L" %-.*s ", MenuWidth, Screen->Entries[i]->Title);
// TODO: use more elaborate techniques for shortening too long strings (ellipses in the middle)
// TODO: account for double-width characters
+ } // for
// initial painting
BeginTextScreen(Screen->Title);
--
2.39.2