I've just pushed out a 6.00-pre1 release. This release includes support
for booting EFI machines. The code is currently in the alpha stage.
Having said that, you should expect most things to work correctly,
including things like the graphical menu.
Please help test if you can, and if you find any bugs, please report
them.
To facilitate building different versions of syslinux.efi (32-bit and
64-bit) as well as the original BIOS code, the build system had to be
updated. That change is introduced in commit 1408e6ca7b38 ("Add
per-firmware object directory support") which also adds a new
doc/building.txt file that describes how to build your desired firmware
target. Essentially what you're likely to want to type is,
make efi64
which will just build a 64-bit syslinux.efi in efi64/efi/syslinux.efi.
There are some features missing from this release (TODO items),
* Changes to the SYSLINUX installer
* EFI support for PXELINUX
* Automatically finding gnu-efi files
but these should appear at some point in the future (the installer fix
will be the *near* future, you currently need to manually copy
syslinux.efi to your EFI system partition).
In case anyone's interested below is the short log between
Syslinux-5.00-pre9, e.g. all the changes that are 6.00-specific.
---
Chandramouli Narayanan (12):
core: Remove unused argument to init()
efi: Actually return a character in efi_getchar()
efi: Add Auxiliary Data Vector support
core, efi: Return new pointer in realloc()
efi: Turn off debugging support by default
ansi: Improve EFI console support
module: Define __{ctors,dtors}_end symbols
core: Rename DEBUG macro to avoid gnu-efi library conflict
Debug prints to core/fs/fs.c and core/fs/fat.c have been added.
efi: Reworked EFI boot loader on several fronts.
efi: Fix the screen setup for Graphics Output Protocol
efi, vesa: Fix vesa initialization and video mode resolution
Matt Fleming (60):
core: Add firmware backend support
com32: Provide a language standard version
Move the list of MINLIBOBJS to mk/lib.mk so that we can include it in
efi/Makefile.
core: Do not use -mregparm
efi: Add UEFI firmware backend
core: Rebuild core objects for EFI
disk: Add .disk_init() to firmware struct
efi: Disk I/O support
EFI: Implement malloc with {Allocate/Free}Pool()
com32: Add firmware backend support to ansicon
elflink: Don't statically initialise core_module.base_addr
ldlinux: Initialise 'p' before using it.
com32: Delete duplicate ipappend.c
firmware: Don't include disk.h
firmware: Add .get_config_file_name
firmware: Add .get_serial_console_info
com32: Remove __constructor tag from __syslinux_get_shuffer_size()
firmware: Move firmware code into core/bios.c
firmware: Add .ipappend_strings function pointer
linux: Move linux_header definition to header
com32: Move initramfs_size() into header file
ldlinux: Handle multiple arguments to initrd firmware: Add EFI linux
boot support
efi: Delete efi/wrapper in spotless make target
Merge branch 'linux-boot' into for-hpa/elflink/firmware
firmware, diskio: Create struct disk_private
firmware: Fix assorted compiler warnings
efi: Zero e_hdr_pe32p before use
Merge remote-tracking branch 'mfleming/elflink' into
for-hpa/elflink/firmware
core: Change numIPAppends data type
Merge remote-tracking branch 'mfleming/elflink' into
for-hpa/elflink/firmware
efi, ansi: Improve console handling even further (e.g. scrolling support)
module: Consolidate lots of 32/64-bit code
Create derivative-specific files
Merge branch 'elflink' into for-hpa/elflink/firmware
efi: We don't need two memory_map() functions
efi: Update the correct copy of hdr
rosh: Update default make target
Add per-firmware object directory support
efi: Delete unused variables
efi: Add support for UGA devices
efi: Forward declare 'struct screen_info'
Makefile: Only provide one make rule for each directory
efi: Fix warning about discarding const qualifier
com32.h: Fix MK_PTR() for 64-bit
initvesa.c: Delete unused variables (set but not used) and cleanup
screencpy.c: Delete unused variables and cleanup
i915resolution.c: cast to 64-bit sized ptr
vesa: Change the prototype of __vesacon_init()
Merge branch 'cleanup' into for-hpa/elflink/firmware
Merge tag 'syslinux-5.00-pre9' into for-hpa/elflink/firmware
NEWS, version: Now working on the 6.00 release
libinstaller: Fixup merge botch
Makefile: Correct the location of Makefile.private
Makefile: Correct version.mk path
efi: Add 'strip' make target and don't installer wrapper
Makefile: Change default object directory
Makefile.private: Update for new per-firmware object directories
Makefile: Every invocation of make needs access to syslinux.mk
Makefile: Add upload targets to $(private-targets)
Shao Miller (1):
efi: Fix a memory map buffer release
chandramouli narayanan (13):
Patches here support 32bit and 64bit environment.
This patch implements the setjmp/longjmp, memcpy, memmove, memset and
mempcpy functions as appropriate for the architecture. The code came from
klibc. com32/lib has i386 and x86_64 sub directories implementing the code.
Architecture dependency in LZO data compression library in subdirectory
core/lzo/ is taken care to be able to build fo i386 for x86_64.
EFI boot loader in efi_boot_linux() now supports booting i386 and x86_64
linux kernels. Main x86_64 changes are in a) setting up high part of EFI
system table and memmap b) loader signature c) setting up jump vector to
hand off to kernel.
The ELF module load and the utility library routines fully support lookup,
resolution and relocation of symbols for both ELF32 and ELF64 environments.
With this, syslinux.efi built for i386 and x86_64 can load the respective
native command modules dynamically. The architecture dependent files are
split into respective subdirectories (com32/lib/sys/module/i386 &
com32/lib/sys/module/x86_64) for the build environment to pick.
This is a giant patch that splits the linker scripts for libraries,
modules and executables into the architecture-dependent scripts to
facilitate building syslinux modules/executables for i386 and x86_64
environments. The x86_64 linker scripts are derived from the earlier i386
counterparts.
The make files have undergone changes to support both i386 and x86_64
platforms. Pertinent changes are sprinkled through *.mk and Makefile in the
syslinux tree.
This patch implements architecture-dependent code in memdisk to support
for i386 and x86_64. The memcpy, memset and memmove routines originated from
klibc.
The assembler directive in memdump/code16.h is fixed for x86_64 build.
Archicture-dependent get_cpuid in sysdump/cpuid is fixed.
Console input initiated by com32 modules and sample programs hang on both
i386 and x86_64. The issue is traced to the implementation of get_key()
underlying firmware. For stdin file descriptor, the console read finally
resolves to __rawcon_read() implemented in com32/lib/sys/rawcon_read.c. This
file is firmware-dependent and currently has only BIOS-specific code As a
temporary fix, in EFI, __rawcon_read() is implemented using getchar(). The
implementation of getchar() in EFI is guided by the firmware structure that
points to efi_getchar(). With this temporary fix, com32 command modules that
wait on console input work.
efi_getchar() should wait for the event before reading keystroke. On
an efi64 platform, it didn't work without wait. It needs further
debugging to ascertain the fix.
This is the first cut checkin for GOP supporting the menu subsystem.
For the initial cut, all of vesa code is dropped into vesa/efi with code
buildable for EFI with a build option. There is VESA only code that is in
the efi subdirectory as well that should go away eventually. Other files not
dependent on EFI or not relevant to EFI need to be removed as well (e.g.
i915resolution.c).
--
Matt Fleming, Intel Open Source Technology Center