]> code.delx.au - refind/blobdiff - BUILDING.txt
Added "kernel*" as Linux kernel matching string, since Gentoo uses
[refind] / BUILDING.txt
index 917a66a1e171cdaccbf8d547cf7b26d1f27090c8..4f6519372ae59aba73433e707327cb09abe0b302 100644 (file)
@@ -15,41 +15,33 @@ To compile rEFInd, you'll need the following:
 * One of the following:
 
   * The TianoCore EDK2 package
-    (http://sourceforge.net/projects/tianocore/). I've tested using the
-    UDK2010.SR1 and UDK2010.SR1.UP1 variants
-    (http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=UDK2010),
-    which are "frozen," rather than the main EDK2 development branch, which
-    is changing as the developers add features, fix bugs, and so on. Using
-    TianoCore EDK2 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.
+    (http://sourceforge.net/projects/tianocore/). I initially used the
+    UDK2010 package and others in that series, but beginning with rEFInd
+    0.8.2, I've been using UDK2014
+    (http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=UDK2014).
+    All of the UDK release are "frozen," rather than the main EDK2
+    development branch, which is changing as the developers add features,
+    fix bugs, and so on. See below for TianoCore setup instructions.
 
   * 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, 3.0q,
-    3.0r, and 3.0s, with the caveat that 3.0s works when I installed it via
-    a Gentoo package, but not when I installed it by compiling the source
-    code locally. Through mid-to-late 2012, most Linux distributions
-    delivered rather elderly versions of GNU-EFI, but many are catching up
-    by late 2012. You should check your GNU-EFI version number; you may
-    need to download the latest source code, compile it, and install it
-    locally. Between rEFInd version 0.2.7 and 0.6.1, the Makefiles assumed
-    a locally-compiled GNU-EFI package, but older and more recent versions
-    assume GNU-EFI installation in typical locations for
-    distribution-provided packages. The legacy BIOS boot support on
-    UEFI-based PCs doesn't work when rEFInd is compiled under GNU-EFI, so
-    as of rEFInd 0.4.6, GNU-EFI is no longer the primary build environment,
-    although it's easier to set up on a Linux system.
+    features that were added sometime between version 3.0s and 3.0u, so I
+    recommend using 3.0u (or conceivably later). You should check your
+    GNU-EFI version number; you may need to download the latest source
+    code, compile it, and install it locally. The Makefiles assume a
+    GNU-EFI package installed via a package manager. If you install from
+    source code, you may need to adjust those Makefiles' paths.
 
 Of the two toolkits, I prefer to use TianoCore because it produces binaries
-that can boot BIOS/legacy-mode OSes and because the TianoCore-produced
-binaries are about 20-30KiB smaller than those made by GNU-EFI. Also, I've
+that are about 20-30KiB smaller than those made by GNU-EFI, and I can
+easily build 32-bit binaries on my 64-bit Linux installations. Also, I've
 had problems on a 32-bit Mac Mini with the drivers produced by GNU-EFI
 hanging the system if I try to load more than one of them. (I haven't
 encountered this problem on UEFI-based PCs.) That said, the TianoCore EDK2
-package is much harder to install, so if you don't need the ability to boot
-BIOS/legacy OSes from rEFInd, GNU-EFI can work as well.
+package is much harder to install, so you may prefer to use GNU-EFI unless
+you have a specific need for the TianoCore toolkit. Automated build tools
+like the OpenSUSE Build Service (OBS) and the Ubuntu Personal Package
+Archive (PPA) mechanism don't yet support TianoCore.
 
 It's possible to 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
@@ -72,18 +64,17 @@ GCC or Microsoft's C compiler, but I haven't tested this.
 Preparing Your Development Kit
 ==============================
 
-If you don't care about booting BIOS-based OSes on UEFI PCs and if you're
-using Linux, GNU-EFI is the easiest way to compile rEFInd. I don't describe
-GNU-EFI's 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.
-
-If you need support for booting BIOS-based OSes on UEFI PCs, 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.
+If you're using Linux, GNU-EFI is the easiest way to compile rEFInd. I
+don't describe GNU-EFI's 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.
+
+You might also want to use the TianoCore toolkit 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
@@ -93,21 +84,21 @@ 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.UP1.P1 from
-   https://sourceforge.net/apps/mediawiki/tianocore/index.php?title=UDK2010.
+1) Download UDK2014.SR1.UP1.P1 from
+   https://sourceforge.net/apps/mediawiki/tianocore/index.php?title=UDK2014.
 
-2) Type "mkdir /usr/local/UDK2010". You can use another directory, but the
+2) Type "mkdir /usr/local/UDK2014". 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.tiano file if you install somewhere
    else.
 
