release 3.16
https://sourceforge.net/projects/elilo/files/elilo/elilo-3.16/
This commit is contained in:
parent
82f7288853
commit
2b5c5002e1
21 changed files with 708 additions and 109 deletions
39
ChangeLog
39
ChangeLog
|
@ -1,4 +1,22 @@
|
|||
2011-1-10 signed off by Jason Fleischli <jason.fleischli@hp.com>
|
||||
2013-03-27 signed off by Jason Fleischli <fleischli@users.sourceforge.net>
|
||||
* ADD CROSSBUILD
|
||||
* intake edited version of Debian x86x crossbuild patches.
|
||||
* Fixed Makefile clean to include crossbuild envs.
|
||||
* Fixed ia32 system.c compile warning
|
||||
* Simplified efi no GOP warning so it doesnt look like an error.
|
||||
* MAJOR: Fixed Fault crash when EFI memory map changes from under elilo.
|
||||
(from an outside interrupt in this case). When the EFI Memory map
|
||||
changes after elilo has already built boot params to pass to the
|
||||
kernel the EFI call to ExitBootSvcs just prior to boot will fail
|
||||
because elilo has the old map key. This is valid EFI behavior, elilo
|
||||
retries to pick up the new memory map and valid key but had already
|
||||
freed the start params portion of boot params resulting in a NULL
|
||||
DEREF crash reset.
|
||||
* Add console reset call during initialization. thanks A. Steinmetz
|
||||
* minor bugfix, fixed -m option broken. thanks Allan-lsk.
|
||||
* tag 3_16 for release
|
||||
|
||||
2011-1-10 signed off by Jason Fleischli <fleischli@users.sourceforge.net>
|
||||
* Uptake of SUSE patches
|
||||
- add sysfs support for efi vars (formerly /proc/efi/vars)
|
||||
- fix strncpy overflow
|
||||
|
@ -12,7 +30,7 @@
|
|||
* replace error output on GOP handle failed, downgraded to normal
|
||||
print status with more informative output.
|
||||
|
||||
2009-10-22 signed off by Jason Fleischli <jason.fleischli@hp.com>
|
||||
2009-10-22 signed off by Jason Fleischli <fleischli@users.sourceforge.net>
|
||||
* elilo 3.12 release commit
|
||||
* Added additional #defines for debug levels to reduce the output
|
||||
* Added Mac console patch rework from Julien Blache @ debian
|
||||
|
@ -34,7 +52,8 @@
|
|||
x86_64... this is a legacy design hold over from original design and
|
||||
needs to be re-written to do dynamic size memory management based on
|
||||
the size of the actual vmlinuz image, as ia64/gzip does.
|
||||
2008-04-02 signed off by Jason Fleischli <jason.fleischli@hp.com>
|
||||
|
||||
2008-04-02 signed off by Jason Fleischli <fleischli@users.sourceforge.net>
|
||||
* elilo 3.10 release commit
|
||||
* Bumped version string to 3.10
|
||||
* added PTR_FMT 32bit & 64bit pointer translation for correct output
|
||||
|
@ -54,10 +73,10 @@
|
|||
* bugfix loader_probe now correctly errors out if no loaders
|
||||
registered.
|
||||
|
||||
2008-01-11 signed off by Jason Fleischli <jason.fleischli@hp.com>
|
||||
2008-01-11 signed off by Jason Fleischli <fleischli@users.sourceforge.net>
|
||||
* Various compile warning cleanups.
|
||||
|
||||
2008-01-03 signed off by Jason Fleischli <jason.fleischli@hp.com>
|
||||
2008-01-03 signed off by Jason Fleischli <fleischli@users.sourceforge.net>
|
||||
* Patch contribution from Scott Davilla <davilla@4pi.com>
|
||||
when x is zero for the first call to add_memory_region, e820_map[-1]
|
||||
will access memory outside the bounds of e820_map. While this does
|
||||
|
@ -66,7 +85,7 @@
|
|||
bootloader, the code should not access outside the bounds of
|
||||
structures.
|
||||
|
||||
2008-01-03 Jason Fleischli <jason.fleischli@hp.com>
|
||||
2008-01-03 Jason Fleischli <fleischli@users.sourceforge.net>
|
||||
* initrd.c -- Let the allocator decide where to grab the memory from
|
||||
the efi memory map. Current start_addr=image->start_addr forces the
|
||||
same efi region everytime, and has a 7mb limit. ramdisk (initrd.img)
|
||||
|
@ -75,10 +94,10 @@
|
|||
NULL at initialization forces alloc_pages to get a memory region
|
||||
sufficient for the size of the initrd image.
|
||||
|
||||
2007-12-19 Jason Fleischli <jason.fleischli@hp.com>
|
||||
2007-12-19 Jason Fleischli <fleischli@users.sourceforge.net>
|
||||
* bumping version string to 3.8
|
||||
|
||||
2007-12-19 Jason Fleischli <jason.fleischli@hp.com>
|
||||
2007-12-19 Jason Fleischli <fleischli@users.sourceforge.net>
|
||||
* MORE PATCHES FROM INTEL FOR IA32 X86_64.
|
||||
* Fix compile warning for cmdline_addr assignment.
|
||||
* Fix an issue caused by uninitialized e820_nr_map in fill_e820map.
|
||||
|
@ -103,13 +122,13 @@
|
|||
* E820 memory map is added to IA32 to make it possible for
|
||||
Linux kernel not to depend on EFI memory map on EFI 32.
|
||||
|
||||
2007-09-27 Jason Fleischli <jason.fleischli@hp.com>
|
||||
2007-09-27 Jason Fleischli <fleischli@users.sourceforge.net>
|
||||
* updating changelog for last commit that was omitted
|
||||
* incorporating AGriffis patches to enhance parsing
|
||||
passes root= option to kernel options and accounts for -- option
|
||||
designation.
|
||||
|
||||
2007-07-19 Jason Fleischli <jason.fleischli@hp.com>
|
||||
2007-07-19 Jason Fleischli <fleischli@users.sourceforge.net>
|
||||
* Integrated x86_64 support patches from Chandramouli Narayanan
|
||||
<mouli@linux.intel.com> changes summarized in following bullets.
|
||||
* alloc.c -- adds patch contributors credit to copyright
|
||||
|
|
|
@ -61,14 +61,17 @@ EFICRT0 = /usr/lib
|
|||
|
||||
CDIR := $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi)
|
||||
TOPDIR =
|
||||
ALLSUBDIRS = ia32 ia64 x86_64 fs choosers devschemes tools
|
||||
|
||||
ARCH = $(shell uname -m | sed s,i[3456789]86,ia32,)
|
||||
HOSTARCH = $(shell dpkg-architecture -qDEB_BUILD_ARCH | sed s,i[3456789]86,ia32, | sed s,amd64,x86_64, )
|
||||
ARCH := $(shell dpkg-architecture -qDEB_BUILD_ARCH | sed s,i[3456789]86,ia32, | sed s,amd64,x86_64, )
|
||||
INCDIR = -I. -I$(TOPDIR) -I$(EFIINC) -I$(EFIINC)/$(ARCH) -I$(EFIINC)/protocol -I$(TOPDIR)/efi110
|
||||
CPPFLAGS = -DCONFIG_$(ARCH)
|
||||
|
||||
OPTIMFLAGS = -O2
|
||||
DEBUGFLAGS = -Wall
|
||||
CFLAGS = $(OPTIMFLAGS) -fno-stack-protector -fno-strict-aliasing -fpic -fshort-wchar $(DEBUGFLAGS)
|
||||
CFLAGS = $(ARCH3264) $(OPTIMFLAGS) -fno-stack-protector -fno-strict-aliasing -fpic -fshort-wchar $(DEBUGFLAGS)
|
||||
ASFLAGS = $(ARCH3264)
|
||||
LDFLAGS = -nostdlib -znocombreloc
|
||||
INSTALL = install
|
||||
|
||||
|
@ -108,10 +111,30 @@ OBJCOPY = $(prefix)objcopy
|
|||
|
||||
# Use Modified binutils that supports x86_64 using UEFI ABI
|
||||
ifeq ($(ARCH), x86_64)
|
||||
ifeq ($(HOSTARCH), ia32)
|
||||
ARCH3264 = -m64
|
||||
LD3264 = -melf_x86_64
|
||||
|
||||
GNUEFILIB := $(GNUEFILIB)64
|
||||
EFILIB := $(EFILIB)64
|
||||
EFICRT0 := $(EFICRT0)64
|
||||
endif
|
||||
|
||||
CFLAGS += -DEFI_FUNCTION_WRAPPER
|
||||
OBJCOPY = /usr/bin/objcopy
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH), ia32)
|
||||
ifeq ($(HOSTARCH), x86_64)
|
||||
ARCH3264 = -m32
|
||||
LD3264 = -melf_i386
|
||||
|
||||
GNUEFILIB := /usr/lib32
|
||||
EFILIB := /usr/lib32
|
||||
EFICRT0 := /usr/lib32
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),ia64)
|
||||
GCC_VERSION=$(shell $(CROSS_COMPILE)$(CC) -v 2>&1 | fgrep 'gcc version' | cut -f3 -d' ' | cut -f1 -d'.')
|
||||
|
||||
|
|
17
Makefile
17
Makefile
|
@ -25,15 +25,19 @@
|
|||
# to use this program.
|
||||
#
|
||||
|
||||
include Make.defaults
|
||||
TOPDIR=.
|
||||
SRCDIR = .
|
||||
|
||||
VPATH = $(SRCDIR)
|
||||
|
||||
include $(SRCDIR)/Make.defaults
|
||||
TOPDIR = $(SRCDIR)
|
||||
|
||||
|
||||
CRTOBJS = $(EFICRT0)/crt0-efi-$(ARCH).o
|
||||
LDSCRIPT = $(EFICRT0)/elf_$(ARCH)_efi.lds
|
||||
|
||||
LDFLAGS += -T $(LDSCRIPT) -shared -Bsymbolic -L$(EFILIB) -L$(GNUEFILIB) $(CRTOBJS)
|
||||
LOADLIBES = -lefi -lgnuefi $(shell $(CC) -print-libgcc-file-name)
|
||||
LOADLIBES = -lefi -lgnuefi $(shell $(CC) $(ARCH3264) -print-libgcc-file-name)
|
||||
FORMAT = efi-app-$(ARCH)
|
||||
|
||||
FILESYSTEM =
|
||||
|
@ -87,12 +91,13 @@ fileops.o : Make.defaults
|
|||
chooser.o : Make.defaults
|
||||
|
||||
$(SUBDIRS): dummy
|
||||
$(MAKE) -C $@
|
||||
mkdir -p $@
|
||||
$(MAKE) -C $@ -f $(SRCDIR)/../$@/Makefile SRCDIR=$(SRCDIR)/../$@ ARCH=$(ARCH)
|
||||
|
||||
dummy:
|
||||
|
||||
clean:
|
||||
@set -e ; for d in $(SUBDIRS) ; do $(MAKE) -C $$d $@ ; done
|
||||
@set -e ; for d in $(ALLSUBDIRS) ; do $(MAKE) -C $$d $@ ; done
|
||||
rm -f $(TARGETS) *~ *.so $(FILES)
|
||||
|
||||
.PRECIOUS: elilo.so
|
||||
|
@ -106,4 +111,4 @@ ifeq ($(GCC_VERSION),2)
|
|||
@exit 1
|
||||
endif
|
||||
|
||||
include Make.rules
|
||||
include $(SRCDIR)/Make.rules
|
||||
|
|
|
@ -67,9 +67,6 @@ create_boot_params(CHAR16 *args, memdesc_t *initrd, memdesc_t *vmcode, UINTN *co
|
|||
|
||||
/*
|
||||
* Allocate memory for boot parameters.
|
||||
* This CANNOT be EfiLoaderData or EfiLoaderCode as the kernel
|
||||
* frees this region when initializing.
|
||||
* FIXME: Is this a bug? (since the memory type *is* EfiLoaderData)
|
||||
*/
|
||||
|
||||
bp = (boot_params_t *)alloc(BOOT_PARAM_MEMSIZE, EfiLoaderData);
|
||||
|
|
|
@ -23,10 +23,15 @@
|
|||
# to use this program.
|
||||
#
|
||||
|
||||
include ../Make.defaults
|
||||
include ../Make.rules
|
||||
SRCDIR = .
|
||||
|
||||
VPATH = $(SRCDIR)
|
||||
|
||||
include $(SRCDIR)/../Make.defaults
|
||||
include $(SRCDIR)/../Make.rules
|
||||
|
||||
TOPDIR=$(SRCDIR)/..
|
||||
|
||||
TOPDIR=$(CDIR)/..
|
||||
|
||||
FILES=
|
||||
|
||||
|
@ -47,7 +52,8 @@ $(TARGET): $(TOPDIR)/Make.defaults $(FILES)
|
|||
echo "You need to define at least one chooser in Make.defaults"; \
|
||||
exit 1; \
|
||||
fi
|
||||
$(LD) -o $@ -r $(FILES)
|
||||
$(LD) $(LD3264) -o $@ -r $(FILES)
|
||||
|
||||
|
||||
clean:
|
||||
$(RM) -f $(TARGET) $(FILES)
|
||||
|
|
|
@ -23,10 +23,15 @@
|
|||
# to use this program.
|
||||
#
|
||||
|
||||
include ../Make.defaults
|
||||
include ../Make.rules
|
||||
SRCDIR = .
|
||||
|
||||
VPATH = $(SRCDIR)
|
||||
|
||||
include $(SRCDIR)/../Make.defaults
|
||||
include $(SRCDIR)/../Make.rules
|
||||
|
||||
TOPDIR=$(SRCDIR)/..
|
||||
|
||||
TOPDIR=$(CDIR)/..
|
||||
|
||||
FILES=simple.o
|
||||
|
||||
|
@ -40,7 +45,7 @@ all: $(TARGET)
|
|||
# without doing make clean.
|
||||
#
|
||||
$(TARGET): $(FILES)
|
||||
$(LD) -r -o $@ $(FILES)
|
||||
$(LD) $(LD3264) -r -o $@ $(FILES)
|
||||
|
||||
clean:
|
||||
$(RM) -f $(TARGET) $(FILES)
|
||||
|
|
522
docs/README.txt
Normal file
522
docs/README.txt
Normal file
|
@ -0,0 +1,522 @@
|
|||
--------------------------------------------------------------------
|
||||
ELILO.EFI: Linux boot loader for
|
||||
EFI/IA-64,EFI/IA-32 and EFI/x86_64 based systems
|
||||
--------------------------------------------------------------------
|
||||
Stephane Eranian <eranian@hpl.hp.com>
|
||||
|
||||
August 2003
|
||||
|
||||
Copyright (C) 2000-2012 Hewlett-Packard Co.
|
||||
Copyright (C) 2006-2010 Intel Co.
|
||||
|
||||
|
||||
I/ Introduction
|
||||
------------
|
||||
|
||||
This document describes how to use ELILO on for IA-64, IA-32 and x86_64 EFI-based platforms.
|
||||
This document describes ELILO version 3.7 - 3.14.
|
||||
|
||||
II/ Command line options
|
||||
--------------------
|
||||
|
||||
elilo [-hDpPVvaE] [-d nsec] [-C config] [-i initrd] [-c chooser] [kernel [kernel options...]]
|
||||
|
||||
-h Display a list of all possible command line options.
|
||||
|
||||
-V Print the version number and exit.
|
||||
|
||||
-d nsec Specify the number of 10th of seconds before loading the
|
||||
kernel.
|
||||
|
||||
-C file Specify the config file to use. The default is elilo.conf in the directory
|
||||
that elilo.efi was loaded from.
|
||||
|
||||
-P Verify config file syntax only. this option causes ELILO to
|
||||
parse the config file and generate a report on the console.
|
||||
No kernel is loaded.
|
||||
|
||||
-v Turn on verbose mode. ELILO prints more message about what it
|
||||
is doing. For each occurrence of this option the verbosity level
|
||||
is increased by one. The maximum level is 5.
|
||||
|
||||
-a Always check for alternate kernel image. The default behavior
|
||||
of ELILO is to NOT look for an alternate image. This
|
||||
option overrides this behavior and ELILO is checking for
|
||||
alternate images no matter what. Alternate images are
|
||||
specified using the EliloAlt EFI variable.
|
||||
|
||||
-p force interactive prompt mode. Valid when no kernel image is
|
||||
specified on the command line.
|
||||
|
||||
-D print debug output.
|
||||
|
||||
-E don't force EDD30 variable to TRUE when FALSE.
|
||||
|
||||
-i file Use file as the initial ramdisk (initrd).
|
||||
|
||||
-c name Specify which kernel chooser to use. Default is 'simple', and
|
||||
the only other choice at present is 'textmenu'.
|
||||
|
||||
In addition, elilo supports platform specific options:
|
||||
|
||||
For IA-64:
|
||||
----------
|
||||
-r the kernel image can be relocated if initial load address is not
|
||||
available. This options requires a special version of the kernel.
|
||||
|
||||
-F file will try to load the FPSWA driver indicated by 'file'. Only this file
|
||||
will be attempted. When no specific file is given, elilo will try
|
||||
loading \efi\intel firmware\fpswa.efi from all accessible EFI system
|
||||
partitions.
|
||||
For IA-32:
|
||||
----------
|
||||
no option defined.
|
||||
|
||||
All file names (including the kernel file) can include a device name using the
|
||||
following syntax:
|
||||
|
||||
dev_name:/path/to/my/kernel
|
||||
|
||||
The 'dev_name' component depends on the naming scheme selected and the detected
|
||||
devices for your system. Some choosers may print the information automatically
|
||||
or on demand, see chooser specific documentation for more on this. See README.devschemes
|
||||
for more information on device naming schemes. The slash character '/' can be used as
|
||||
a directory separator on any file systems including the EFI file system (FAT32).
|
||||
|
||||
For x86_64:
|
||||
----------
|
||||
none
|
||||
|
||||
III/ Configuration File
|
||||
------------------
|
||||
|
||||
ELILO supports a config file with options similar to the LILO/x86 boot loader.
|
||||
|
||||
Elilo will use the following sequence (shown in order) when looking for its config
|
||||
file when none is specified on the command line:
|
||||
|
||||
1/ AABBCCDD.conf (netbooting with regular DHCP)
|
||||
where AABBCCDD is the hexadecimal representation
|
||||
of the IP address assigned during the DHCP phase.
|
||||
|
||||
2/ elilo-ia64.conf or elilo-ia32.conf or elilo-x86_64.conf
|
||||
The choice depends on the client platform. This step allows
|
||||
the same DHCP/PXE server to provide files for both types of clients.
|
||||
|
||||
3/ elilo.conf
|
||||
|
||||
Unless explicitly specified on the command line, elilo looks for its config file
|
||||
in the filesystem and directory it was loaded from. For instance, if elilo.efi
|
||||
is invoked as:
|
||||
|
||||
fs0:\> \efi\debian\elilo.efi
|
||||
|
||||
Then elilo will look for its configuration file in fs0:\efi\debian and not
|
||||
in the root directory of fs0:. The prefix fs0:\efi\debian will be used for
|
||||
all other files that elilo needs to download when their paths are specified
|
||||
as being relative.
|
||||
|
||||
IMPORTANT:
|
||||
This rule also applies when a specific config file is passed via the -C
|
||||
option. For example:
|
||||
|
||||
fs0:\> \efi\debian\elilo.efi -C elilo.conf
|
||||
|
||||
This will look for elilo.conf in fs0:\efi\debian and not in fs0:\.
|
||||
To get to the elilo.conf in fs0:\, you need to specify the absolute
|
||||
path:
|
||||
|
||||
fs0:\> \efi\debian\elilo.efi -C \elilo.conf
|
||||
|
||||
|
||||
The configuration file is an ASCII file and not a UNICODE file.
|
||||
|
||||
The config file contains additional options to change the behavior of the loader.
|
||||
If the same option is specified in the config file AND on the command line, the
|
||||
latter takes precedence. Not all options available in the config file have an
|
||||
equivalent on command line.
|
||||
|
||||
When elilo is invoked with the -h option, it prints the list of support command line
|
||||
options but also the list of config file options. For each option it also prints
|
||||
the type of data expected.
|
||||
|
||||
The config file options are divided in 2 groups:
|
||||
|
||||
|
||||
- image options which are specific to a particular kernel image. Each kernel image
|
||||
must be identified with a logical name called a label.
|
||||
|
||||
- global options which affect the behavior of ELILO and apply to all images.
|
||||
|
||||
The ELILO config file follows the LILO/x86 syntax. First come the global
|
||||
options, then the list of images and options for each of them, if
|
||||
necessary. At least one image MUST be defined and it is possible to have
|
||||
an empty list of global options.
|
||||
|
||||
Options have types. Three types are defined:
|
||||
- boolean: set or not set
|
||||
- string : a string of characters which can be quoted if necessary
|
||||
- number (in decimal)
|
||||
- filename: a string interpreted as a file name
|
||||
|
||||
|
||||
The config file supports the following options:
|
||||
|
||||
Global Options:
|
||||
---------------
|
||||
default=value Name the default image to boot. If not defined ELILO
|
||||
will boot the first defined image.
|
||||
|
||||
timeout=number The number of 10th of seconds to wait while in
|
||||
interactive mode before auto booting default kernel.
|
||||
Default is infinity.
|
||||
|
||||
delay=number The number of 10th of seconds to wait before
|
||||
auto booting when not in interactive mode.
|
||||
Default is 0.
|
||||
|
||||
prompt Force interactive mode
|
||||
|
||||
verbose=number Set level of verbosity [0-5]. Default 0 (no verbose)
|
||||
|
||||
root=filename Set global root filesystem for Linux/ia64
|
||||
|
||||
read-only Force root filesystem to be mounted read-only
|
||||
|
||||
append=string Append a string of options to kernel command line
|
||||
|
||||
initrd=filename Name of initrd file
|
||||
|
||||
image=filename Define a new image
|
||||
|
||||
chooser=name Specify kernel chooser to use: 'simple' or 'textmenu'.
|
||||
|
||||
message=filename a message that is printed on the main screen if supported by
|
||||
the chooser.
|
||||
|
||||
fX=filename Some choosers may take advantage of this option to
|
||||
display the content of a file when a certain function
|
||||
key X is pressed. X can vary from 1-12 to cover
|
||||
function keys F1 to F12.
|
||||
|
||||
noedd30 do not force the EDD30 EFI variable to TRUE when FALSE. In other
|
||||
words, don't force the EDD30 mode if not set.
|
||||
|
||||
Image options:
|
||||
--------------
|
||||
root=filename Set root filesystem for kernel
|
||||
|
||||
read-only Force root filesystem to be mounted read-only
|
||||
|
||||
append=string Append a string of options to kernel command line
|
||||
|
||||
initrd=filename Name of initrd file
|
||||
|
||||
label=string Logical name of image (used in interactive mode)
|
||||
|
||||
description=string One line text description of the image.
|
||||
|
||||
IA-64 specific options:
|
||||
-----------------------
|
||||
|
||||
Global options:
|
||||
---------------
|
||||
fpswa=file Specify the filename for a specific FPSWA to load.
|
||||
If this option is used then no other file will be tried.
|
||||
|
||||
relocatable In case of memory allocation error at initial load point of
|
||||
kernel, allow attempt to relocate (assume kernels is relocatable)
|
||||
|
||||
Image options:
|
||||
--------------
|
||||
relocatable In case of memory allocation error at initial load point of
|
||||
kernel, allow attempt to relocate (assume this kernel is relocatable)
|
||||
|
||||
IA-32 specific options:
|
||||
-----------------------
|
||||
legacy-free Indicate that the host machine does not have a legacy BIOS at all.
|
||||
|
||||
|
||||
The user can specify a kernel and related kernel options using the image label. Alternatively,
|
||||
the user can also specify a kernel file that is not specified in the config file. In any case,
|
||||
some of the global options (such as append) are always concatenated to whatever the user type.
|
||||
|
||||
x86_64 specific options:
|
||||
-----------------------
|
||||
text-mode elilo>=3.14 boolean, image config option to force text console mode.
|
||||
|
||||
IV/ Booting from the local system
|
||||
-----------------------------
|
||||
|
||||
The elilo.efi binary must be in an EFI system partition (FAT32). The config
|
||||
file, kernel image, and optional initrd ramdisk can be on the same partition
|
||||
or even another EFI partition. In the following discussion we assume that all
|
||||
files are on the same EFI partition which is recognized by the EFI shell (nshell)
|
||||
as fs0. The kernel and initrd can be copied from the any linux filesystems to the
|
||||
EFI partition using either the mtools (mcopy) or by mounting the EFI partition as
|
||||
a vfat partition. However you do not really need this because most linux
|
||||
distributions install both files in the EFI partition and mount this partition in /boot/efi.
|
||||
|
||||
To boot a kernel, simply power cycle the machine. Once you get to the EFI
|
||||
shell prompt, change to the filesystem that maps to the partition where elilo is.
|
||||
|
||||
Shell> fs0:
|
||||
fs0:\>
|
||||
|
||||
You might need to make sure that the Shell Path is set such that it will load
|
||||
ELILO from fs0:. You can verify this by typing:
|
||||
fs0:\> set
|
||||
path : fs0:\
|
||||
|
||||
At this point you can invoke ELILO:
|
||||
|
||||
fs0:\> elilo
|
||||
|
||||
If there is no config file, then it will:
|
||||
- pick up the kernel image named vmlinux if it exists, otherwise it will abort.
|
||||
- pass no argument to the kernel.
|
||||
|
||||
You can specify the kernel image and its options on the command line.
|
||||
For instance you can do:
|
||||
|
||||
fs0:\> elilo vmlinux root=/dev/sda5
|
||||
|
||||
You can specify as many parameters as you want. The syntax follows the kernel
|
||||
rule, i.e., list of value pairs (or even single values) separated by space.
|
||||
A more complicated example would be:
|
||||
|
||||
fs0:\> elilo -i initrd-2.4.9 vmlinuz-2.4.9 root=/dev/sda2 console=tty0 console="ttyS0,115200n8"
|
||||
|
||||
In this example, notice the double quotes. They are required because the comma is a control
|
||||
character for nshell.
|
||||
|
||||
In the case a config file is found, then elilo will behave according to
|
||||
the options in that file. However if elilo is invoked with command line options, they
|
||||
will be combined or they will override (if conflicting) what is defined in the config file.
|
||||
|
||||
As of version 3.3, elilo is fully compliant with the EFI specification (1.10) with regards
|
||||
to where the bootloader (elilo.efi) must be located in the EFI system partition. In
|
||||
section 11.2.1.3 of the EFI1.10 specification, it is said that in order to avoid conflicts
|
||||
between various loaders for various OSes or distributions of the same OS, every vendor MUST
|
||||
use a dedicated directory: \EFI\vendor\. The bootloader must be placed in this directory.
|
||||
This has always been possible as this is a matter of creating the directory and copying
|
||||
the elilo.efi file in it. However up until version 3.3, elilo would look for its config file
|
||||
and kernel/initrd in the root (/) of the partition it was loaded from. As of version 3.3,
|
||||
elilo will now ONLY look for its configuration file FROM THE DIRECTORY IT WAS LOADED FROM.
|
||||
The same applies to the kernel and initrd files unless absolute paths are specified. Let us
|
||||
look at a simple example:
|
||||
|
||||
- suppose elilo.efi is in \EFI\DIST if fs0: (for the EFI Shell)
|
||||
|
||||
- if you invoke elilo as follows:
|
||||
|
||||
fs0:\> \efi\dist\elilo -v -p
|
||||
default file path: \efi\dist\
|
||||
config file : \efi\dist\elilo.conf
|
||||
ELILO boot:
|
||||
|
||||
|
||||
Note that this is the same if you invoke elilo directly from \efi or \efi\dist.
|
||||
|
||||
File references in the configuration file are treated as relative to the directory
|
||||
elilo was loaded from except if they use an absolute path.
|
||||
|
||||
As of version 3.4 a similar rule applies to the network boot sequence, see netbooting.txt
|
||||
for details.
|
||||
|
||||
V/ Interactive mode
|
||||
----------------
|
||||
|
||||
Elilo can be forced into interactive mode using the "prompt" option in the config
|
||||
file or with the -p option. In this mode, the user can select a kernel to load.
|
||||
|
||||
The interface depends on the chooser, it may be a simple command line prompt as provided
|
||||
by the simple chooser or a more sophisticated screen with scroll menus as provided by
|
||||
textmenu. Most choosers depends on the elilo config file to get the information they
|
||||
display. The simple chooser can operated without the elilo config file. However it
|
||||
is always better to have this file, to create handy logical names for each possible
|
||||
boot choices. The logical names are specified with the "label" option in the config
|
||||
file. They represent a specific kernel "image" and its specific options.
|
||||
|
||||
In elilo, the user can select a particular kernel image using the corresponding label
|
||||
name. A simple example is as follows:
|
||||
|
||||
If we suppose that the following is defined in elilo.conf:
|
||||
|
||||
image=vmlinuz-2.4.9
|
||||
label=linux-up
|
||||
initrd=initrd-2.4.9
|
||||
root=/dev/sda2
|
||||
append="console=tty0 console=ttyS0,115200n8"
|
||||
|
||||
then the user can specify linux-up at the prompt and elilo will load the
|
||||
vmlinuz-2.4.9 kernel file and the initrd-2.4.9 ramdisk and will pass
|
||||
|
||||
"root=/dev/sda2 console=tty0 console=ttyS0,115200n8"
|
||||
|
||||
as command line arguments to the kernel.
|
||||
|
||||
This behavior is identical to Lilo/x86. However, elilo further allows the user
|
||||
to specify actual kernel files names as well, i.e., kernels that are not defined
|
||||
in the configuration file. If we reuse the above example and the simple chooser,
|
||||
the user can type:
|
||||
|
||||
ELILO boot: vmlinux-2.4.18 root=/dev/sda2
|
||||
|
||||
and elilo will boot the vmlinuz-2.4.18 kernel if it exists.
|
||||
|
||||
VI/ The alternate kernel image
|
||||
--------------------------
|
||||
|
||||
Oftentimes when debugging kernels you want to reboot the machine once with
|
||||
your test kernel and, if something goes wrong, you want to fall back to a more
|
||||
stable kernel. In addition you want to be able to do this from a remote machine.
|
||||
Many things can go wrong when doing kernel debugging. It could be that you don't
|
||||
even reach user-mode. In this case however, you still want to fall back to
|
||||
a stable kernel. The feature you'd like from a boot loader is 'boot once and
|
||||
then fall back to safe kernel'.
|
||||
|
||||
Elilo offers this feature and it's called 'alternate kernel image'.
|
||||
You can configure elilo to load a kernel only once and then whatever
|
||||
happens the next reboot falls back to a different kernel hopefully more stable.
|
||||
|
||||
To do this, elilo relies on an EFI variable called 'EliloAlt' with a NULL GUID.
|
||||
The content of this variable is a UNICODE string containing the kernel file name
|
||||
and its command line options.
|
||||
|
||||
When the -a option is specified on the command line or if the "checkalt" option
|
||||
is present in the config file, elilo will check for the presence of this variable.
|
||||
If found and the content is a valid UNICODE string, elilo will use it as the kernel
|
||||
to boot. There is no verification made on the validity of the kernel name or options.
|
||||
Then the variable is deleted. If the variable is rejected because it does not look
|
||||
sane, it is also deleted.
|
||||
|
||||
The variable can be set from a running Linux system using the /proc/efi/vars
|
||||
interface. In the tools directory of this package, there is a Linux tool called
|
||||
elilovar which can be used to create, modify, print, and delete the EliloAlt
|
||||
variable. Refer to eliloalt.txt for more information on this tool.
|
||||
|
||||
VII/ Auto booting the machine
|
||||
-----------------------
|
||||
|
||||
Once you're satisfied with your machine setup, it is good to install an
|
||||
auto boot procedure. You have two options to do this:
|
||||
- from the EFI boot manager menu
|
||||
- from the EFI shell
|
||||
|
||||
The first option is preferred and is used by most Linux distributions.
|
||||
Elilo can be invoked directly from the boot manager. You need to get into
|
||||
the 'boot maintenance' menu and use load file a file. This can be tedious
|
||||
so instead it is recommended that you use a Linux tool called efibootmgr
|
||||
which is also shipped in most distributions. With this tool, you can
|
||||
create your own boot option and change the boot order.
|
||||
|
||||
|
||||
|
||||
The second approach use the EFI shell and a shell script with a special name: 'startup.nsh'.
|
||||
|
||||
When the system boots, it looks for EFI partitions and if it finds
|
||||
a 'startup.nsh' file in ANY of these it will jumpstart execution from it.
|
||||
|
||||
So the typical way of auto booting your Linux/ia64 system is to simply create
|
||||
such a file with the following content:
|
||||
|
||||
# cat /boot/startup.nsh
|
||||
elilo vmlinuz root=/dev/sda2
|
||||
|
||||
Of course, this can be simplified if there is a configuration file.
|
||||
|
||||
|
||||
VII/ Netbooting
|
||||
----------
|
||||
|
||||
Please refer to netbooting.txt for a complete description of how to boot
|
||||
from the network.
|
||||
|
||||
|
||||
XII/ Booting on EFI/ia32 platforms
|
||||
-----------------------------
|
||||
|
||||
Until PC comes with the EFI firmware built in, you need to boot from a
|
||||
floppy that has the EFI firmware on it. Such floppy can be
|
||||
constructed from the EFI sample implementation and toolkit that is
|
||||
available from the Intel Developer Web site at:
|
||||
|
||||
http://developer.intel.com/technology/efi/
|
||||
|
||||
To use elilo on IA-32, you can put it on a floppy and
|
||||
on a FAT32 partition (msdos partition). You can also
|
||||
netbooting if you network adapter has support for UNDI/PXE.
|
||||
|
||||
Elilo/ia32 is capable of booting unmodified 2.2.x. and 2.4.x kernels
|
||||
as they are shipped by distributors today (such as Redhat7.2). You don't need
|
||||
to recompile the kernel with special options. Elilo ONLY takes compressed kernel
|
||||
image which are typically obtained via a 'make bzImage'. Plain elf/32 kernel can't
|
||||
be booted (plain vmlinux will not work). Similarly, existing initial ramdisks can
|
||||
be used without modifications.
|
||||
|
||||
XIII/ Booting on EFI/x86_64 platforms
|
||||
-----------------------------
|
||||
|
||||
To use elilo on x86_64, you can put it on a floppy and
|
||||
on a FAT32 partition (msdos partition). You can also
|
||||
netboot if your network adapter has support for UNDI/PXE.
|
||||
|
||||
Elilo/x86_64 requires efi64 enabled linux kernel (> 2.6.21).
|
||||
You need to compile the kernel with CONFIG_EFI option.
|
||||
x86_64 platforms with UEFI 2.0 firmware deprecate UGA protocol
|
||||
and therefore only the Graphics Output Protocol (GOP) is supported. For
|
||||
such platforms, the kernel must be configured with EFI_FB option. This
|
||||
will enable early boot messages on the console. The elilo for x86_64
|
||||
attempts to query the firmware for GOP and if it fails it defaults to
|
||||
text mode. Elilo ONLY takes compressed kernel image which are
|
||||
typically obtained via a 'make bzImage'. Plain elf/x86_64 kernel can't
|
||||
be booted (plain vmlinux will not work). Similarly, existing initial
|
||||
ramdisks can be used without modifications.
|
||||
|
||||
The x86_64 implementation converts the EFI memory map into E820 map and
|
||||
passes it in the bootparameter supplied to the OS. For details on
|
||||
bootparameter, see x86_64/sysdeps.h.
|
||||
|
||||
IX/ Credits
|
||||
-------
|
||||
|
||||
Contributors:
|
||||
Intel Corp.
|
||||
Stephane Eranian <eranian@hpl.hp.com>
|
||||
David Mosberger <davidm@hpl.hp.com>
|
||||
Johannes Erdfelt <jerdfelt@valinux.com>
|
||||
Richard Hirst <rhirst@linuxcare.com>
|
||||
Chris Ahna <christopher.j.ahna@intel.com>
|
||||
Mike Johnston <michael.johnston@intel.com>
|
||||
Fenghua Yu <fenghua.yu@intel.com>
|
||||
Bibo Mao <bibo.mao@intel.com>
|
||||
Brett Johnson <brett@hp.com>
|
||||
Jason Fleischli <Jason.Fleischli@hp.com>
|
||||
Chandramouli Narayanan <mouli@linux.intel.com>
|
||||
|
||||
Maintainers:
|
||||
Jason Fleischli <Jason.Fleischli@hp.com>
|
||||
|
||||
X/ Bug reports
|
||||
-----------
|
||||
|
||||
Use the sourceforge bug submission system on the elilo sourceforge
|
||||
project page for reporting including errors or descrepancies in this
|
||||
document.
|
||||
|
||||
XIII/ Reference
|
||||
---------
|
||||
|
||||
UEFI 2.0 specifications are available from the following web site:
|
||||
|
||||
http://www.uefi.org/home
|
||||
|
||||
EFI v1.02 specifications are available from the following web site:
|
||||
|
||||
http://developer.intel.com/technology/efi/
|
||||
|
||||
The latest sources of ELILO can be downloaded at:
|
||||
|
||||
https://sourceforge.net/projects/elilo/files/
|
||||
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
August 2003
|
||||
|
||||
Copyright (C) 2000-2003 Hewlett-Packard Co.
|
||||
Copyright (C) 2000-2012 Hewlett-Packard Co.
|
||||
Copyright (C) 2006-2010 Intel Co.
|
||||
|
||||
|
||||
|
@ -14,7 +14,7 @@ I/ Introduction
|
|||
------------
|
||||
|
||||
This document describes how to use ELILO on for IA-64, IA-32 and x86_64 EFI-based platforms.
|
||||
This document describes ELILO version 3.7.
|
||||
This document describes ELILO version 3.7 - 3.14.
|
||||
|
||||
II/ Command line options
|
||||
--------------------
|
||||
|
@ -85,7 +85,7 @@ II/ Command line options
|
|||
|
||||
For x86_64:
|
||||
----------
|
||||
No new options.
|
||||
none
|
||||
|
||||
III/ Configuration File
|
||||
------------------
|
||||
|
@ -243,7 +243,7 @@ III/ Configuration File
|
|||
|
||||
x86_64 specific options:
|
||||
-----------------------
|
||||
None yet.
|
||||
text-mode elilo>=3.14 boolean, image config option to force text console mode.
|
||||
|
||||
IV/ Booting from the local system
|
||||
-----------------------------
|
||||
|
@ -481,6 +481,7 @@ XIII/ Booting on EFI/x86_64 platforms
|
|||
IX/ Credits
|
||||
-------
|
||||
|
||||
Contributors:
|
||||
Intel Corp.
|
||||
Stephane Eranian <eranian@hpl.hp.com>
|
||||
David Mosberger <davidm@hpl.hp.com>
|
||||
|
@ -490,14 +491,19 @@ IX/ Credits
|
|||
Mike Johnston <michael.johnston@intel.com>
|
||||
Fenghua Yu <fenghua.yu@intel.com>
|
||||
Bibo Mao <bibo.mao@intel.com>
|
||||
Brett Johnson <brett@hp.com>
|
||||
Jason Fleischli <Jason.Fleischli@hp.com>
|
||||
Chandramouli Narayanan <mouli@linux.intel.com>
|
||||
|
||||
Maintainers:
|
||||
Jason Fleischli <Jason.Fleischli@hp.com>
|
||||
|
||||
X/ Bug reports
|
||||
-----------
|
||||
|
||||
You can submit bugs to <eranian@hpl.hp.com> or to the Linux/ia64
|
||||
mailing list at linux-ia64@linuxia64.org. Visit http://www.linuxia64.org
|
||||
to subscribe to this list.
|
||||
Use the sourceforge bug submission system on the elilo sourceforge
|
||||
project page for reporting including errors or descrepancies in this
|
||||
document.
|
||||
|
||||
XIII/ Reference
|
||||
---------
|
||||
|
@ -512,5 +518,5 @@ XIII/ Reference
|
|||
|
||||
The latest sources of ELILO can be downloaded at:
|
||||
|
||||
ftp://ftp.hpl.hp.com/pub/linux-ia64
|
||||
https://sourceforge.net/projects/elilo/files/
|
||||
|
||||
|
|
BIN
elilo-ia32.efi
BIN
elilo-ia32.efi
Binary file not shown.
BIN
elilo-ia64.efi
BIN
elilo-ia64.efi
Binary file not shown.
BIN
elilo-x86_64.efi
BIN
elilo-x86_64.efi
Binary file not shown.
9
elilo.c
9
elilo.c
|
@ -46,7 +46,7 @@
|
|||
#include "loader.h"
|
||||
#include "config.h" /* for config_init() */
|
||||
|
||||
#define ELILO_SHARED_CMDLINE_OPTS L"pPMC:aDhd:i:vVc:E"
|
||||
#define ELILO_SHARED_CMDLINE_OPTS L"pPMC:aDhd:i:m:vVc:E"
|
||||
|
||||
elilo_config_t elilo_opt;
|
||||
|
||||
|
@ -240,7 +240,7 @@ main_loop(EFI_HANDLE dev, CHAR16 **argv, INTN argc, INTN index, EFI_HANDLE image
|
|||
}
|
||||
|
||||
do_launch:
|
||||
r =subst_vars(cmdline_tmp, cmdline, CMDLINE_MAXLEN);
|
||||
r = subst_vars(cmdline_tmp, cmdline, CMDLINE_MAXLEN);
|
||||
|
||||
VERB_PRT(3, Print(L"final cmdline(%d): %s\n", r, cmdline));
|
||||
|
||||
|
@ -483,6 +483,11 @@ efi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *system_tab)
|
|||
*/
|
||||
uefi_call_wrapper(BS->SetWatchdogTimer, 4, 0, 0x0, 0, NULL);
|
||||
|
||||
/*
|
||||
* start a clean console
|
||||
*/
|
||||
uefi_call_wrapper(systab->ConOut->Reset, 2, systab->ConOut, FALSE);
|
||||
|
||||
/* initialize memory allocator */
|
||||
if (alloc_init() == -1) return EFI_LOAD_ERROR;
|
||||
|
||||
|
|
2
elilo.h
2
elilo.h
|
@ -29,7 +29,7 @@
|
|||
#ifndef __ELILO_H__
|
||||
#define __ELILO_H__
|
||||
|
||||
#define ELILO_VERSION L"3.14"
|
||||
#define ELILO_VERSION L"3.16"
|
||||
|
||||
#include <efi.h>
|
||||
|
||||
|
|
13
fs/Makefile
13
fs/Makefile
|
@ -23,10 +23,15 @@
|
|||
# to use this program.
|
||||
#
|
||||
|
||||
include ../Make.defaults
|
||||
include ../Make.rules
|
||||
SRCDIR = .
|
||||
|
||||
VPATH = $(SRCDIR)
|
||||
|
||||
include $(SRCDIR)/../Make.defaults
|
||||
include $(SRCDIR)/../Make.rules
|
||||
|
||||
TOPDIR=$(SRCDIR)/..
|
||||
|
||||
TOPDIR=$(CDIR)/..
|
||||
|
||||
FILES=
|
||||
ifeq ($(CONFIG_localfs),y)
|
||||
|
@ -59,7 +64,7 @@ $(TARGET): $(TOPDIR)/Make.defaults $(FILES)
|
|||
echo "You need to define at least one filesystem in Make.defaults"; \
|
||||
exit 1; \
|
||||
fi
|
||||
$(LD) -r -o $@ $(FILES)
|
||||
$(LD) $(LD3264) -r -o $@ $(FILES)
|
||||
|
||||
clean:
|
||||
$(RM) -f $(TARGET) $(FILES)
|
||||
|
|
|
@ -23,10 +23,15 @@
|
|||
# to use this program.
|
||||
#
|
||||
|
||||
include ../Make.defaults
|
||||
include ../Make.rules
|
||||
SRCDIR = .
|
||||
|
||||
VPATH = $(SRCDIR)
|
||||
|
||||
include $(SRCDIR)/../Make.defaults
|
||||
include $(SRCDIR)/../Make.rules
|
||||
|
||||
TOPDIR=$(SRCDIR)/..
|
||||
|
||||
TOPDIR=$(CDIR)/..
|
||||
|
||||
FILES=system.o config.o bzimage.o plain_loader.o gzip_loader.o gzip.o
|
||||
|
||||
|
@ -37,13 +42,13 @@ all: $(TARGET)
|
|||
system.o: rmswitch.h
|
||||
|
||||
rmswitch.h: bin_to_h.c rmswitch.S
|
||||
$(CC) -o bin_to_h bin_to_h.c
|
||||
$(AS) -o rmswitch.o rmswitch.S
|
||||
$(CC) -o bin_to_h $(SRCDIR)/bin_to_h.c
|
||||
$(AS) -o rmswitch.o $(SRCDIR)/rmswitch.S
|
||||
$(LD) -Ttext 0x0 -s --oformat binary -o rmswitch rmswitch.o
|
||||
./bin_to_h <rmswitch >rmswitch.h
|
||||
|
||||
$(TARGET): $(FILES)
|
||||
$(LD) -r -o $@ $(FILES)
|
||||
$(LD) $(LD3264) -r -o $@ $(FILES)
|
||||
|
||||
clean:
|
||||
$(RM) -f $(TARGET) $(FILES)
|
||||
|
|
|
@ -207,19 +207,8 @@ static INTN get_video_info(boot_params_t * bp) {
|
|||
(VOID **)Gop_handle);
|
||||
|
||||
if (EFI_ERROR(efi_status) && efi_status != EFI_BUFFER_TOO_SMALL) {
|
||||
Print(L"LocateHandle GopProtocol failed.\n");
|
||||
Print(L"--Either no graphics head is installed,\n" \
|
||||
"--efi console is set to serial, or,\n" \
|
||||
"--the EFI firmware version of this machine is\n" \
|
||||
"--older than UEFI 2.0. and does not support GOP");
|
||||
Print(L"you can SAFELY IGNORE this error. elilo will\n" \
|
||||
"default to text-mode.\n Alternatively you can " \
|
||||
"now force text mode by setting config variable\n" \
|
||||
"text_mode=1 for x86 in elilo.conf or via cmdline.\n\n");
|
||||
Print(L"However if this is the last text output you see\n" \
|
||||
"ensure that your kernel console command line\n " \
|
||||
"variable matches up with the actual efi boot menu\n" \
|
||||
"console output settings. for example efi console\n\n");
|
||||
Print(L"EFI returned no GoP handle, No Graphics Output Device?\n");
|
||||
Print(L"--Elilo will try to default to console text mode.\n");
|
||||
return -1;
|
||||
}
|
||||
Gop_handle = alloc(size, 0);
|
||||
|
@ -488,9 +477,6 @@ sysdeps_create_boot_params(
|
|||
*/
|
||||
if (param_start != NULL) {
|
||||
CopyMem(bp, param_start, 0x2000);
|
||||
free(param_start);
|
||||
param_start = NULL;
|
||||
param_size = 0;
|
||||
}
|
||||
/*
|
||||
* Save off our header revision information.
|
||||
|
|
|
@ -23,10 +23,15 @@
|
|||
# to use this program.
|
||||
#
|
||||
|
||||
include ../Make.defaults
|
||||
include ../Make.rules
|
||||
SRCDIR = .
|
||||
|
||||
VPATH = $(SRCDIR)
|
||||
|
||||
include $(SRCDIR)/../Make.defaults
|
||||
include $(SRCDIR)/../Make.rules
|
||||
|
||||
TOPDIR=$(SRCDIR)/..
|
||||
|
||||
TOPDIR=$(CDIR)/..
|
||||
|
||||
FILES=system.o config.o fpswa.o plain_loader.o gzip_loader.o \
|
||||
gzip.o memset.o memcpy.o setjmp.o longjmp.o
|
||||
|
|
|
@ -1,44 +1,47 @@
|
|||
3 . 1 4 R E L E A S E N O T E S
|
||||
3 . 1 6 R E L E A S E N O T E S
|
||||
===================================
|
||||
|
||||
QUICK CHANGE SUMMARY
|
||||
====================
|
||||
* Fixes for newly emerging x86_64 UEFI-2 boxes where long standing old
|
||||
assumptions are borked.
|
||||
* Uptake of SUSE and community patches
|
||||
- add sysfs support for efi vars (formerly /proc/efi/vars)
|
||||
- fix strncpy overflow
|
||||
- fix bzimage alloc
|
||||
- cleanups
|
||||
- support longer command line
|
||||
- yet some more mac fixes
|
||||
- align elilo with latest kernel boot protocol format.
|
||||
- new memory management strategy for initrd and kernel image loading.
|
||||
* add text-mode command line option, force text-mode (bypass graphics probes).
|
||||
* replace error output on GOP handle failed, downgraded to normal
|
||||
print status with more informative output.
|
||||
* Fix ia32 build issue with new gcc due to stack protector enforcement.
|
||||
* Adds native x86x crossbuild functionality
|
||||
build 32bit or 64bit versions from either environment via
|
||||
make ARCH=ia32|x86_64 (the ARCH IS case sensitive).
|
||||
make by itself will default to the native host arch.
|
||||
* Add console reset call during initialization. thanks A. Steinmetz
|
||||
* simplify output of no GOP warning text so it no longer looks like an error.
|
||||
* MAJOR: Fixed Fault crash when EFI memory map changes from under elilo.
|
||||
(from an outside interrupt in this case). When the EFI Memory map
|
||||
changes after elilo has already built boot params to pass to the
|
||||
kernel the EFI call to ExitBootSvcs just prior to boot will fail
|
||||
because elilo has the old map key. This is valid EFI behavior, elilo
|
||||
retries to pick up the new memory map and key but had already freed
|
||||
the start params portion of boot params resulting in a NULL DEREF
|
||||
crash reset once it hands the now bogus boot params to the kernel on
|
||||
the 2nd successful call to exit efi and boot.
|
||||
Thanks to Jerry Hoemann @ HP for reporting this bug.
|
||||
* minor bugfix, fixed -m option broken. thanks Allan-lsk.
|
||||
|
||||
BUILD NOTES
|
||||
====================
|
||||
You will need the following toolchain to build elilo-3.14 from source
|
||||
the elilo build environment is optimized for Debian and Debian based distros.
|
||||
elilo-3.14 was built in the Debian Lenny (Ubuntu 10.04) build environment.
|
||||
elilo-3.16 was built in the squeeze+(ubuntu 11.x) build environments except
|
||||
for itanium which is unchanged to best support legacy enterprise configs.
|
||||
Toolchain versions for this release were:
|
||||
x86x(32 &64)
|
||||
* gnu-efi --> 3.0i-2ubuntu1
|
||||
* gcc ------> 4.4.3-1ubuntu1
|
||||
* binutils -> 2.20.1-3ubuntu7
|
||||
x86x(32 & 64bit versions)
|
||||
* gnu-efi --> 3.0i-3
|
||||
* gcc ------> 4:4.4.4-1ubuntu2
|
||||
* binutils -> 2.20.51.20100908-0ubuntu2
|
||||
ia64
|
||||
* gnu-efi --> 3.0e-2
|
||||
* gcc ------> 4.3.2-2
|
||||
* binutils -> 2.18.1~cvs20080103-7
|
||||
|
||||
* if you use a debian based (lenny)build environment you will have no problems
|
||||
* if you use a debian based build environment you will have no problems
|
||||
and setting it up is simple. you will be able to build elilo in 3 steps:
|
||||
1. apt-get install gnu-efi, gcc, binutils
|
||||
2. apt-get source elilo (or download elilo-3.14.tar.gz from SourceForge.)
|
||||
3. extract source tarball and cd ./elilo-3.14 and type $> make
|
||||
2. apt-get source elilo (or download elilo-3.16 source from SourceForge.)
|
||||
3. extract source tarball and cd to ./$your-elilo-source and type $> make
|
||||
|
||||
|
||||
** If you use the upstream toolchain tarballs(i.e. pre distro) you will need
|
||||
|
@ -113,3 +116,4 @@ Additionally from ...kernel-source/Documentation/Boot.txt...
|
|||
description="Ubuntu 2.6.32-27-generic kernel"
|
||||
initrd=/initrd.img-2.6.32-27-generic
|
||||
|
||||
|
||||
|
|
|
@ -23,10 +23,15 @@
|
|||
# to use this program.
|
||||
#
|
||||
|
||||
include ../Make.defaults
|
||||
include ../Make.rules
|
||||
SRCDIR = .
|
||||
|
||||
VPATH = $(SRCDIR)
|
||||
|
||||
include $(SRCDIR)/../Make.defaults
|
||||
include $(SRCDIR)/../Make.rules
|
||||
|
||||
TOPDIR=$(SRCDIR)/..
|
||||
|
||||
TOPDIR=$(CDIR)/..
|
||||
|
||||
FILES=eliloalt.o
|
||||
TARGET=eliloalt
|
||||
|
|
|
@ -23,10 +23,15 @@
|
|||
# to use this program.
|
||||
#
|
||||
|
||||
include ../Make.defaults
|
||||
include ../Make.rules
|
||||
SRCDIR = .
|
||||
|
||||
VPATH = $(SRCDIR)
|
||||
|
||||
include $(SRCDIR)/../Make.defaults
|
||||
include $(SRCDIR)/../Make.rules
|
||||
|
||||
TOPDIR=$(SRCDIR)/..
|
||||
|
||||
TOPDIR=$(CDIR)/..
|
||||
|
||||
FILES=system.o config.o bzimage.o plain_loader.o gzip_loader.o gzip.o
|
||||
#FILES=system.o config.o plain_loader.o
|
||||
|
@ -38,13 +43,13 @@ all: $(TARGET)
|
|||
system.o: rmswitch.h
|
||||
|
||||
rmswitch.h: bin_to_h.c rmswitch.S
|
||||
$(CC) -o bin_to_h bin_to_h.c
|
||||
$(AS) -o rmswitch.o rmswitch.S
|
||||
$(CC) -o bin_to_h $(SRCDIR)/bin_to_h.c
|
||||
$(AS) -o rmswitch.o $(SRCDIR)/rmswitch.S
|
||||
$(LD) -Ttext 0x0 -s --oformat binary -o rmswitch rmswitch.o
|
||||
./bin_to_h <rmswitch >rmswitch.h
|
||||
|
||||
$(TARGET): $(FILES)
|
||||
$(LD) -r -o $@ $(FILES)
|
||||
$(LD) $(LD3264) -r -o $@ $(FILES)
|
||||
|
||||
clean:
|
||||
$(RM) -f $(TARGET) $(FILES)
|
||||
|
|
|
@ -641,10 +641,8 @@ sysdeps_create_boot_params(
|
|||
*/
|
||||
if (param_start != NULL) {
|
||||
CopyMem(bp, param_start, 0x2000);
|
||||
free(param_start);
|
||||
param_start = NULL;
|
||||
param_size = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Save off our header revision information.
|
||||
*/
|
||||
|
@ -703,10 +701,8 @@ sysdeps_create_boot_params(
|
|||
DBG_PRT((L"initrd->start_addr="PTR_FMT" initrd->pgcnt=%d\n",
|
||||
initrd->start_addr, initrd->pgcnt));
|
||||
|
||||
/* These RAMdisk flags are not needed, just zero them. NOT!*/
|
||||
/* 'ramdisk_flags' (@0x1F8) is called 'ram_size' in the meantime, */
|
||||
/* see Documentation/x86/boot.txt. */
|
||||
|
||||
if (initrd->start_addr && initrd->pgcnt) {
|
||||
if ( (UINT64)initrd->start_addr > UINT32_MAX ) {
|
||||
ERR_PRT((L"Start of initrd out of reach (>4GB)."));
|
||||
|
|
Loading…
Reference in a new issue