]> code.delx.au - refind/commitdiff
Version 0.4.3 release
authorsrs5694 <srs5694@users.sourceforge.net>
Thu, 21 Jun 2012 23:32:42 +0000 (19:32 -0400)
committersrs5694 <srs5694@users.sourceforge.net>
Thu, 21 Jun 2012 23:32:42 +0000 (19:32 -0400)
20 files changed:
BUILDING.txt
NEWS.txt
docs/refind/bootmode.html
docs/refind/configfile.html
docs/refind/drivers.html
docs/refind/features.html
docs/refind/getting.html
docs/refind/index.html
docs/refind/installing.html
docs/refind/linux.html
docs/refind/revisions.html
docs/refind/themes.html
docs/refind/todo.html
docs/refind/using.html
filesystems/Makefile
filesystems/fsw_efi.c
mkdistrib
refind/driver_support.c
refind/main.c
refind/menu.c

index 81404819ae721f8aba3a41b130887bbc2f63eead..660057cec140debc4629305e2bcd75de17394cac 100644 (file)
@@ -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
index 254a9b7882744f21415ef14364df8606f20387ac..6b87aea52eedcc6ea57b9e0f1ad952b6a6233d87 100644 (file)
--- 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"
index c26949f3574c2321823df225bcf41ff2d60c0cf1..d8222c04d99f0a8abb8fd5b035c015a092881061 100644 (file)
@@ -15,7 +15,7 @@
 href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>\r
 \r
 <p>Originally written: 3/14/2012; last Web page update:\r
-6/3/2012, referencing rEFInd 0.4.2</p>\r
+6/21/2012, referencing rEFInd 0.4.3</p>\r
 \r
 \r
 <p>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!</p>\r
index e7eaf51d6297f5300e2338fe16ecd2396b3afe42..2fc949c226f8439024b128f88b7a3c2e30c0781f 100644 (file)
@@ -14,7 +14,8 @@
   <p class="subhead">by Roderick W. Smith, <a
 href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
 
-<p>Originally written: 3/14/2012; last Web page update: 6/3/2012, referencing rEFInd 0.4.2</p>
+<p>Originally written: 3/14/2012; last Web page update: 6/21/2012,
+referencing rEFInd 0.4.3</p>
 
 
 <p>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!</p>
index d4d0308c2105c892714a60caeff3d7c41b1c3a0f..8b0694fdccfde91736bd43218a0a428ea8c5c107 100644 (file)
@@ -15,7 +15,7 @@
 href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
 
 <p>Originally written: 4/19/2012; last Web page update:
-6/3/2012, referencing rEFInd 0.4.2</p>
+6/21/2012, referencing rEFInd 0.4.3</p>
 
 
 <p>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!</p>
@@ -116,7 +116,7 @@ href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
 
 <h2>Using rEFInd's EFI Drivers</h2>
 
-<p class="sidebar"><b>Note:</b> rEFInd's drivers don't work on my 32-bit Mac Mini, but the 32-bit builds do work under VirtualBox. On my Mac, I get an "incompatible version" error when loading them at a shell, or an error code of 80000019 when rEFInd attempts to auto-load them. I'm looking into this problem. In the meantime, if you can't load rEFInd's drivers, I recommend you use drivers from another source, as described shortly.</p>
+<p class="sidebar"><b>Note:</b> If you want to use the drivers with a Mac, be sure to use at least version 0.4.3. Earlier versions were incompatible with the Mac's EFI 1.x firmware. Alternatively, you can use the drivers that came with <a href="http://refit.sourceforge.net">rEFIt,</a> which work on Macs.</p>
 
 <p>Since version 0.4.0, rEFInd has shipped with a small collection of read-only EFI filesystem drivers. These are:</p>
 
index 8a85cb9dff695fef2917c5bd4fd74f0830317d79..41049289ccbc7afe0e54211edffe68255a08d5a5 100644 (file)
@@ -15,7 +15,7 @@
 href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
 
 <p>Originally written: 3/14/2012; last Web page update:
-6/3/2012, referencing rEFInd 0.4.2</p>
+6/21/2012, referencing rEFInd 0.4.3</p>
 
 <p>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!</p>
 
index 670eb94861edd792abb7c670fef908c8aaeb4c50..25c9c3d49f389d3376a6862909dc81bef1a3e3c4 100644 (file)
@@ -15,7 +15,7 @@
 href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
 
 <p>Originally written: 3/14/2012; last Web page update:
-6/7/2012, referencing rEFInd 0.4.2</p>
+6/21/2012, referencing rEFInd 0.4.3</p>
 
 <p>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!</p>
 
@@ -97,7 +97,7 @@ href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
 
 <ul>
 
