]> code.delx.au - refind/blobdiff - BUILDING.txt
Version 0.4.0 release.
[refind] / BUILDING.txt
index 2c624c644d036f7934f96bbadce0e4b70206c774..7d5fbd2dab54a5b4806b0e1ba4ab50eff8843197 100644 (file)
@@ -24,9 +24,12 @@ 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.
 
-I've dropped ancillary programs, such as the ext2fs driver module and
-gptsync program, from rEFInd. You can still use these tools with rEFInd,
-but you'll need to install them separately.
+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.
+
+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
@@ -154,3 +157,93 @@ call install.sh as part of the binary package installation process.
 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 hang the computer.)
+
+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)
+   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. Note that 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.
+
+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 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.
+
+*CAUTION:* Install drivers for your system's architecture *ONLY*.
+Installing drivers for the wrong architecture causes some systems to hang
+at boot time.
+
+The drivers all rely on filesystem wrapper code created by rEFIt's author,
+Christoph Phisterer. 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.