[LinuxBIOS] buildrom: add preliminary gpxe support

Jordan Crouse jordan.crouse at amd.com
Fri Nov 30 21:40:41 CET 2007


On 30/11/07 00:16 -0500, Ward Vandewege wrote:
> See attached.
> 
> Thanks,
> Ward.
> 
> -- 
> Ward Vandewege <ward at fsf.org>
> Free Software Foundation - Senior System Administrator

> 
> This patch adds preliminary gPXE support to buildrom. gPXE is the successor of
> etherboot. It is currently undergoing some major work and does not have
> LinuxBIOS support, so this is not useful yet - gPXE does not even build elf
> images right now. 
> 
> Peter and I talked to the friendly folks at #etherboot. They were interested in
> re-adding LinuxBIOS support but are a bit short of time. If someone wants to
> help out, that would be great; if not it might be a while before this becomes
> useful.
> 
> The patch updates the fetchgit.sh script to bring it up to date with current 
> git tools, and pulls in gPXE from the git 'head'. gPXE will only show up in 
> kconfig when EXPERIMENTAL is enabled.
> 
> Signed-off-by: Ward Vandewege <ward at gnu.org>
Acked-by: Jordan Crouse <jordan.crouse at amd.com>

> Index: config/payloads/payloads.conf
> ===================================================================
> --- config/payloads/payloads.conf	(revision 68)
> +++ config/payloads/payloads.conf	(working copy)
> @@ -18,6 +18,7 @@
>  PCONF-y=
>  PCONF-$(CONFIG_PAYLOAD_LAB) = lab.conf
>  PCONF-$(CONFIG_PAYLOAD_ETHERBOOT) = etherboot.conf
> +PCONF-$(CONFIG_PAYLOAD_GPXE) = gpxe.conf
>  PCONF-$(CONFIG_PAYLOAD_FILO) = filo.conf
>  #PCONF-$(CONFIG_PAYLOAD_OFW) = ofw.conf
>  PCONF-$(CONFIG_PAYLOAD_MEMTEST) = memtest.conf
> Index: config/payloads/Config.in
> ===================================================================
> --- config/payloads/Config.in	(revision 68)
> +++ config/payloads/Config.in	(working copy)
> @@ -12,6 +12,11 @@
>  config PAYLOAD_CUSTOM
>  	bool "Custom Payload"
>  
> +config PAYLOAD_GPXE
> +	depends EXPERIMENTAL
> +	bool "GPXE"
> +	select PAYLOAD
> +
>  config PAYLOAD_ETHERBOOT
>  	depends !PLATFORM_M57SLI
>  	depends !PLATFORM_TYAN_S2891
> @@ -127,4 +132,19 @@
>  	  Etherboot project for more details
>  
>  endmenu
> +
> +menu "GPXE Configuration"
> +depends PAYLOAD_GPXE
> +depends EXPERIMENTAL
> +
> +config GPXE_DRIVER
> +	string "GPXE NIC driver to support"
> +	default "rtl8139"
> +	help
> +	  Specify the GPXE NIC driver to build a ROM for.  See the
> +	  GPXE project for more details
> +
>  endmenu
> +
> +
> +endmenu
> Index: bin/fetchgit.sh
> ===================================================================
> --- bin/fetchgit.sh	(revision 68)
> +++ bin/fetchgit.sh	(working copy)
> @@ -5,12 +5,13 @@
>  DIR=$2
>  TAG=$3
>  TARBALL=$4
> +NAME=$5
>  
>  # If the base git directory doesn't exist, then we need to clone it
>  
> -if [ ! -d $DIR/git ]; then 
> +if [ ! -d $DIR/.git ]; then 
>  	echo "Cloning $URL..."
> -	git-clone --bare $URL $DIR/git
> +	git-clone $URL $DIR
>  	if [ $? -ne 0 ]; then
>  		echo "Couldn't clone $URL."
>  		exit 1
> @@ -19,7 +20,7 @@
>  
>  # Fetch the latest and greatest bits
>  
> -export GIT_DIR=$DIR/git
> +export GIT_DIR=$DIR/.git
>  
>  git-fetch $URL
>  git-fetch --tags $URL
> @@ -27,4 +28,4 @@
>  git-pack-redundant --all | xargs -r rm
>  
>  # Make the tarball 
> -git-tar-tree $TAG git | gzip > $TARBALL
> +git-tar-tree $TAG $NAME-$TAG | bzip2 > $TARBALL
> Index: Config.in
> ===================================================================
> --- Config.in	(revision 68)
> +++ Config.in	(working copy)
> @@ -19,6 +19,16 @@
>  	help
>  	  Allow yourself to do advanced developer things
>  
> +config EXPERIMENTAL
> +	bool "Enable experimental features"
> +	default n
> +	help
> +		Experimental features are not yet ready for prime time and/or 
> +		completely broken. The features revealed by this setting are likely to be 
> +		only useful if you are a developer and want to hack on buildrom.
> +
> +		If you are not sure, say no.
> +
>  menu "LinuxBIOS configuration"
>  
>  config USE_LZMA
> Index: packages/gpxe/conf/Config.main
> ===================================================================
> --- packages/gpxe/conf/Config.main	(revision 0)
> +++ packages/gpxe/conf/Config.main	(revision 0)
> @@ -0,0 +1,96 @@
> +CFLAGS+=	-DCONFIG_PCI -DCONFIG_ISA
> +CFLAGS+=	-DASK_BOOT=3 -DBOOT_FIRST=BOOT_NIC
> +
> +ifdef	INCLUDE_FILO
> +CFLAGS+=	-DCONFIG_FILO
> +endif
> +
> +CFLAGS+=	-DALLOW_ONLY_ENCAPSULATED
> +CFLAGS+=	-DBACKOFF_LIMIT=7 -DCONGESTED
> +CFLAGS+=	-DTAGGED_IMAGE -DELF_IMAGE
> +CFLAGS+=	-DDOWNLOAD_PROTO_TFTP
> +
> +HOST_CC=	gcc
> +CPP=		gcc -E -Wp,-Wall
> +RM=		rm -f
> +TOUCH=		touch
> +PERL=		/usr/bin/perl
> +CC=		gcc
> +AS=		as
> +LD=		ld
> +SIZE=		size
> +AR=		ar
> +RANLIB=		ranlib
> +OBJCOPY=	objcopy
> +
> +CFLAGS+=	-Os -ffreestanding
> +CFLAGS+=	-Wall -W -Wno-format
> +CFLAGS+=	$(EXTRA_CFLAGS)
> +ASFLAGS+=	$(EXTRA_ASFLAGS)
> +LDFLAGS+=	$(EXTRA_LDFLAGS)
> +
> +BIN=bin
> +CFLAGS+=	-DCONFIG_PCI -DCONFIG_ISA
> +CFLAGS+=	-DASK_BOOT=3 -DBOOT_FIRST=BOOT_NIC
> +
> +ifdef	INCLUDE_FILO
> +CFLAGS+=	-DCONFIG_FILO
> +endif
> +
> +CFLAGS+=	-DALLOW_ONLY_ENCAPSULATED
> +CFLAGS+=	-DBACKOFF_LIMIT=7 -DCONGESTED
> +CFLAGS+=	-DTAGGED_IMAGE -DELF_IMAGE
> +CFLAGS+=	-DDOWNLOAD_PROTO_TFTP
> +
> +HOST_CC=	gcc
> +CPP=		gcc -E -Wp,-Wall
> +RM=		rm -f
> +TOUCH=		touch
> +PERL=		/usr/bin/perl
> +CC=		gcc
> +AS=		as
> +LD=		ld
> +SIZE=		size
> +AR=		ar
> +RANLIB=		ranlib
> +OBJCOPY=	objcopy
> +
> +CFLAGS+=	-Os -ffreestanding
> +CFLAGS+=	-Wall -W -Wno-format
> +CFLAGS+=	$(EXTRA_CFLAGS)
> +ASFLAGS+=	$(EXTRA_ASFLAGS)
> +LDFLAGS+=	$(EXTRA_LDFLAGS)
> +
> +BIN=bin
> +CFLAGS+=	-DCONFIG_PCI -DCONFIG_ISA
> +CFLAGS+=	-DASK_BOOT=3 -DBOOT_FIRST=BOOT_NIC
> +
> +ifdef	INCLUDE_FILO
> +CFLAGS+=	-DCONFIG_FILO
> +endif
> +
> +CFLAGS+=	-DALLOW_ONLY_ENCAPSULATED
> +CFLAGS+=	-DBACKOFF_LIMIT=7 -DCONGESTED
> +CFLAGS+=	-DTAGGED_IMAGE -DELF_IMAGE
> +CFLAGS+=	-DDOWNLOAD_PROTO_TFTP
> +
> +HOST_CC=	gcc
> +CPP=		gcc -E -Wp,-Wall
> +RM=		rm -f
> +TOUCH=		touch
> +PERL=		/usr/bin/perl
> +CC=		gcc
> +AS=		as
> +LD=		ld
> +SIZE=		size
> +AR=		ar
> +RANLIB=		ranlib
> +OBJCOPY=	objcopy
> +
> +CFLAGS+=	-Os -ffreestanding
> +CFLAGS+=	-Wall -W -Wno-format
> +CFLAGS+=	$(EXTRA_CFLAGS)
> +ASFLAGS+=	$(EXTRA_ASFLAGS)
> +LDFLAGS+=	$(EXTRA_LDFLAGS)
> +
> +BIN=bin
> Index: packages/gpxe/conf/Config.i386
> ===================================================================
> --- packages/gpxe/conf/Config.i386	(revision 0)
> +++ packages/gpxe/conf/Config.i386	(revision 0)
> @@ -0,0 +1,66 @@
> +
> +CFLAGS+=	-DLINUXBIOS -DCONFIG_TSC_CURRTICKS  -DCONSOLE_SERIAL -DCOMCONSOLE=0x3f8 -DCOMPRESERVE -DCONFIG_PCI_DIRECT -DELF_IMAGE 
> +
> +CFLAGS+= -fstrength-reduce -fomit-frame-pointer -march=i386
> +GCC_VERSION	 = $(subst ., ,$(shell $(CC) -dumpversion))
> +GCC_MAJORVERSION = $(firstword $(GCC_VERSION))
> +ifeq ($(GCC_MAJORVERSION),2)
> +CFLAGS+=	-malign-jumps=1 -malign-loops=1 -malign-functions=1
> +else
> +CFLAGS+=	-falign-jumps=1 -falign-loops=1 -falign-functions=1
> +endif
> +GCC_MINORVERSION = $(word 2, $(GCC_VERSION))
> +ifneq ($(GCC_MINORVERSION),4)
> +CFLAGS+=	-march=i386
> +endif
> +
> +LDFLAGS+=	-N
> +
> +ifeq "$(shell uname -s)" "FreeBSD"
> +CFLAGS+=	-DIMAGE_FREEBSD -DELF_IMAGE -DAOUT_IMAGE
> +endif
> +
> +
> +CFLAGS+=	-DLINUXBIOS -DCONFIG_TSC_CURRTICKS  -DCONSOLE_SERIAL -DCOMCONSOLE=0x3f8 -DCOMPRESERVE -DCONFIG_PCI_DIRECT -DELF_IMAGE 
> +
> +CFLAGS+= -fstrength-reduce -fomit-frame-pointer -march=i386
> +GCC_VERSION	 = $(subst ., ,$(shell $(CC) -dumpversion))
> +GCC_MAJORVERSION = $(firstword $(GCC_VERSION))
> +ifeq ($(GCC_MAJORVERSION),2)
> +CFLAGS+=	-malign-jumps=1 -malign-loops=1 -malign-functions=1
> +else
> +CFLAGS+=	-falign-jumps=1 -falign-loops=1 -falign-functions=1
> +endif
> +GCC_MINORVERSION = $(word 2, $(GCC_VERSION))
> +ifneq ($(GCC_MINORVERSION),4)
> +CFLAGS+=	-march=i386
> +endif
> +
> +LDFLAGS+=	-N
> +
> +ifeq "$(shell uname -s)" "FreeBSD"
> +CFLAGS+=	-DIMAGE_FREEBSD -DELF_IMAGE -DAOUT_IMAGE
> +endif
> +
> +
> +CFLAGS+=	-DLINUXBIOS -DCONFIG_TSC_CURRTICKS  -DCONSOLE_SERIAL -DCOMCONSOLE=0x3f8 -DCOMPRESERVE -DCONFIG_PCI_DIRECT -DELF_IMAGE 
> +
> +CFLAGS+= -fstrength-reduce -fomit-frame-pointer -march=i386
> +GCC_VERSION	 = $(subst ., ,$(shell $(CC) -dumpversion))
> +GCC_MAJORVERSION = $(firstword $(GCC_VERSION))
> +ifeq ($(GCC_MAJORVERSION),2)
> +CFLAGS+=	-malign-jumps=1 -malign-loops=1 -malign-functions=1
> +else
> +CFLAGS+=	-falign-jumps=1 -falign-loops=1 -falign-functions=1
> +endif
> +GCC_MINORVERSION = $(word 2, $(GCC_VERSION))
> +ifneq ($(GCC_MINORVERSION),4)
> +CFLAGS+=	-march=i386
> +endif
> +
> +LDFLAGS+=	-N
> +
> +ifeq "$(shell uname -s)" "FreeBSD"
> +CFLAGS+=	-DIMAGE_FREEBSD -DELF_IMAGE -DAOUT_IMAGE
> +endif
> +
> Index: packages/gpxe/gpxe.mk
> ===================================================================
> --- packages/gpxe/gpxe.mk	(revision 0)
> +++ packages/gpxe/gpxe.mk	(revision 0)
> @@ -0,0 +1,144 @@
> +GPXE_URL=git://git.etherboot.org/scm/gpxe.git
> +GPXE_DIR=$(BUILD_DIR)/gpxe
> +GPXE_TAG=master
> +GPXE_SRC_DIR=$(GPXE_DIR)/gpxe-$(GPXE_TAG)/src
> +GPXE_SOURCE=gpxe-$(GPXE_TAG).tar.bz2
> +GPXE_STAMP_DIR=$(GPXE_DIR)/stamps
> +GPXE_LOG_DIR=$(GPXE_DIR)/logs
> +
> +ifeq ($(GPXE_ARCH),)
> +GPXE_ARCH=i386
> +endif
> +
> +GPXE_PATCHES = 
> +
> +# Filter the quotes off the config string
> +GPXE_DRIVER := $(shell echo $(CONFIG_GPXE_DRIVER) | sed -e s:\"::g)
> +GPXE_OUTPUT=$(GPXE_SRC_DIR)/bin/$(GPXE_DRIVER).elf
> +
> +ifeq ($(CONFIG_VERBOSE),y)
> +GPXE_FETCH_LOG=/dev/stdout
> +GPXE_BUILD_LOG=/dev/stdout
> +GPXE_INSTALL_LOG=/dev/stdout
> +else
> +GPXE_FETCH_LOG=$(GPXE_LOG_DIR)/fetch.log
> +GPXE_BUILD_LOG=$(GPXE_LOG_DIR)/build.log
> +GPXE_INSTALL_LOG=$(GPXE_LOG_DIR)/install.log
> +endif
> +
> +$(SOURCE_DIR)/$(GPXE_SOURCE):
> +	@ echo "Fetching the GPXE source..."
> +	$(BIN_DIR)/fetchgit.sh $(GPXE_URL) $(SOURCE_DIR)/gpxe \
> +	$(GPXE_TAG) $(SOURCE_DIR)/$(GPXE_SOURCE) gpxe \
> +	> $(GPXE_FETCH_LOG) 2>&1
> +
> +$(GPXE_STAMP_DIR)/.unpacked: $(SOURCE_DIR)/$(GPXE_SOURCE)
> +	@ echo "Unpacking GPXE..."
> +	@ tar -C $(GPXE_DIR) -jxf $(SOURCE_DIR)/$(GPXE_SOURCE)
> +	@ touch $@	
> +
> +$(GPXE_STAMP_DIR)/.patched: $(GPXE_STAMP_DIR)/.unpacked
> +	@ echo "Patching GPXE..."
> +	@ $(BIN_DIR)/doquilt.sh $(GPXE_SRC_DIR)/.. $(GPXE_PATCHES)
> +	@ touch $@
> +
> +$(GPXE_STAMP_DIR)/.configured: $(GPXE_STAMP_DIR)/.patched
> +	@ cp $(PACKAGE_DIR)/gpxe/conf/Config.main \
> +	$(GPXE_SRC_DIR)/Config
> +	@ cp $(PACKAGE_DIR)/gpxe/conf/Config.$(GPXE_ARCH) \
> +	$(GPXE_SRC_DIR)/arch/$(GPXE_ARCH)/Config
> +	@ touch $@
> +
> +$(GPXE_OUTPUT): $(GPXE_STAMP_DIR)/.configured
> +	@ echo "Building GPXE..."
> +	@ ( unset CFLAGS; export EXTRA_CFLAGS="$(CFLAGS)"; \
> +	unset ASFLAGS; export EXTRA_ASFLAGS="$(ASFLAGS)"; \
> +	unset LDFLAGS; \
> +	$(MAKE) -C $(GPXE_SRC_DIR) ARCH=$(GPXE_ARCH) \
> +	bin/$(GPXE_DRIVER).elf > $(GPXE_BUILD_LOG) 2>&1)
> +
> +$(GPXE_STAMP_DIR) $(GPXE_LOG_DIR):
> +	@ mkdir -p $@
> +
> +gpxe: $(GPXE_STAMP_DIR) $(GPXE_LOG_DIR) $(GPXE_OUTPUT) 
> +	@ mkdir -p $(OUTPUT_DIR)
> +	@ cp $(GPXE_OUTPUT) $(PAYLOAD_ELF)
> +
> +gpxe-clean:
> +	@ echo "Cleaning GPXE..."
> +	@ $(MAKE) -C $(GPXE_SRC_DIR) clean > /dev/null 2>&1
> +
> +gpxe-distclean:
> +	@ rm -rf $(GPXE_DIR)/*
> +GPXE_URL=git://git.etherboot.org/scm/gpxe.git
> +GPXE_DIR=$(BUILD_DIR)/gpxe
> +GPXE_TAG=master
> +GPXE_SRC_DIR=$(GPXE_DIR)/gpxe-$(GPXE_TAG)/src
> +GPXE_SOURCE=gpxe-$(GPXE_TAG).tar.bz2
> +GPXE_STAMP_DIR=$(GPXE_DIR)/stamps
> +GPXE_LOG_DIR=$(GPXE_DIR)/logs
> +
> +ifeq ($(GPXE_ARCH),)
> +GPXE_ARCH=i386
> +endif
> +
> +GPXE_PATCHES = 
> +
> +# Filter the quotes off the config string
> +GPXE_DRIVER := $(shell echo $(CONFIG_GPXE_DRIVER) | sed -e s:\"::g)
> +GPXE_OUTPUT=$(GPXE_SRC_DIR)/bin/$(GPXE_DRIVER).elf
> +
> +ifeq ($(CONFIG_VERBOSE),y)
> +GPXE_FETCH_LOG=/dev/stdout
> +GPXE_BUILD_LOG=/dev/stdout
> +GPXE_INSTALL_LOG=/dev/stdout
> +else
> +GPXE_FETCH_LOG=$(GPXE_LOG_DIR)/fetch.log
> +GPXE_BUILD_LOG=$(GPXE_LOG_DIR)/build.log
> +GPXE_INSTALL_LOG=$(GPXE_LOG_DIR)/install.log
> +endif
> +
> +$(SOURCE_DIR)/$(GPXE_SOURCE):
> +	@ echo "Fetching the GPXE source..."
> +	$(BIN_DIR)/fetchgit.sh $(GPXE_URL) $(SOURCE_DIR)/gpxe \
> +	$(GPXE_TAG) $(SOURCE_DIR)/$(GPXE_SOURCE) gpxe \
> +	> $(GPXE_FETCH_LOG) 2>&1
> +
> +$(GPXE_STAMP_DIR)/.unpacked: $(SOURCE_DIR)/$(GPXE_SOURCE)
> +	@ echo "Unpacking GPXE..."
> +	@ tar -C $(GPXE_DIR) -jxf $(SOURCE_DIR)/$(GPXE_SOURCE)
> +	@ touch $@	
> +
> +$(GPXE_STAMP_DIR)/.patched: $(GPXE_STAMP_DIR)/.unpacked
> +	@ echo "Patching GPXE..."
> +	@ $(BIN_DIR)/doquilt.sh $(GPXE_SRC_DIR)/.. $(GPXE_PATCHES)
> +	@ touch $@
> +
> +$(GPXE_STAMP_DIR)/.configured: $(GPXE_STAMP_DIR)/.patched
> +	@ cp $(PACKAGE_DIR)/gpxe/conf/Config.main \
> +	$(GPXE_SRC_DIR)/Config
> +	@ cp $(PACKAGE_DIR)/gpxe/conf/Config.$(GPXE_ARCH) \
> +	$(GPXE_SRC_DIR)/arch/$(GPXE_ARCH)/Config
> +	@ touch $@
> +
> +$(GPXE_OUTPUT): $(GPXE_STAMP_DIR)/.configured
> +	@ echo "Building GPXE..."
> +	@ ( unset CFLAGS; export EXTRA_CFLAGS="$(CFLAGS)"; \
> +	unset ASFLAGS; export EXTRA_ASFLAGS="$(ASFLAGS)"; \
> +	unset LDFLAGS; \
> +	$(MAKE) -C $(GPXE_SRC_DIR) ARCH=$(GPXE_ARCH) \
> +	bin/$(GPXE_DRIVER).elf > $(GPXE_BUILD_LOG) 2>&1)
> +
> +$(GPXE_STAMP_DIR) $(GPXE_LOG_DIR):
> +	@ mkdir -p $@
> +
> +gpxe: $(GPXE_STAMP_DIR) $(GPXE_LOG_DIR) $(GPXE_OUTPUT) 
> +	@ mkdir -p $(OUTPUT_DIR)
> +	@ cp $(GPXE_OUTPUT) $(PAYLOAD_ELF)
> +
> +gpxe-clean:
> +	@ echo "Cleaning GPXE..."
> +	@ $(MAKE) -C $(GPXE_SRC_DIR) clean > /dev/null 2>&1
> +
> +gpxe-distclean:
> +	@ rm -rf $(GPXE_DIR)/*

> -- 
> linuxbios mailing list
> linuxbios at linuxbios.org
> http://www.linuxbios.org/mailman/listinfo/linuxbios

-- 
Jordan Crouse
Systems Software Development Engineer 
Advanced Micro Devices, Inc.






More information about the coreboot mailing list