-<li><b><a href="http://sourceforge.net/projects/refind/files/0.4.2/refind-src-0.4.2.zip/download">A
+<li><b><a href="http://sourceforge.net/projects/refind/files/0.4.3/refind-src-0.4.3.zip/download">A
     source code zip file</a></b>&mdash;This is useful if you want to
     compile the software locally. Note that I use Linux with the <a
     href="http://sourceforge.net/projects/gnu-efi">GNU-EFI</a> development
@@ -108,19 +108,30 @@ href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
     possible, but I've not attempted it.</li>
 
 <li><b><a
-    href="http://sourceforge.net/projects/refind/files/0.4.2/refind-bin-0.4.2.zip/download">A
-    binary zip file</a></b>&mdash;Download this if you want to install
-    rEFInd and/or its filesystem drivers on an <i>x</i>86 or <i>x</i>86-64
-    computer and have no need to test rEFInd first by booting it on an
-    optical disc. This zip file package includes both <i>x</i>86 (aka IA32)
-    and <i>x</i>86-64 (aka <i>x</i>64, AMD64, or EM64T) versions of rEFInd.
-    Which you install depends on your architecture, as described on the <a
-    href="installing.html">Installing rEFInd</a> page.</li>
+    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)</a></b>&mdash;Download this if you
+    want to install rEFInd and/or its filesystem drivers on an <i>x</i>86
+    or <i>x</i>86-64 computer and have no need to test rEFInd first by
+    booting it on an optical disc. This zip file package includes both
+    <i>x</i>86 (aka IA32) and <i>x</i>86-64 (aka <i>x</i>64, AMD64, or
+    EM64T) versions of rEFInd. Which you install depends on your
+    architecture, as described on the <a href="installing.html">Installing
+    rEFInd</a> page.</li>
 
 <li><b><a
-    href="http://sourceforge.net/projects/refind/files/0.4.2/refind-cd-0.4.2.zip/download">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)</a></b>&mdash;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.</li>
+
+<li><b><a
+    href="http://sourceforge.net/projects/refind/files/0.4.3/refind-cd-0.4.3.zip/download">A
     CD-R image file</a></b>&mdash;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
index c31a8cfd3c9bdc79cc2eb3a9417ba4f1231918a5..7cee06dfcfe855dedc9116823306df583bc123a7 100644 (file)
@@ -15,7 +15,7 @@
 href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
 
 <p>Originally written: 3/14/2012; last Web page update:
-6/3/2012, referencing rEFInd 0.4.2</p>
+6/21/2012, referencing rEFInd 0.4.3</p>
 
 
 <p>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!</p>
index 42b5ca57e5d30445b778a1afda3bf33fb9fe4dae..8ea9ab1dae0856137b6f19f617f41c50825929ce 100644 (file)
@@ -15,7 +15,7 @@
 href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
 
 <p>Originally written: 3/14/2012; last Web page update:
-6/3/2012, referencing rEFInd 0.4.2</p>
+6/21/2012, referencing rEFInd 0.4.3</p>
 
 
 <p>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!</p>
index e8149a9aa2814f1451574eca6ace8ee64f41c014..df60b112a70d5d024d185a42bc8ac5d6a2fd81e0 100644 (file)
@@ -15,7 +15,7 @@
 href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
 
 <p>Originally written: 3/19/2012; last Web page update:
-6/3/2012, referencing rEFInd 0.4.2</p>
+6/21/2012, referencing rEFInd 0.4.3</p>
 
 
 <p>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!</p>
@@ -150,7 +150,7 @@ another possibility.</p>
     initial RAM disk is identified, rEFInd passes a suitable
     <tt>initrd=</tt> option to the kernel when it boots.</li>
 
-<p class="sidebar">rEFInd 0.2.1 and 0.2.2 used a filename of <tt>linux.conf</tt> to hold Linux kernel options; however, the Linux kernel developers plan to use this name themselves, so I've switched to <tt>refind_linux.conf</tt> as of rEFInd 0.2.3. For the moment, rEFInd still supports the <tt>linux.conf</tt> filename as a backup to <tt>refind_linux.conf</tt>, but <tt>linux.conf</tt> is now officially deprecated as a rEFInd configuration file, so you should rename your <tt>linux.conf</tt> file to <tt>refind_linux.conf</tt> if you're upgrading.</p>
+<p class="sidebar">rEFInd 0.2.1 and 0.2.2 used a filename of <tt>linux.conf</tt> to hold Linux kernel options; however, the Linux kernel developers plan to use this name themselves, so I've switched to <tt>refind_linux.conf</tt> as of rEFInd 0.2.3. Through version 0.4.2, rEFInd still supported the <tt>linux.conf</tt> filename as a backup to <tt>refind_linux.conf</tt>, but as of version 0.4.3, <tt>linux.conf</tt> no longer works, so you should rename your <tt>linux.conf</tt> file to <tt>refind_linux.conf</tt> if you're upgrading.</p>
 
 <li>rEFInd looks for a file called <tt>refind_linux.conf</tt> in the same
     directory as the kernel file. This file is a practical requirement for
