fdc11311dd148e911b08dfae79eb377a06d7ae92
[debian/elilo] / docs / elilo.txt
1         --------------------------------------------------------------------
2         ELILO.EFI: Linux boot loader for EFI/IA-64 and EFI/IA-32 based systems
3         --------------------------------------------------------------------
4                        Stephane Eranian <eranian@hpl.hp.com>
5
6                                  August 2003
7
8                    Copyright (C) 2000-2003 Hewlett-Packard Co.
9
10
11 I/ Introduction
12    ------------
13
14 This document describes how to use ELILO on for both IA-64 and IA-32 EFI-based platforms.
15 This document describes ELILO version 3.4. 
16
17 II/ Command line options
18     --------------------
19
20         elilo [-hDpPVvaE] [-d nsec] [-C config] [-i initrd] [-c chooser] [kernel [kernel options...]]
21
22         -h      Display a list of all possible command line options.
23
24         -V      Print the version number and exit.
25
26         -d nsec Specify the number of 10th of seconds before loading the
27                 kernel.
28
29         -C file Specify the config file to use. The default is elilo.conf in the directory
30                 that elilo.efi was loaded from.
31
32         -P      Verify config file syntax only. this option causes ELILO to 
33                 parse the config file and generate a report on the console.
34                 No kernel is loaded.
35
36         -v      Turn on verbose mode. ELILO prints more message about what it 
37                 is doing. For each occurrence of this option the verbosity level
38                 is increased by one. The maximum level is 5.
39
40         -a      Always check for alternate kernel image. The default behavior
41                 of ELILO is to NOT look for an alternate image. This 
42                 option overrides this behavior and ELILO is checking for 
43                 alternate images no matter what. Alternate images are
44                 specified using the EliloAlt EFI variable.
45
46         -p      force interactive prompt mode. Valid when no kernel image is 
47                 specified on the command line.
48
49         -D      print debug output.
50
51         -E      don't force EDD30 variable to TRUE when FALSE.
52
53         -i file Use file as the initial ramdisk (initrd).
54
55         -c name Specify which kernel chooser to use.  Default is 'simple', and
56                 the only other choice at present is 'textmenu'.
57
58         In addition, elilo supports platform specific options:
59
60         For IA-64:
61         ----------
62                 -r      the kernel image can be relocated if initial load address is not
63                         available. This options requires a special version of the kernel.
64
65                 -F file will try to load the FPSWA driver indicated by 'file'. Only this file
66                         will be attempted. When no specific file is given, elilo will try
67                         loading \efi\intel firmware\fpswa.efi from all accessible EFI system
68                         partitions.
69         For IA-32:
70         ----------
71                 no option defined.
72
73         All file names (including the kernel file) can include a device name using the 
74         following syntax:
75
76                 dev_name:/path/to/my/kernel
77
78         The 'dev_name' component depends on the naming scheme selected and the detected
79         devices for your system.  Some choosers may print the information automatically
80         or on demand, see chooser specific documentation for more on this. See README.devschemes 
81         for more information on device naming schemes. The slash character '/' can be used as 
82         a directory separator on any file systems including the EFI file system (FAT32).
83
84
85 III/ Configuration File
86      ------------------
87
88      ELILO supports a config file with options similar to the LILO/x86 boot loader.
89
90      Elilo will use the following sequence (shown in order) when looking for its config 
91      file when none is specified on the command line:
92
93         1/ AABBCCDD.conf (netbooting with regular DHCP)
94            where AABBCCDD is the hexadecimal representation
95            of the IP address assigned during the DHCP phase.
96
97         2/ elilo-ia64.conf or elilo-ia32.conf
98            The choice depends on the client platform. This step allows
99            the same DHCP/PXE server to provide files for both types of clients.
100
101         3/ elilo.conf
102
103      Unless explicitly specified on the command line, elilo looks for its config file
104      in the filesystem and directory it was loaded from. For instance, if elilo.efi
105      is invoked as:
106
107      fs0:\> \efi\debian\elilo.efi
108
109      Then elilo will look for its configuration file in fs0:\efi\debian and not
110      in the root directory of fs0:. The prefix fs0:\efi\debian will be used for
111      all other files that elilo needs to download when their paths are specified 
112      as being relative.
113
114      IMPORTANT:
115      This rule also applies when a specific config file is passed via the -C 
116      option. For example:
117
118      fs0:\> \efi\debian\elilo.efi -C elilo.conf
119
120      This will look for elilo.conf in fs0:\efi\debian and not in fs0:\.
121      To get to the elilo.conf in fs0:\, you need to specify the absolute
122      path:
123
124      fs0:\> \efi\debian\elilo.efi -C \elilo.conf
125
126
127      The configuration file is an ASCII file and not a UNICODE file.
128
129      The config file contains additional options to change the behavior of the loader. 
130      If the same option is specified in the config file AND on the command line, the
131      latter takes precedence. Not all options available in the config file have an 
132      equivalent on command line.
133
134      When elilo is invoked with the -h option, it prints the list of support command line
135      options but also the list of config file options. For each option it also prints
136      the type of data expected.
137
138      The config file options are divided in 2 groups:
139
140
141         - image options which are specific to a particular kernel image. Each kernel image
142           must be identified with a logical name called a label. 
143
144         - global options which affect the behavior of ELILO and apply to all images.
145
146      The ELILO config file follows the LILO/x86 syntax. First come the global
147      options, then the list of images and options for each of them, if
148      necessary. At least one image MUST be defined and it is possible to have
149      an empty list of global options.
150
151      Options have types. Three types are defined:
152         - boolean: set or not set
153         - string : a string of characters which can be quoted if necessary
154         - number (in decimal) 
155         - filename: a string interpreted as a file name
156
157     
158     The config file supports the following options:
159
160     Global Options:
161     ---------------
162     default=value       Name the default image to boot. If not defined ELILO
163                         will boot the first defined image.
164
165     timeout=number      The number of 10th of seconds to wait while in
166                         interactive mode before auto booting default kernel.
167                         Default is infinity.
168
169     delay=number        The number of 10th of seconds to wait before
170                         auto booting when not in interactive mode. 
171                         Default is 0.
172    
173     prompt              Force interactive mode
174
175     verbose=number      Set level of verbosity [0-5]. Default 0 (no verbose)
176
177     root=filename       Set global root filesystem for Linux/ia64
178
179     read-only           Force root filesystem to be mounted read-only
180
181     append=string       Append a string of options to kernel command line
182
183     initrd=filename     Name of initrd file
184
185     image=filename      Define a new image
186
187     chooser=name        Specify kernel chooser to use: 'simple' or 'textmenu'.
188
189     message=filename    a message that is printed on the main screen if supported by 
190                         the chooser.
191
192     fX=filename         Some choosers may take advantage of this option to
193                         display the content of a file when a certain function
194                         key X is pressed. X can vary from 1-12 to cover 
195                         function keys F1 to F12.
196
197     noedd30             do not force the EDD30 EFI variable to TRUE when FALSE. In other
198                         words, don't force the EDD30 mode if not set.
199
200     Image options:
201     --------------
202     root=filename       Set root filesystem for kernel
203
204     read-only           Force root filesystem to be mounted read-only
205
206     append=string       Append a string of options to kernel command line
207
208     initrd=filename     Name of initrd file
209
210     label=string        Logical name of image (used in interactive mode)
211
212     description=string  One line text description of the image.
213
214     IA-64 specific options:
215     -----------------------
216
217     Global options:
218     ---------------
219     fpswa=file          Specify the filename for a specific FPSWA to load. 
220                         If this option is used then no other file will be tried.
221
222     relocatable         In case of memory allocation error at initial load point of
223                         kernel, allow attempt to relocate (assume kernels is relocatable)
224
225     Image options:
226     --------------
227     relocatable         In case of memory allocation error at initial load point of
228                         kernel, allow attempt to relocate (assume this kernel is relocatable)
229
230     IA-32 specific options:
231     -----------------------
232     legacy-free         Indicate that the host machine does not have a legacy BIOS at all.
233
234
235     The user can specify a kernel and related kernel options using the image label. Alternatively,
236     the user can also specify a kernel file that is not specified in the config file. In any case,
237     some of the global options (such as append) are always concatenated to whatever the user type.
238
239
240 IV/ Booting from the local system
241     -----------------------------
242
243     The elilo.efi binary must be in an EFI system partition (FAT32). The config
244     file, kernel image, and optional initrd ramdisk can be on the same partition
245     or even another EFI partition. In the following discussion we assume that all 
246     files are on the same EFI partition which is recognized by the EFI shell (nshell) 
247     as fs0. The kernel and initrd can be copied from the any linux filesystems to the 
248     EFI partition using either the mtools (mcopy) or by mounting the EFI partition as 
249     a vfat partition. However you do not really need this because most linux 
250     distributions install both files in the EFI partition and mount this partition in /boot/efi.
251
252     To boot a kernel, simply power cycle the machine. Once you get to the EFI
253     shell prompt, change to the filesystem that maps to the partition where elilo is.
254
255         Shell> fs0:
256         fs0:\>
257
258         You might need to make sure that the Shell Path is set such that it will load
259         ELILO from fs0:. You can verify this by typing:
260         fs0:\> set
261         path : fs0:\
262         
263         At this point you can invoke ELILO:
264
265         fs0:\> elilo
266
267         If there is no config file, then it will: 
268                 - pick up the kernel image named vmlinux if it exists, otherwise it will abort.
269                 - pass no argument to the kernel.
270         
271         You can specify the kernel image and its options on the command line.
272         For instance you can do:
273
274         fs0:\> elilo vmlinux root=/dev/sda5
275
276         You can specify as many parameters as you want. The syntax follows the kernel
277         rule, i.e., list of value pairs (or even single values) separated by space.
278         A more complicated example would be:
279
280         fs0:\> elilo -i initrd-2.4.9 vmlinuz-2.4.9 root=/dev/sda2 console=tty0 console="ttyS0,115200n8"
281
282         In this example, notice the double quotes. They are required because the comma is a control
283         character for nshell.
284
285     In the case a config file is found, then elilo will behave according to
286     the options in that file. However if elilo is invoked with command line options, they
287     will be combined or they will override (if conflicting) what is defined in the config file.
288
289     As of version 3.3, elilo is fully compliant with the EFI specification (1.10) with regards
290     to where the bootloader (elilo.efi) must be located in the EFI system partition. In 
291     section 11.2.1.3 of the EFI1.10 specification, it is said that in order to avoid conflicts
292     between various loaders for various OSes or distributions of the same OS, every vendor MUST
293     use a dedicated directory: \EFI\vendor\. The bootloader must be placed in this directory.
294     This has always been possible as this is a matter of creating the directory and copying
295     the elilo.efi file in it. However up until version 3.3, elilo would look for its config file
296     and kernel/initrd in the root (/) of the partition it was loaded from. As of version 3.3,
297     elilo will now ONLY look for its configuration file FROM THE DIRECTORY IT WAS LOADED FROM. 
298     The same applies to the kernel and initrd files unless absolute paths are specified. Let us 
299     look at a simple example:
300
301         - suppose elilo.efi is in \EFI\DIST if fs0:  (for the EFI Shell)
302
303         - if you invoke elilo as follows:
304
305                 fs0:\> \efi\dist\elilo -v -p
306                 default file path: \efi\dist\
307                 config file      : \efi\dist\elilo.conf
308                 ELILO boot: 
309
310
311           Note that this is the same if you invoke elilo directly from \efi or \efi\dist.
312  
313     File references in the configuration file are treated as relative to the directory
314     elilo was loaded from except if they use an absolute path. 
315
316    As of version 3.4 a similar rule applies to the network boot sequence, see netbooting.txt
317    for details.
318
319 V/ Interactive mode
320    ----------------
321
322    Elilo can be forced into interactive mode using the "prompt" option in the config
323    file or with the -p option. In this mode, the user can select a kernel to load.
324
325    The interface depends on the chooser, it may be a simple command line prompt as provided
326    by the simple chooser or a more sophisticated screen with scroll menus as provided by
327    textmenu. Most choosers depends on the elilo config file to get the information they
328    display. The simple chooser can operated without the elilo config file. However it
329    is always better to have this file, to create handy logical names for each possible
330    boot choices. The logical names are specified with the "label" option in the config
331    file. They represent a specific kernel "image" and its specific options.
332
333    In elilo, the user can select a particular kernel image using the corresponding label
334    name. A simple example is as follows:
335
336       If we suppose that the following is defined in elilo.conf:
337
338         image=vmlinuz-2.4.9
339         label=linux-up
340         initrd=initrd-2.4.9
341         root=/dev/sda2
342         append="console=tty0 console=ttyS0,115200n8"
343
344       then the user can specify linux-up at the prompt and elilo will load the 
345       vmlinuz-2.4.9 kernel file and the initrd-2.4.9 ramdisk and will pass 
346
347          "root=/dev/sda2 console=tty0 console=ttyS0,115200n8"
348
349       as command line arguments to the kernel.
350
351       This behavior is identical to Lilo/x86. However, elilo further allows the user
352       to specify actual kernel files names as well, i.e., kernels that are not defined
353       in the configuration file. If we reuse the above example and the simple chooser, 
354       the user can type:
355
356       ELILO boot: vmlinux-2.4.18 root=/dev/sda2
357
358       and elilo will boot the vmlinuz-2.4.18 kernel if it exists.
359
360 VI/ The alternate kernel image
361     --------------------------
362
363     Oftentimes when debugging kernels you want to reboot the machine once with
364     your test kernel and, if something goes wrong, you want to fall back to a more
365     stable kernel. In addition you want to be able to do this from a remote machine. 
366     Many things can go wrong when doing kernel debugging. It could be that you don't
367     even reach user-mode. In this case however, you still want to fall back to
368     a stable kernel. The feature you'd like from a boot loader is 'boot once and
369     then fall back to safe kernel'.
370
371     Elilo offers this feature and it's called 'alternate kernel image'.  
372     You can configure elilo to load a kernel only once and then whatever 
373     happens the next reboot falls back to a different kernel hopefully more stable.
374
375     To do this, elilo relies on an EFI variable called 'EliloAlt' with a NULL GUID.
376     The content of this variable is a UNICODE string containing the kernel file name
377     and its command line options.
378
379     When the -a option is specified on the command line or if the "checkalt" option
380     is present in the config file, elilo will check for the presence of this variable.
381     If found and the content is a valid UNICODE string, elilo will use it as the kernel
382     to boot. There is no verification made on the validity of the kernel name or options.
383     Then the variable is deleted. If the variable is rejected because it does not look
384     sane, it is also deleted.
385
386     The variable can be set from a running Linux system using the /proc/efi/vars
387     interface. In the tools directory of this package, there is a Linux tool called
388     elilovar which can be used to create, modify, print, and delete the EliloAlt
389     variable. Refer to eliloalt.txt for more information on this tool.
390
391 VII/ Auto booting the machine
392      -----------------------
393
394     Once you're satisfied with your machine setup, it is good to install an 
395     auto boot procedure.  You have two options to do this:
396         - from the EFI boot manager menu
397         - from the EFI shell
398
399     The first option is preferred and is used by most Linux distributions.
400     Elilo can be invoked directly from the boot manager. You need to get into
401     the 'boot maintenance' menu and use load file a file. This can be tedious
402     so instead it is recommended that you use a Linux tool called efibootmgr
403     which is also shipped in most distributions. With this tool, you can
404     create your own boot option and change the boot order.
405
406     
407     
408     The second approach use the EFI shell and a shell script with a special name: 'startup.nsh'.
409
410     When the system boots, it looks for EFI partitions and if it finds
411     a 'startup.nsh' file in ANY of these it will jumpstart execution from it.
412
413     So the typical way of auto booting your Linux/ia64 system is to simply create
414     such a file with the following content:
415
416         # cat /boot/startup.nsh
417         elilo vmlinuz root=/dev/sda2
418
419     Of course, this can be simplified if there is a configuration file.
420
421
422 VII/ Netbooting 
423      ----------
424
425      Please refer to netbooting.txt for a complete description of how to boot
426      from the network.
427
428
429 XII/ Booting on EFI/ia32 platforms
430      -----------------------------
431
432         Until PC comes with the EFI firmware built in, you need to boot from a
433         floppy that has the EFI firmware on it. Such floppy can be
434         constructed from the EFI sample implementation and toolkit that is
435         available from the Intel Developer Web site at:
436
437                 http://developer.intel.com/technology/efi/
438
439         To use elilo on IA-32, you can put it on a floppy and
440         on a FAT32 partition (msdos partition). You can also
441         netbooting if you network adapter has support for UNDI/PXE.
442
443         Elilo/ia32 is capable of booting unmodified 2.2.x. and 2.4.x kernels
444         as they are shipped by distributors today (such as Redhat7.2). You don't need 
445         to recompile the kernel with special options. Elilo ONLY takes compressed kernel
446         image which are typically obtained via a 'make bzImage'. Plain elf/32 kernel can't 
447         be booted (plain vmlinux will not work). Similarly, existing initial ramdisks can 
448         be used without modifications. 
449
450 IX/ Credits
451     -------
452
453         Intel Corp.
454         Stephane Eranian <eranian@hpl.hp.com>
455         David Mosberger  <davidm@hpl.hp.com>
456         Johannes Erdfelt <jerdfelt@valinux.com>
457         Richard Hirst    <rhirst@linuxcare.com>
458         Chris Ahna       <christopher.j.ahna@intel.com>
459         Mike Johnston    <michael.johnston@intel.com>
460
461 X/ Bug reports
462    -----------
463
464         You can submit bugs to <eranian@hpl.hp.com> or to the Linux/ia64
465         mailing list at linux-ia64@linuxia64.org. Visit http://www.linuxia64.org
466         to subscribe to this list.
467
468 XIII/ Reference
469       ---------
470
471         EFI v1.02 specifications are available from the following web site:
472
473         http://developer.intel.com/technology/efi/
474
475         The latest sources of ELILO can be downloaded at:
476
477                 ftp://ftp.hpl.hp.com/pub/linux-ia64
478