-3) Type "cd /usr/local/UDK2010".
+3) Type "cd /usr/local/UDK2014".
 
-4) Unzip the downloaded file (UDK2010.SR1.UP1.P1.Complete.MyWorkSpace.zip)
-   in the current directory (/usr/local/UDK2010). This creates a handful of
+4) Unzip the downloaded file (UDK2014.SR1.UP1.P1.Complete.MyWorkSpace.zip)
+   in the current directory (/usr/local/UDK2014). This creates a handful of
    files, including a tarball and a couple of .zip files.
 
-5) Type "unzip UDK2010.SR1.UP1.MyWorkSpace.zip". This extracts the
+5) Type "unzip UDK2014.SR1.UP1.MyWorkSpace.zip". This extracts the
    platform-neutral portion of the development kit.
 
 6) Type "cd MyWorkSpace".
@@ -147,12 +138,15 @@ is a bit unclear about others. Here's how I installed the toolkit:
     to:
     *_GCC46_X64_ASM_FLAGS            = DEF(GCC46_ASM_FLAGS) -m64
 
-12) Type "make -C /usr/local/UDK2010/MyWorkSpace/BaseTools/Source/C".
+12) Type "make -C /usr/local/UDK2014/MyWorkSpace/BaseTools/Source/C".
     (This step is not documented on the EDK Web page.) Note that this
     requires the g++ compiler and UUID development libraries.
     
 13) Type "build" to build the main set of EDK2 files. This process is
-    likely to take a few minutes.
+    likely to take a few minutes. This step requires Python 2; if you have
+    Python 3 installed, you may need to adjust the default python for this
+    build (for instance, by typing "eselect python set python2.7" in
+    Gentoo).
 
 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
@@ -206,13 +200,13 @@ to the various GNU-EFI include files and libraries. Since rEFInd 0.6.2, the
 default Make.common file includes the following definitions:
 
 EFIINC          = /usr/include/efi
-GNUEFILIB       = /usr/lib64
-EFILIB          = /usr/lib64
-EFICRT0         = /usr/lib64
+GNUEFILIB       = /usr/lib
+EFILIB          = /usr/lib
+EFICRT0         = /usr/lib
 
 If you've installed GNU-EFI from source code, you may need to add "local"
 to those paths, as in "/usr/local/include/efi". You might need to change
-references to "lib64" to "lib32" or "lib" on some systems. Recall that you
+references to "lib" to "lib32" or "lib64" on some systems. Recall that you
 need at least GNU-EFI version 3.0l to build rEFInd, and until very
 recently, most distributions provided out-of-date versions of this package.
 
@@ -236,16 +230,16 @@ Installing rEFInd
 =================
 
 With rEFInd compiled, you can install it. The easiest way to do this is
-with the install.sh script, which works on both Linux and Mac OS X.
+with the refind-install script, which works on both Linux and Mac OS X.
 Alternatively, you can type "make install" to install using this script.
 Note that this script copies files to the ESP and uses "efibootmgr" (on
 Linux) or "bless" (on OS X) to add rEFInd to the firmware's boot loader
 list. The docs/refind/installing.html file provides more details on this
 script and its use.
 
