]> code.delx.au - refind/blob - docs/refind/drivers.html
Added mention of LKL driver project to drivers.html.
[refind] / docs / refind / drivers.html
1 <?xml version="1.0" encoding="utf-8" standalone="no"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
3 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
4
5 <html xmlns="http://www.w3.org/1999/xhtml">
6 <head>
7 <title>The rEFInd Boot Manager: Using EFI Drivers</title>
8 <link href="../Styles/styles.css" rel="stylesheet" type="text/css" />
9 </head>
10
11 <meta name="viewport" content="width=device-width, initial-scale=1">
12
13 <body>
14 <h1>The rEFInd Boot Manager:<br />Using EFI Drivers</h1>
15
16 <p class="subhead">by Roderick W. Smith, <a
17 href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
18
19 <p>Originally written: 4/19/2012; last Web page update:
20 10/9/2016, referencing rEFInd 0.10.4</p>
21
22
23 <p>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>
24
25 <table border="1">
26 <tr>
27 <td>Donate $1.00</td>
28 <td>Donate $2.50</td>
29 <td>Donate $5.00</td>
30 <td>Donate $10.00</td>
31 <td>Donate $20.00</td>
32 <td>Donate another value</td>
33 </tr>
34 <tr>
35
36 <td>
37 <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
38 <input type="hidden" name="cmd" value="_donations">
39 <input type="hidden" name="business" value="rodsmith@rodsbooks.com">
40 <input type="hidden" name="lc" value="US">
41 <input type="hidden" name="no_note" value="0">
42 <input type="hidden" name="currency_code" value="USD">
43 <input type="hidden" name="amount" value="1.00">
44 <input type="hidden" name="item_name" value="rEFInd Boot Manager">
45 <input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHostedGuest">
46 <input type="image" src="donate.png" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
47 </form>
48 </td>
49
50 <td>
51 <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
52 <input type="hidden" name="cmd" value="_donations">
53 <input type="hidden" name="business" value="rodsmith@rodsbooks.com">
54 <input type="hidden" name="lc" value="US">
55 <input type="hidden" name="no_note" value="0">
56 <input type="hidden" name="currency_code" value="USD">
57 <input type="hidden" name="amount" value="2.50">
58 <input type="hidden" name="item_name" value="rEFInd Boot Manager">
59 <input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHostedGuest">
60 <input type="image" src="donate.png" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
61 </form>
62 </td>
63
64
65 <td>
66 <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
67 <input type="hidden" name="cmd" value="_donations">
68 <input type="hidden" name="business" value="rodsmith@rodsbooks.com">
69 <input type="hidden" name="lc" value="US">
70 <input type="hidden" name="no_note" value="0">
71 <input type="hidden" name="currency_code" value="USD">
72 <input type="hidden" name="amount" value="5.00">
73 <input type="hidden" name="item_name" value="rEFInd Boot Manager">
74 <input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHostedGuest">
75 <input type="image" src="donate.png" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
76 </form>
77 </td>
78
79 <td>
80 <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
81 <input type="hidden" name="cmd" value="_donations">
82 <input type="hidden" name="business" value="rodsmith@rodsbooks.com">
83 <input type="hidden" name="lc" value="US">
84 <input type="hidden" name="no_note" value="0">
85 <input type="hidden" name="currency_code" value="USD">
86 <input type="hidden" name="amount" value="10.00">
87 <input type="hidden" name="item_name" value="rEFInd Boot Manager">
88 <input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHostedGuest">
89 <input type="image" src="donate.png" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
90 </form>
91 </td>
92
93 <td>
94 <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
95 <input type="hidden" name="cmd" value="_donations">
96 <input type="hidden" name="business" value="rodsmith@rodsbooks.com">
97 <input type="hidden" name="lc" value="US">
98 <input type="hidden" name="no_note" value="0">
99 <input type="hidden" name="currency_code" value="USD">
100 <input type="hidden" name="amount" value="20.00">
101 <input type="hidden" name="item_name" value="rEFInd Boot Manager">
102 <input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHostedGuest">
103 <input type="image" src="donate.png" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
104 </form>
105 </td>
106
107 <td>
108 <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
109 <input type="hidden" name="cmd" value="_donations">
110 <input type="hidden" name="business" value="rodsmith@rodsbooks.com">
111 <input type="hidden" name="lc" value="US">
112 <input type="hidden" name="no_note" value="0">
113 <input type="hidden" name="currency_code" value="USD">
114 <input type="hidden" name="item_name" value="rEFInd Boot Manager">
115 <input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHostedGuest">
116 <input type="image" src="donate.png" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
117 </form>
118 </td></tr>
119 </table>
120
121 <hr />
122
123 <p>This page is part of the documentation for the rEFInd boot manager. If a Web search has brought you here, you may want to start at the <a href="index.html">main page.</a></p>
124
125 <hr />
126
127 <div style="float:right; width:55%">
128
129 <p>Beginning with version 0.2.7, rEFInd has been able to load EFI drivers, and as of version 0.4.0, it has shipped with some EFI filesystem drivers. Although EFI implementations should be able to load drivers prior to rEFInd's launch, in my experience, most EFI implementations offer such poor control over EFI driver loading that they can't be counted on to do this. Thus, if you want to use EFI drivers, rEFInd's ability to do so can be useful. This page tells you why you might want to use drivers, how you can install and use rEFInd's own drivers, where you can go to find other drivers, and provides tips on a few specific drivers.</p>
130
131 </div>
132
133 <div class="navbar">
134
135 <h4 class="tight">Contents</h4>
136
137 <ul>
138
139 <li class="tight"><a href="#why">Why Should You Use Drivers?</li>
140
141 <li class="tight"><a href="#installing">Installing rEFInd's EFI Drivers</a></li>
142
143 <li class="tight"><a href="#selecting">Selecting an EFI Driver</a></li>
144
145 <li class="tight"><a href="#finding">Finding Additional Drivers</a></li>
146
147 <li class="tight"><a href="#notes">Notes on Specific Drivers</a></li>
148
149 </ul>
150
151 </div>
152
153 <br/>
154 <a name="why">
155 <h2>Why Should You Use EFI Drivers?</h2>
156 </a>
157
158 <p>EFI supports drivers, which can activate hardware or filesystems in the pre-boot environment. At the moment, EFI drivers are few and far between; but you can or might want to use them for various reasons:</p>
159
160 <ul>
161
162 <!-- <p class="sidebar"><b>Tip:</b> Some Linux installation media come as <i>hybrid ISO</i> files, which can be written to either optical discs or USB flash drives for installation. Some of these media, though, are useless for installing to EFI systems from USB flash drives&mdash;unless your computer supports ISO-9660 on non-optical media. rEFInd's ISO-9660 driver provides this support. To use such a hybrid image from USB flash drive, you must boot using rEFInd on another disk that has the ISO-9660 driver installed. rEFInd should then provide an option to boot from the USB flash drive. I cannot guarantee that the installer will boot at this point, but it might.</p> -->
163
164 <li>You can load a filesystem driver to gain access to files on a filesystem other than FAT (or HFS+ on Macs or ISO-9660 on some systems). This is most likely to be useful on a Linux installation, since a filesystem driver can enable you to store a Linux kernel with EFI stub loader or for use by ELILO on a Linux-native filesystem if your EFI System Partition (ESP) is getting crowded.</li>
165
166 <li>You can load a driver for a plug-in disk controller to give the EFI access to its disks. Note that this is <i>not</i> required if you place your boot loader (and perhaps your OS kernel) on another disk, or if the plug-in disk controller includes EFI-capable firmware. It could be handy, perhaps in conjunction with a filesystem driver, to enable the EFI to read a boot loader or kernel from a disk on a plug-in controller, though.</li>
167
168 <li>You can load a driver for a plug-in network card to enable the computer to boot from the network, or to access the network without booting an OS. Note that rEFInd does not currently support network boots itself, though.</li>
169
170 <li>You can load a video card driver to set an appropriate video mode or to support a plug-in card that lacks EFI support in ts own firmware.</li>
171
172 </ul>
173
174 <p>Note that most of these uses are theoretical, at least to me; I don't know of any specific examples of EFI drivers (available as separate files) for disk controller hardware, network cards, or video cards. Such drivers are often embedded in the firmware of the devices themselves, and should be loaded automatically by the EFI. Chances are good that a few such drivers are available, unknown to me, and more may become available in the future. If you happen to have a device and need support for it under EFI, searching for drivers is certainly worth doing.</p>
175
176 <p>To the best of my knowledge, the best reason to want EFI driver support in rEFInd is to provide access to filesystems. Although EFI filesystem driver choices are currently somewhat limited, those that are available can help to improve your installation and configuration options, particularly if you've found yourself "boxed in" by awkward installation or bugs, such as the dinky ESP that Ubuntu creates by default or the bug that prevents a Linux kernel with <a href="http://www.rodsbooks.com/efi-bootloaders/efistub.html">EFI stub loader support</a> from booting from the ESP of at least some Macs.</p>
177
178 <p>As a side note, using an ISO-9660 driver can theoretically help you keep the size of a custom Linux boot CD/DVD down to a reasonable value. This is because EFI systems normally boot from optical discs by reading a FAT image file in El Torito format and treating that file as an ESP. If you need to store the kernel both in that file and directly in the ISO-9660 filesystem (to maintain bootability on BIOS systems), that can represent an unwanted extra space requirement. Placing rEFInd and an ISO-9660 driver in the FAT image file should enable you to store the kernel on the disc only once. Unfortunately, this doesn't work in practice. When the ISO-9660 driver is loaded from the El Torito image, the driver discovers that the optical disc is in use and refuses to access it. It's possible to use EFI shell commands to give the ISO-9660 driver access to the shell device, but this causes the El Torito access to go away, which means that anything loaded from the El Torito image (such as rEFInd) is likely to malfunction. Also, some EFI implementations include ISO-9660 drivers, so you might not need a separate ISO-9660 driver if you're building a disc for a particular computer.</p>
179
180 \ 2<a name="installing">
181 <h2>Installing rEFInd's EFI Drivers</h2>
182 </a>
183
184 <p>If you install rEFInd via the <tt>refind-install</tt> script or by installing an RPM or Debian package in a Linux distribution, the script should install the driver that matches the filesystem on which your kernels are stored automatically, with a couple of important caveats:</p>
185
186 <ul>
187
188 <li>The driver must be included with the rEFInd package. As described in the next section, <a href="#selecting">Selecting an EFI Driver,</a> drivers for ext2fs, ext3fs, ext4fs, ReiserFS, Btrfs, and a few non-native filesystems come with rEFInd. If your kernels reside on XFS, JFS, ZFS, or some other more exotic filesystem, you'll need to track down drivers elsewhere, as described in <a href="#finding">Finding Additional Drivers,</a> and install them manually.</li>
189
190 <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>
191
192 <li>If you run <tt>refind-install</tt> from OS X, the script installs only the ext4fs driver, and that only if the script finds an existing Linux partition. Thus, if you install rEFInd <i>before</i> installing Linux, chances are <tt>refind-install</tt> will not install any Linux driver. Also, if you use any filesystem other than ext2/3/4fs to hold your kernel, <tt>refind-install</tt> won't install the correct driver. If you install rEFInd followed by Linux and want to use rEFInd's driver, you can either re-install rEFInd or install the appropriate driver manually. The <tt>refind-install</tt> script installs all the available drivers if you pass it the <tt>--alldrivers</tt> option. (I do <i>not</i> recommend using this feature except for creating general-purpose USB flash drives with rEFInd, since having too many drivers can cause various problems.) See the <a href="installing.html">Installing rEFInd</a> page for details.</li>
193
194 </ul>
195
196 <p>rEFInd's filesystem drivers reside in the <tt>refind/drivers_<tt class="variable">arch</tt></tt> subdirectory of the rEFInd <tt>.zip</tt> file, where <tt class="variable">arch</tt> is a CPU architecture code, such as <tt>x64</tt> or <tt>ia32</tt>. If you installed rEFInd using an RPM or Debian package, chances are the relevant files will be stored in <tt>/usr/share/refind/refind/drivers_x64/</tt> or a similar location. You can type <tt class="userinput">find /usr/share/ -name "ext4*"</tt> to find the exact location, or use your package manager to list all the files installed from the <tt>refind</tt> package. The files are named after the filesystems they handle, such as <tt>ext4_x64.efi</tt> for the x86-64 ext4fs driver. You should copy the files for the filesystems you want to use to (You may need to create this subdirectory.)</p>
197
198 <p>To install a driver, you must copy it from the package <tt>.zip</tt> file or from where the rEFInd RPM or Debian package placed it to the <tt>drivers</tt> or <tt>drivers_<tt class="variable">arch</tt></tt> subdirectory of the main rEFInd installation directory. The main rEFInd directory is usually either <tt>EFI/refind</tt> or <tt>EFI/BOOT</tt> on the EFI System Partition (ESP). How to identify and access the ESP varies from one OS to another:</p>
199
200 <ul>
201
202 <li>Under Linux, the ESP is normally mounted at <tt>/boot/efi</tt>, or sometimes <tt>/boot</tt>.</li>
203
204 <li>On OS X, the ESP is not normally mounted, but the <tt>mountesp</tt> script that comes with rEFInd will mount it and identify the mount point.</li>
205
206 <li>Windows also does not normally mount the ESP, but it can be mounted from an <i>Administrator</i> command prompt window by typing <tt class="userinput">mountvol S: /S</tt>. (You can change <tt>S:</tt> to another drive identifier, if you like.)</li>
207
208 </ul>
209
210 <p>Be careful to install drivers only for your own architecture. Attempting to load drivers for the wrong CPU type will cause a small delay at best, or may cause the computer to crash at worst. I've placed rEFInd's drivers in directories that are named to minimize this risk, but you should exercise care when copying driver files.</p>
211
212 <p class="sidebar"><b>Warning:</b> <i>Do not</i> place EFI program files in your driver directories! Unfortunately, EFI uses the same <tt>.efi</tt> filename extension to identify both EFI program files and EFI drivers. Therefore, rEFInd can't distinguish between the two prior to loading them, and if you place program files in a drivers directory, rEFInd will run the EFI program file when it does its driver scan.</p>
213
214 <p>When you reboot after installing drivers, rEFInd should automatically detect and use the drivers you install. There's likely to be an extra delay, typically from one to five seconds, as rEFInd loads the drivers and tells the EFI to detect the filesystems they handle. For this reason, and because of the possibility of drivers harboring bugs, I recommend installing only those drivers that you need. If you like, you can install drivers you don't plan on using to some other directory, such as <tt>/drivers</tt> on the ESP's root. You can then load these drivers manually with the EFI shell's <tt>load</tt> command if the need arises in the future. You can then tell the shell to re-assign drive identifiers with <tt>map -r</tt>:</p>
215
216 <pre class="listing">
217 fs0: <tt class="userinput">load btrfs_x64.efi</tt>
218 fs0: <tt class="userinput">map -r</tt>
219 </pre>
220
221 <a name="selecting">
222 <h2>Selecting an EFI Driver</h2>
223 </a>
224
225 <p class="sidebar"><b>Warning:</b> When compiled with GNU-EFI, rEFInd's drivers hang when run on my 32-bit Mac Mini. The TianoCore-compiled versions are fine, and the GNU-EFI-built binaries are fine on a 32-bit VirtualBox. The 64-bit GNU-EFI-built versions are fine on a MacBook Pro. Thus, the problem is very limited in scope. The problem can be quite serious if you run into it, though, since you must bypass rEFInd to boot the computer. In debugging the problem, I found that a key funtion was being entered mid-function, which suggests either an EFI bug or a problem with the compiler or related tools. In any event, the solution is simple: Use driver binaries built with TianoCore if you have a 32-bit Mac.</p>
226
227 <p>Since version 0.4.0, rEFInd has shipped with a small collection of read-only EFI filesystem drivers. These are:</p>
228
229 <ul>
230
231 <li><b>Ext2fs</b>&mdash;This driver originated with rEFIt. It's useful for
232 reading Linux kernels from a separate <tt>/boot</tt> partition, or even
233 from a root (<tt>/</tt>) filesystem, if you use ext2fs on it. Although
234 it's called an "ext2fs" driver, it also works with ext3fs.</li>
235
236 <li><b>Ext4fs</b>&mdash;Stefan Agner <a
237 href="https://github.com/falstaff84/rEFInd">modified the rEFIt/rEFInd
238 ext2fs driver</a> so that it could handle ext4fs. I'm including this as
239 a separate driver from the ext2fs driver, although the ext4fs version
240 can handle ext2fs and ext3fs, too. Providing both drivers enables easy
241 filesystem separation&mdash;for instance, you can use ext2fs on a
242 <tt>/boot</tt> partition and ext4fs on your root (<tt>/</tt>) partition,
243 to have the EFI scan only the former. This driver has some limitations
244 and may not work with all ext4 filesystems. Although it supports (as of
245 version 0.10.4) 64-bit pointers, this support is untested on over-16TiB
246 volumes. As of version 0.6.1, this driver supports the <tt>meta_bg</tt>
247 feature, which can also be used on ext2fs and ext3fs. Thus, it can
248 handle some ext2fs and ext3fs partitions that the ext2fs driver can't
249 handle. You can learn about your ext2/3/4 filesystem features by typing
250 <tt class="userinput">dumpe2fs <i>/dev/sda2</i> | grep features</tt>,
251 changing <tt class="userinput"><i>/dev/sda2</i></tt> to your
252 filesystem's device.</li>
253
254 <li><b>ReiserFS</b>&mdash;This driver originated with rEFIt. It can be used
255 in the same way as the ext2fs and ext4fs drivers. <b>Caution:</b> If you
256 use this driver, you should use the <tt>notail</tt> option in Linux's
257 <tt>/etc/fstab</tt> file for the partition(s) you want the EFI to read.
258 This is because the driver doesn't properly handle ReiserFS's
259 "tail-packing" feature, so files can seem to be corrupted in EFI if you
260 use this feature, which is disabled by <tt>notail</tt>. In my tests,
261 this is the fastest of rEFInd's EFI filesystem drivers, so if you find
262 your kernel load times are slow, you might consider moving your kernel
263 to a ReiserFS <tt>/boot</tt> partition. (Such problems affect a small
264 subset of EFI-based computers.)</li>
265
266 <li><b>Btrfs</b>&mdash;</b>Samuel Liao contributed this driver, which is
267 based on the rEFIt/rEFInd driver framework and algorithms from the GRUB
268 2.0 Btrfs driver. I've tested this driver with simple one-partition
269 filesystems on several installations, and with a filesystem that spans
270 two physical devices on one (although I've made no attempt to ensure
271 that the driver can actually read files that span both devices). Samuel
272 Liao has used the driver with a compressed Btrfs volume. The driver will
273 handle subvolumes, but you may need to add kernel options if you're
274 booting a Linux kernel directly from a filesystem that uses subvolumes.
275 For instance, when booting Ubuntu from Btrfs, <tt>also_scan_dirs +
276 @/boot</tt> must be set in <tt>refind.conf</tt> and
277 <tt>rootflags=subvol=@</tt> must be added to the kernel options in
278 <tt>refind_linux.conf</tt>. Without the first of these options, rEFInd
279 can not locate the kernel; and without the second, the boot fails with a
280 message to the effect that the initial RAM disk could not find
281 <tt>/sbin/init</tt>. rEFInd 0.10.0 adds <tt>@/boot</tt> as a standard
282 option to <tt>also_scan_dirs</tt>, and its <tt>refind-install</tt> and
283 <tt>mkrlconf</tt> scripts should pick up the root flags, assuming the
284 system is booted into the regular installation. These additions make it
285 easier to set up rEFInd to work with Btrfs.</li>
286
287 <p class="sidebar"><b>Tip:</b> If you partition a USB flash drive and use <tt>dd</tt> to copy Linux <tt>.iso</tt> images to the drive's individual partitions, the rEFInd ISO-9660 driver enables rEFInd to boot multiple Linux distributions' installers from the USB flash drive. I can't promise this feature will work with all distributions, but it does work with some.</p>
288
289 <li><b>ISO-9660</b>&mdash;This driver originated with rEFIt's author, but
290 he never released a final version. Its code was improved by Oracle for
291 use in its VirtualBox product, and then further modified by the authors
292 of the <a
293 href="https://sourceforge.net/projects/cloverefiboot/">Clover</a> boot
294 loader. If your firmware doesn't provide its own ISO-9660 driver, this
295 one can be helpful; however, you may need to install it on your hard
296 disk before you can read an optical disc.</li>
297
298 <li><b>HFS+</b>&mdash;Oracle wrote this driver, apparently with some code
299 taken from open source Apple examples. It was then further modified by
300 the Clover authors. I expect this driver to have limited appeal to most
301 rEFInd users. Macs don't need it, since Apple's EFI implementation
302 provides its own HFS+ driver, and HFS+ isn't normally used on
303 UEFI-based PCs. Some CDs are mastered with both ISO-9660 and HFS+, or
304 even with HFS+ alone, and it's conceivable that an HFS+ driver would be
305 useful when accessing such discs. Also, one unusual feature of this
306 driver is that it can read files from within an Apple LVM setup, which
307 Apple's own EFI HFS+ driver can't do. The upshot of this feature is
308 that if you load this driver on a Mac that uses Apple's LVM, rEFInd is
309 likely to show two OS X boot options. Ordinarily this is pointless, but
310 it could be helpful if your Recovery HD volume becomes damaged. I'm
311 providing the driver mainly because it compiled cleanly with no extra
312 work, aside from providing a Makefile entry for it.</li>
313
314 <p class="sidebar"><b>Warning:</b> I've received multiple reports of system hangs when using the NTFS driver; however, I've been unable to replicate the problem. (The problem is probably triggered either by interactions with specific EFIs or by unique features of the "problem" NTFS volumes.) I therefore recommend avoiding the NTFS driver unless it's absolutely necessary. Various rEFInd versions include fixes intended to address this problem, but I can't be sure it's been completely eliminated.</p>
315
316 <li><b>NTFS</b>&mdash;Samuel Liao contributed this driver, which uses the
317 rEFIt/rEFInd driver framework. Note that this driver is
318 <i><b>not</b></i> required to boot Windows with rEFInd, since Windows
319 stores its EFI boot loader on the (FAT) ESP, and the BIOS boot process
320 (generally used when dual-booting on a Mac) relies only on the
321 partition's boot sector, which is read without the benefit of this
322 driver. Reasons to use this driver include:
323 <ul>
324 <li>If you want to use Windows to write large files, such as RAM
325 disk images, to be read from EFI.</li>
326 <li>If you have a Mac and NTFS data partitions, loading this driver
327 should exclude those data partitions from the boot menu.</li>
328 <li>If you have a Mac that dual-boots with Windows, using this driver
329 should provide NTFS volume names in the boot menu.</li>
330 </ul>
331 </li>
332
333 </ul>
334
335 <p>All of these drivers rely on filesystem wrapper code written by rEFIt's author, Christoph Phisterer.</p>
336
337 <p>Although Linux filesystems are all case-sensitive, these drivers treat them in a case-insensitive way. Symbolic links work; however, rEFInd 0.6.11 and later ignore symbolic links, since many distributions use them in a way that creates redundant or non-functional entries in the rEFInd menu. You should be able to use hard links if you want to use a single kernel file in multiple ways (say for two distributions).</p>
338
339 <a name="finding">
340 <h2>Finding Additional EFI Drivers</h2>
341 </a>
342
343 <p>As already noted, I know of few EFI drivers for EFI hardware, aside from those that are built into motherboards' EFI implementations. I do, however, know of a few EFI filesystem drivers, in addition to those provided with rEFInd:</p>
344
345 <ul>
346
347 <li><b><a href="http://efi.akeo.ie">Pete Batard's efifs drivers</a></b>&mdash;This project is an EFI driver wrapper around GRUB 2's filesystem drivers. Once compiled, the result is that GRUB 2's drivers become standalone EFI filesystem drivers, loadable independently or by rEFInd. (rEFInd version 0.8.3 or later is required.) At present (driver version 1.0; July 2016), several drivers, including NTFS, exFAT, ext2fs, ReiserFS, Btrfs, JFS, and XFS, are usable. The last time I tested them (version 0.7), some drivers were slow, and they hung on some computers, such as one of my Macs. They may have improved since then, and are likely to improve more in the future. Note that the ext2fs driver from this set works with ext3fs and ext4fs, too. In addition to the main link, you can check the <a href="https://github.com/pbatard/efifs">github repository</a> for the source code.</li>
348
349 <li><b><a href="https://github.com/efidroid/uefi_apps_LKL">The LKL driver project</a></b>&mdash;I have yet to look closely at this project, but I think it's a porting of the Linux kernel's filesystem drivers to EFI. The developer stated on the EFI developers' mailing list that they aren't yet stable, as of November 2016.</li>
350
351 <li><b><a href="http://refit.sourceforge.net">rEFIt's ext2fs and ReiserFS drivers</a></b>&mdash;You can gain read-only access to ext2fs, ext3fs, and ReiserFS volumes with these drivers, originally written by Christoph Pfisterer. You can use the binaries in the <tt>refit-bin-0.14/efi/tools/drivers</tt> directory of the binary package directly on a Mac. On a UEFI-based PC, though, you'll need to break the Mac-style "fat" binary into its 32- and 64-bit components. You can use my <a href="http://www.rodsbooks.com/thin/index.html"><tt>thin</tt></a> program for this job. As a practical matter, there's no advantage to using these drivers over rEFInd's drivers, since the latter are updated versions of the former.</li>
352
353 <li><b><a href="https://sourceforge.net/projects/cloverefiboot/">Clover EFI's ISO-9660, ext2fs, ext4fs, and HFS+ drivers</a></b>&mdash;This project is an offshoot of TianoCore, the main UEFI project. It's primarily a Hackintosh boot loader, but it includes drivers for <a href="http://cloverefiboot.svn.sourceforge.net/viewvc/cloverefiboot/VBoxFsDxe/">ISO-9660, ext2fs, ext4fs, and HFS+;</a> however, building them requires a fair amount of expertise. These drivers are closely related to rEFInd's own drivers. Thus, as with the rEFIt drivers, there's likely to be no advantage to using the Clover drivers over the rEFInd drivers.</li>
354
355 <li><b><a href="http://www.osx86.net/view/2571-clover_v2_r384__efi_bootloader_pkg_+_gpt_efi_tools.html">Clover's EFI Tools package</a></b>&mdash;This osx86.net thread includes links to a package called <tt> EFI_Tools_Clover_v2_r1888_EN.zip</tt>, which holds an OS X application (a directory with a <tt>.app</tt> extension, as seen from other platforms) with a number of drivers in the <tt>Contents/Resources/EFI/drivers64</tt> directory (and an equivalent for 32-bit binaries). Some of these, such as keyboard drivers, are unlikely to be useful unless your system is badly broken as delivered. Three that caught my eye, however, are <tt>VBoxExt2-64.efi</tt>, <tt>VBoxIso9600-64.efi</tt>, and <tt>NTFS-64.efi</tt>. The first two of those are presumably variants on rEFInd's drivers, but the NTFS driver is not. I don't know this driver's provenance, so I'm reluctant to recommend its use, but it bears mentioning.</li>
356
357 <li><b><a href="https://www.virtualbox.org/browser/vbox/trunk/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxFsDxe">VirtualBox's HFS+ and ISO-9660 drivers</a></b>&mdash;These drivers are available in source code form, and come with VirtualBox binaries. I've not attempted to compile them myself, but I've seen a report that suggests they may include assumptions that require use of <a href="http://www.mingw.org/">MinGW,</a> a GCC-based compiler for Windows (and cross-compiler to build Windows executables under Linux). I don't know of a source for binaries suitable for use on EFI-based computers; if you want to use them, you'll need to figure out how to compile them yourself. As noted earlier, rEFInd's drivers are closely related to these.</li>
358
359 <li><b>Ext2Pkg</b>&mdash;This driver, based on <a href="https://bitbucket.org/alinrus/ext2pkg">bitbucket</a> and with a backup on <a href="https://github.com/the-ridikulus-rat/Tianocore_Ext2Pkg">github,</a> appears to be an ext2fs/ext3fs driver built independently of the driver written by Christoph Pfisterer. The linked-to sites provide access to source code via <tt>git</tt> but do not provide binaries. When I built binaries, they failed to work. Under VirtualBox, the driver loaded but then hung when I tried to access an ext2 filesystem. On a 32-bit Mac Mini, I got error messages when I tried to access an ext2 filesystem. As I write, the code was last updated in March of 2012. If you check the project and it's been updated more recently, it might be worth trying. Otherwise, I can't recommend this driver. I mention it here only in case it improves in the future.</li>
360
361 <li><b>Paragon's UFSD</b>&mdash;According to <a href="http://blog.paragon-software.com/?p=2951">this blog post,</a> Paragon Software has ported its <a href="http://www.paragon-software.com/technologies/ufsd.html">Universal File System Drivers (UFSD)</a> to EFI, providing "transparent access to NTFS, HFS+, ExFAT, and ExtFS" (sic). The entry doesn't provide any download links, and it's unclear if the product is (or will be) available for free or on a pay basis. I haven't tried these drivers, so I can't comment on their quality.</li>
362
363 </ul>
364
365 <p>The rEFIt, Clover, and VirtualBox drivers are related, and all of them
366 have fed into rEFInd's drivers. Specific versions can have their own
367 quirks, though. For instance, the Clover (and I suspect VirtualBox) drivers
368 don't return volume labels, which causes rEFInd to display loaders on those
369 volumes as being on a disk called <tt>Unknown</tt>. (I fixed that bug for
370 rEFInd's version, and it wasn't present in the original rEFIt drivers.)
371 Most of these drivers also suffer from speed problems on some computers.
372 This is worst with the ext2fs drivers under VirtualBox; on my main
373 computer, that combination takes 3 minutes to load a Linux kernel and
374 initial RAM disk file! Most real computers don't suffer nearly so badly,
375 but some can take an extra five seconds or so to boot a kernel. I've fixed
376 the worst of the speed problems in rEFInd's drivers as of version 0.7.0; however, I still see occasional reports of speed problems on specific computers.</p>
377
378 <p>Although I know of no readily-available hardware drivers, I do know of a couple of non-hardware non-filesystem drivers:</p>
379
380 <ul>
381
382 <li><a href="https://github.com/NikolajSchlej/CrScreenshotDxe"><b>CrScreenshot</b></a>&mdash;This driver adds a screenshot capability to any EFI. Note that it's available only as source code that requires the Tianocore EDK2 to build. I have not tested it. (Note also that rEFInd provides its own screen shot capability; pressing F10 takes a screen shot within rEFInd.)</li>
383
384 <li><a href="https://github.com/rcpao-enmotus/RamDiskPkg"><b>RamDiskPkg</a></b>&mdash;This is a rudimentary RAM disk driver. It must be compiled with a RAM disk image; the resulting binary is hard-coded with a fixed RAM disk image. It's therefore useful mostly for developers.</li>
385
386 </ul>
387
388 <p>Both of these drivers are useful mainly for developers.</p>
389
390 </ul>
391
392 <p>Driver availability could increase in the future. If you know of
393 additional EFI drivers, please <a href="mailto:rodsmith@rodsbooks.com">tell
394 me about them,</a> so I can share the information here. Likewise if you
395 know of a source for other EFI drivers&mdash;say, for a video card or disk
396 controller card.</p>
397
398 <p>Once you've obtained an EFI driver, you can install it in rEFInd just as you would install rEFInd's own drivers, as described earlier.</p>
399
400 </ul>
401
402 <hr />
403
404 <p>copyright &copy; 2012&ndash;2016 by Roderick W. Smith</p>
405
406 <p>This document is licensed under the terms of the <a href="FDL-1.3.txt">GNU Free Documentation License (FDL), version 1.3.</a></p>
407
408 <p>If you have problems with or comments about this Web page, please e-mail me at <a href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com.</a> Thanks.</p>
409
410 <p><a href="index.html">Go to the main rEFInd page</a></p>
411
412 <p><a href="linux.html">Learn about how to adjust rEFInd's appearance</a></p>
413
414 <p><a href="http://www.rodsbooks.com/">Return</a> to my main Web page.</p>
415 </body>
416 </html>