index 82f9e1dd8c4a9f1027eeee65f4560fa8c00515d4..1a43dce0d97a980b7f7b7259be86096097ef4045 100644 (file)
@@ -14,7 +14,7 @@
 <p class="subhead">by Roderick W. Smith, <a
 href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
 
-<p>Last Web page update: 6/3/2012</p>
+<p>Last Web page update: 6/21/2012</p>
 
 
 <p>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!</p>
@@ -93,6 +93,8 @@ href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
 
 <ul>
 
+<li><b>0.4.3 (6/21/2012)</b>&mdash;The major user-visible change to this version is the addition of the <tt>use_graphics_for</tt> 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 <a href="configfile.html">"Configuring the Boot Manager"</a> 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 <tt>linux.conf</tt> as a valid alternative name for the <tt>refind_linux.conf</tt> 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 <a href="http://www.rodsbooks.com/refind/getting.html">downloads page.</a></li>
+
 <li><b>0.4.2 (6/3/2012)</b>&mdash;I've added a new <tt>dont_scan_dirs</tt> option to the configuration file, enabling creation of a directory-scanning "blacklist." See the <a href="configfile.html">"Configuring the Boot Manager"</a> page for details. This version also makes a couple of changes to the <tt>install.sh</tt> script. The first is a reminder for Mac users to update <tt>refind.conf</tt> 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 <tt>install.sh</tt> 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.)</li>
 
 <li><b>0.4.1 (5/25/2012)</b>&mdash;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 <tt>install.sh</tt> 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 <tt>HFS+ volume</tt>, rather than nothing at all (unlike other drivers, the HFS+ driver can't yet return the volume's true label).</li>
index 6fc7891ac116540659d9547a6880973ce980fedd..dec4ea19338dc1ac6fc7abe3aa66fe2e6bbbb730 100644 (file)
@@ -15,7 +15,7 @@
 href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
 
 <p>Originally written: 4/19/2012; last Web page update:
-6/3/2012, referencing rEFInd 0.4.2</p>
+6/21/2012, referencing rEFInd 0.4.3</p>
 
 
 <p>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!</p>
index 763d699d28276e6f08b702553f068484156baf94..582de71cfe344fbfeb0e1618f6239ebbc3c9e814 100644 (file)
@@ -15,7 +15,7 @@
 href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
 
 <p>Originally written: 3/14/2012; last Web page update:
-6/3/2012, referencing rEFInd 0.4.2</p>
+6/21/2012, referencing rEFInd 0.4.3</p>
 
 
 <p>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!</p>
@@ -231,8 +231,13 @@ href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
        caused by a truncated DevicePath to the shell, which includes the
        shell's pathname but not the device identifier.</li>
 
+    <li>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.</li>
+
     <li>The code is in need of review to search for memory leaks and
-       similar problems.</p>
+       similar problems.</li>
 
     </ul></li> <!-- Known bugs -->
 
index c115d77169b1d0b02d50c2388008bd380a88584e..7578084068284714d74af59f1d7357c03ce289c8 100644 (file)
@@ -15,7 +15,7 @@
 href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
 
 <p>Originally written: 3/14/2012; last Web page update:
-6/3/2012, referencing rEFInd 0.4.2</p>
+6/21/2012, referencing rEFInd 0.4.3</p>
 
 
 <p>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!</p>
index 902df494f93da66dd8af691cce34af391b096e47..2b24903589420ee0c6118b032eb1337dfe1ae43e 100644 (file)
@@ -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
 
index 7c4ea0faf012fabc893ed5789a074006f1d497ef..faaa5d59e755df3b174424515274445bed73a18c 100644 (file)
@@ -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
 
index bc44a2d8a46981d6ec1c36b9a5079c2c4b389611..bc24003b9e3f76eef828cfc77985bb5aecd84f3b 100755 (executable)
--- 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/
index 000b410a8a28651c80e505dd9172b156f03b3c26..4780dae17a11711811539645e4fe1ae22643660c 100644 (file)
@@ -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;
     }
 
   }
index ffb22fdc7a91485a685638dcaefdf838702ef7eb..f37f451bb8940a8bdc5c74cd4edaada26af41a8e 100644 (file)
@@ -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");
index 1beb3e76098953f54cc8cfd409b6bb803c08937e..221be00e8fb2dbb82f1f0355eb6066048d082759 100644 (file)
@@ -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);