![Michael Brown](/assets/img/avatar_default.png)
This patch extends the embedded image feature to allow multiple embedded images instead of just one. gPXE now always boots the first embedded image on startup instead of doing the hardcoded DHCP boot (aka autoboot). Based heavily upon a patch by Stefan Hajnoczi <stefanha@gmail.com>.
222 lines
3.9 KiB
C
222 lines
3.9 KiB
C
/*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation; either version 2, or (at
|
|
* your option) any later version.
|
|
*/
|
|
|
|
#include <config/general.h>
|
|
#include <config/console.h>
|
|
|
|
/*
|
|
* Build ID string calculations
|
|
*
|
|
*/
|
|
#undef XSTR
|
|
#undef STR
|
|
#define XSTR(s) STR(s)
|
|
#define STR(s) #s
|
|
|
|
#ifdef BUILD_SERIAL
|
|
#include "config/.buildserial.h"
|
|
#define BUILD_SERIAL_STR " #" XSTR(BUILD_SERIAL_NUM)
|
|
#else
|
|
#define BUILD_SERIAL_STR ""
|
|
#endif
|
|
|
|
#ifdef BUILD_ID
|
|
#define BUILD_ID_STR " " BUILD_ID
|
|
#else
|
|
#define BUILD_ID_STR ""
|
|
#endif
|
|
|
|
#if defined(BUILD_ID) || defined(BUILD_SERIAL)
|
|
#define BUILD_STRING " [build" BUILD_ID_STR BUILD_SERIAL_STR "]"
|
|
#else
|
|
#define BUILD_STRING ""
|
|
#endif
|
|
|
|
/*
|
|
* Drag in all requested console types
|
|
*
|
|
*/
|
|
|
|
#ifdef CONSOLE_PCBIOS
|
|
REQUIRE_OBJECT ( bios_console );
|
|
#endif
|
|
#ifdef CONSOLE_SERIAL
|
|
REQUIRE_OBJECT ( serial_console );
|
|
#endif
|
|
#ifdef CONSOLE_DIRECT_VGA
|
|
REQUIRE_OBJECT ( video_subr );
|
|
#endif
|
|
#ifdef CONSOLE_BTEXT
|
|
REQUIRE_OBJECT ( btext );
|
|
#endif
|
|
#ifdef CONSOLE_PC_KBD
|
|
REQUIRE_OBJECT ( pc_kbd );
|
|
#endif
|
|
#ifdef CONSOLE_SYSLOG
|
|
REQUIRE_OBJECT ( syslog );
|
|
#endif
|
|
#ifdef CONSOLE_EFI
|
|
REQUIRE_OBJECT ( efi_console );
|
|
#endif
|
|
|
|
/*
|
|
* Drag in all requested network protocols
|
|
*
|
|
*/
|
|
#ifdef NET_PROTO_IPV4
|
|
REQUIRE_OBJECT ( ipv4 );
|
|
#endif
|
|
|
|
/*
|
|
* Drag in all requested download protocols
|
|
*
|
|
*/
|
|
#ifdef DOWNLOAD_PROTO_TFTP
|
|
REQUIRE_OBJECT ( tftp );
|
|
#endif
|
|
#ifdef DOWNLOAD_PROTO_NFS
|
|
REQUIRE_OBJECT ( nfs );
|
|
#endif
|
|
#ifdef DOWNLOAD_PROTO_HTTP
|
|
REQUIRE_OBJECT ( http );
|
|
#endif
|
|
#ifdef DOWNLOAD_PROTO_HTTPS
|
|
REQUIRE_OBJECT ( https );
|
|
#endif
|
|
#ifdef DOWNLOAD_PROTO_FTP
|
|
REQUIRE_OBJECT ( ftp );
|
|
#endif
|
|
#ifdef DOWNLOAD_PROTO_TFTM
|
|
REQUIRE_OBJECT ( tftm );
|
|
#endif
|
|
#ifdef DOWNLOAD_PROTO_SLAM
|
|
REQUIRE_OBJECT ( slam );
|
|
#endif
|
|
|
|
/*
|
|
* Drag in all requested SAN boot protocols
|
|
*
|
|
*/
|
|
#ifdef SANBOOT_PROTO_ISCSI
|
|
REQUIRE_OBJECT ( iscsiboot );
|
|
#endif
|
|
#ifdef SANBOOT_PROTO_AOE
|
|
REQUIRE_OBJECT ( aoeboot );
|
|
#endif
|
|
|
|
/*
|
|
* Drag in all requested resolvers
|
|
*
|
|
*/
|
|
#ifdef DNS_RESOLVER
|
|
REQUIRE_OBJECT ( dns );
|
|
#endif
|
|
#ifdef NMB_RESOLVER
|
|
REQUIRE_OBJECT ( nmb );
|
|
#endif
|
|
|
|
/*
|
|
* Drag in all requested image formats
|
|
*
|
|
*/
|
|
#ifdef IMAGE_NBI
|
|
REQUIRE_OBJECT ( nbi );
|
|
#endif
|
|
#ifdef IMAGE_ELF
|
|
REQUIRE_OBJECT ( elfboot );
|
|
#endif
|
|
#ifdef IMAGE_FREEBSD
|
|
REQUIRE_OBJECT ( freebsd );
|
|
#endif
|
|
#ifdef IMAGE_MULTIBOOT
|
|
REQUIRE_OBJECT ( multiboot );
|
|
#endif
|
|
#ifdef IMAGE_AOUT
|
|
REQUIRE_OBJECT ( aout );
|
|
#endif
|
|
#ifdef IMAGE_WINCE
|
|
REQUIRE_OBJECT ( wince );
|
|
#endif
|
|
#ifdef IMAGE_PXE
|
|
REQUIRE_OBJECT ( pxe_image );
|
|
#endif
|
|
#ifdef IMAGE_SCRIPT
|
|
REQUIRE_OBJECT ( script );
|
|
#endif
|
|
#ifdef IMAGE_BZIMAGE
|
|
REQUIRE_OBJECT ( bzimage );
|
|
#endif
|
|
#ifdef IMAGE_ELTORITO
|
|
REQUIRE_OBJECT ( eltorito );
|
|
#endif
|
|
#ifdef IMAGE_COMBOOT
|
|
REQUIRE_OBJECT ( comboot );
|
|
REQUIRE_OBJECT ( com32 );
|
|
REQUIRE_OBJECT ( comboot_call );
|
|
REQUIRE_OBJECT ( com32_call );
|
|
REQUIRE_OBJECT ( com32_wrapper );
|
|
REQUIRE_OBJECT ( comboot_resolv );
|
|
#endif
|
|
#ifdef IMAGE_EFI
|
|
REQUIRE_OBJECT ( efi_image );
|
|
#endif
|
|
|
|
/*
|
|
* Drag in all requested commands
|
|
*
|
|
*/
|
|
#ifdef AUTOBOOT_CMD
|
|
REQUIRE_OBJECT ( autoboot_cmd );
|
|
#endif
|
|
#ifdef NVO_CMD
|
|
REQUIRE_OBJECT ( nvo_cmd );
|
|
#endif
|
|
#ifdef CONFIG_CMD
|
|
REQUIRE_OBJECT ( config_cmd );
|
|
#endif
|
|
#ifdef IFMGMT_CMD
|
|
REQUIRE_OBJECT ( ifmgmt_cmd );
|
|
#endif
|
|
#ifdef ROUTE_CMD
|
|
REQUIRE_OBJECT ( route_cmd );
|
|
#endif
|
|
#ifdef IMAGE_CMD
|
|
REQUIRE_OBJECT ( image_cmd );
|
|
#endif
|
|
#ifdef DHCP_CMD
|
|
REQUIRE_OBJECT ( dhcp_cmd );
|
|
#endif
|
|
#ifdef SANBOOT_CMD
|
|
REQUIRE_OBJECT ( sanboot_cmd );
|
|
#endif
|
|
|
|
/*
|
|
* Drag in miscellaneous objects
|
|
*
|
|
*/
|
|
#ifdef NULL_TRAP
|
|
REQUIRE_OBJECT ( nulltrap );
|
|
#endif
|
|
#ifdef GDBSERIAL
|
|
REQUIRE_OBJECT ( gdbidt );
|
|
REQUIRE_OBJECT ( gdbserial );
|
|
REQUIRE_OBJECT ( gdbstub_cmd );
|
|
#endif
|
|
#ifdef GDBUDP
|
|
REQUIRE_OBJECT ( gdbidt );
|
|
REQUIRE_OBJECT ( gdbudp );
|
|
REQUIRE_OBJECT ( gdbstub_cmd );
|
|
#endif
|
|
|
|
/*
|
|
* Drag in objects that are always required, but not dragged in via
|
|
* symbol dependencies.
|
|
*
|
|
*/
|
|
REQUIRE_OBJECT ( device );
|
|
REQUIRE_OBJECT ( embedded );
|