From: srs5694 Date: Sun, 20 May 2012 17:36:11 +0000 (-0400) Subject: Misc. small changes. X-Git-Url: https://code.delx.au/refind/commitdiff_plain/fae4a8d3fada7d96cf0e50e13622a7ca72b17c0a Misc. small changes. --- diff --git a/BUILDING.txt b/BUILDING.txt index 2c624c6..924ee8e 100644 --- a/BUILDING.txt +++ b/BUILDING.txt @@ -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,75 @@ 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 system.) + +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: + +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. + +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. + +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 Makefile's EDK2BASE variable. You can then type "make" to build all the +drivers, or specify a filesystem type to build just it. + +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. diff --git a/CREDITS.txt b/CREDITS.txt index ca2cd37..ad7f478 100644 --- a/CREDITS.txt +++ b/CREDITS.txt @@ -16,6 +16,13 @@ I've incorporated into the current version. Specifically: rEFInd. See http://packages.debian.org/sid/refit for this version of the program. +* The filesystem drivers released with version 0.4.0 rely on a filesystem + wrapper created by Christoph Phisterer. They then passed through Oracle's + VirtualBox (https://www.virtualbox.org) and the Clover boot loader + project (https://sourceforge.net/projects/cloverefiboot/). The + filesystem-specific code comes from various sources, including Apple and + the Linux kernel. + * I replaced many of the original rEFIt icons with icons taken from the Oxygen Icons project, either from the Oxygen Refit package on its page (http://deviantdark.deviantart.com/art/Oxygen-Refit-70199755) or from the diff --git a/Make.common b/Make.common index 89fd914..d098e2e 100644 --- a/Make.common +++ b/Make.common @@ -74,7 +74,7 @@ endif LDFLAGS += -T $(LDSCRIPT) -shared -Bsymbolic -L$(EFILIB) -L$(GNUEFILIB) $(CRTOBJS) LIBS = -lefi -lgnuefi $(shell $(CC) $(ARCH3264) -print-libgcc-file-name) FORMAT = efi-app-$(ARCH) -FORMAT_DRIVER = efi-bsdrv-$ARCH) +FORMAT_DRIVER = efi-bsdrv-$(ARCH) # general rules @@ -91,9 +91,9 @@ SHLIB_TARGET = $(subst .efi,.so,$(TARGET)) $(SHLIB_TARGET): $(OBJS) $(LD) $(LOCAL_LDFLAGS) $(LDFLAGS) $(OBJS) -o $@ $(LOCAL_LIBS) $(LIBS) -$(TARGET): $(SHLIB_TARGET) - $(OBJCOPY) -j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel \ - -j .rela -j .reloc --target=$(FORMAT) $< $@ +#$(TARGET): $(SHLIB_TARGET) +# $(OBJCOPY) -j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel \ +# -j .rela -j .reloc --target=$(FORMAT) $< $@ endif diff --git a/Makefile b/Makefile index 9b6ee10..c21f2a8 100644 --- a/Makefile +++ b/Makefile @@ -10,19 +10,19 @@ LOADER_DIR=refind FS_DIR=filesystems LIB_DIR=libeg -# Build the Symbiote library itself. +# Build rEFInd, including libeg all: make -C $(LIB_DIR) make -C $(LOADER_DIR) # make -C $(FS_DIR) -filesystems: +fs: make -C $(FS_DIR) clean: make -C $(LIB_DIR) clean make -C $(LOADER_DIR) clean -# make -C $(FS_DIR) clean + make -C $(FS_DIR) clean # NOTE TO DISTRIBUTION MAINTAINERS: # The "install" target installs the program directly to the ESP diff --git a/docs/refind/todo.html b/docs/refind/todo.html index 4972a2a..61510f3 100644 --- a/docs/refind/todo.html +++ b/docs/refind/todo.html @@ -210,7 +210,10 @@ href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com

Perhaps this could be done via a separate tool that could be launched much like the shell or gptsync. -
  • Enabling users to eject removable media would be useful.
  • +
  • The media-ejection feature (F12) should be extended to work on + UEFI-based PCs and early Macs. At the moment, it relies on an + Apple-specific EFI extension, and I know of no standard EFI way to do + it.
  • I'd like to give the user the ability to set custom options on a single-boot basis, similar to what's possible in GRUB.
  • diff --git a/docs/refind/using.html b/docs/refind/using.html index aaf09f0..b1bc47f 100644 --- a/docs/refind/using.html +++ b/docs/refind/using.html @@ -187,6 +187,10 @@ href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com

    F10 Saves an image of the current screen in the file screenshot.bmp in the ESP's root directory + + F12 or (on some keyboards) Eject + Ejects removable media. This feature only works on some Macs, not on UEFI-based PCs. + Enter or spacebar Launches the currently-selected OS, utility, or built-in feature diff --git a/refind/Makefile b/refind/Makefile index 221016a..970c0ab 100644 --- a/refind/Makefile +++ b/refind/Makefile @@ -32,5 +32,9 @@ all: $(TARGET) include $(SRCDIR)/../Make.common +$(TARGET): $(SHLIB_TARGET) + $(OBJCOPY) -j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel \ + -j .rela -j .reloc --target=$(FORMAT) $< $@ + # EOF # DO NOT DELETE