-If install.sh doesn't work for you or if you prefer to do the job manually,
-you may. On a UEFI-based system, you'll want to copy files on the ESP as
-follows:
+If refind-install doesn't work for you or if you prefer to do the job
+manually, you may. On a UEFI-based system, you'll want to copy files on the
+ESP as follows:
 
 * Create a directory for rEFInd, such as EFI/refind.
 * Copy refind/refind_ia32.efi or refind_x64.efi to the ESP's EFI/refind
@@ -261,16 +255,16 @@ docs/refind/installing.html file for details.
 Note to Distribution Maintainers
 ================================
 
-The install.sh script, and therefore the "install" target in the Makefile,
-installs the program directly to the ESP and it modifies the *CURRENT
-COMPUTER's* NVRAM. Thus, you should *NOT* use this target as part of the
-build process for your binary packages (RPMs, Debian packages, etc.).
-(Gentoo could use it in an ebuild, though....) You COULD, however, install
-the files to a directory somewhere (/usr/share/refind or whatever) and then
-call install.sh as part of the binary package installation process. Placing
-the files directly in /boot/efi/EFI/{distname}/refind and then having a
-post-install script call efibootmgr is probably the better way to go,
-but this assumes that the ESP is mounted at /boot/efi.
+The refind-install script, and therefore the "install" target in the
+Makefile, installs the program directly to the ESP and it modifies the
+*CURRENT COMPUTER's* NVRAM. Thus, you should *NOT* use this target as part
+of the build process for your binary packages (RPMs, Debian packages,
+etc.). (Gentoo could use it in an ebuild, though....) You COULD, however,
+install the files to a directory somewhere (/usr/share/refind or whatever)
+and then call refind-install as part of the binary package installation
+process. Placing the files directly in /boot/efi/EFI/{distname}/refind and
+then having a post-install script call efibootmgr is probably the better
+way to go, but this assumes that the ESP is mounted at /boot/efi.
 
 
 Compiling the EFI Filesystem Drivers
@@ -288,10 +282,10 @@ builds with TianoCore.
 To install drivers, you can type "make install" in the "filesystems"
 directory. This copies all the drivers to the
 "/boot/efi/EFI/refind/drivers" directory. Alternatively, you can copy the
-files you want manually. As of version 0.4.8, the install.sh script
-includes an optional "--drivers" option that will install the drivers along
-with the main rEFInd program, but to the drivers_{arch} subdirectory of the
-main rEFInd installation directory.
+files you want manually. The refind-install script includes an optional
+"--drivers" option that will install the drivers along with the main rEFInd
+program, but to the drivers_{arch} subdirectory of the main rEFInd
+installation directory.
 
 *CAUTION:* Install drivers for your system's architecture *ONLY*.
 Installing drivers for the wrong architecture causes some systems to hang
@@ -303,3 +297,25 @@ Christoph Pfisterer. Most of the drivers seem to have passed through
 Oracle's VirtualBox project (https://www.virtualbox.org) and the Clover
 boot loader project (https://sourceforge.net/projects/cloverefiboot/),
 which I used as the source for this build.
+
+Adding Support for Network Boot
+===============================
+
+rEFInd provides EXPERIMENTAL support for booting over the network using
+iPXE (http://ipxe.org) as a means to receive the payload. In order to
+enable this feature you'll want to follow these instructions:
+
+* cd net/
+* make source
+* make netboot
+* copy bin/ipxe.efi and bin/ipxe_discover.efi to the EFI volume at EFI/tools/
+
+Note that you may need to install additional development packages, such as
+libiberty-dev and binutils-dev, in addition to those needed to build rEFInd
+itself.
+
+My own tests show this support to work under optimal conditions; however,
+architecture (EFI vs. BIOS) detection may not work, and some computers will
+hang or won't retrieve boot files from the network. For these reasons, this
+support is disabled by default in rEFInd, and I do not provide iPXE
+binaries.