]> code.delx.au - refind/blobdiff - BUILDING.txt
Fix drivers to work on Macs.
[refind] / BUILDING.txt
index 924ee8e79b030e9a3d4de56c6bebaa1c26f3504e..81404819ae721f8aba3a41b130887bbc2f63eead 100644 (file)
@@ -164,22 +164,30 @@ 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 system.)
+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 a few steps. Here's how I installed
-the toolkit:
+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 Makefile if you install somewhere else.
+   edit the EDK2BASE line in the Make.common file if you install somewhere
+   else.
 
 3) Type "cd /usr/local/UDK2010".
 
@@ -208,11 +216,23 @@ the toolkit:
    - 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)
+     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.)
     
@@ -221,11 +241,25 @@ the toolkit:
 
 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 Makefile's EDK2BASE variable. You can then type "make" to build all the
-drivers, or specify a filesystem type to build just it.
+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/). Most
-of the drivers are based on code from the Linux kernel.
+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.