Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.1:kernel-2.6.32
kvm
kvm-qemu-pre11-multiboot-4.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File kvm-qemu-pre11-multiboot-4.patch of Package kvm
From 253d0942fac33c5c15c9a7f8657f55f125dc5816 Mon Sep 17 00:00:00 2001 From: Alexander Graf <agraf@suse.de> Date: Mon, 29 Jun 2009 15:37:40 +0200 Subject: [PATCH 4/5] Multiboot build system v4 In order to build the multiboot option rom, we need a Makefile and a tool to sign the rom with. Both are provided by this patch and mostly taken from the extboot source, written by Anthony Liguori. Once built, the resulting binary gets copied to pc-bios automatically. Building also occurs automatically when on an x86 host. Signed-off-by: Alexander Graf <agraf@suse.de> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> --- Makefile | 12 +++++-- configure | 9 ++++- pc-bios/multiboot.bin | Bin 0 -> 512 bytes pc-bios/optionrom/Makefile | 48 ++++++++++++++++++++++++++ pc-bios/optionrom/signrom.c | 79 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 144 insertions(+), 4 deletions(-) create mode 100644 pc-bios/multiboot.bin create mode 100644 pc-bios/optionrom/Makefile create mode 100644 pc-bios/optionrom/signrom.c Index: qemu-kvm-0.10.5/Makefile =================================================================== --- qemu-kvm-0.10.5.orig/Makefile +++ qemu-kvm-0.10.5/Makefile @@ -34,7 +34,7 @@ ifdef CONFIG_WIN32 LIBS+=-lwinmm -lws2_32 -liphlpapi endif -all: $(TOOLS) $(DOCS) recurse-all +all: $(TOOLS) $(DOCS) roms recurse-all SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS)) @@ -199,7 +199,7 @@ clean: rm -f *.o *.d *.a $(TOOLS) TAGS cscope.* *.pod *~ */*~ rm -f slirp/*.o slirp/*.d audio/*.o audio/*.d $(MAKE) -C tests clean - for d in $(TARGET_DIRS); do \ + for d in $(TARGET_DIRS) $(ROMS); do \ $(MAKE) -C $$d $@ || exit 1 ; \ done @@ -220,10 +220,16 @@ video.x openbios-sparc32 openbios-sparc6 pxe-ne2k_pci.bin pxe-rtl8139.bin pxe-pcnet.bin pxe-e1000.bin \ bamboo.dtb BLOBS += extboot.bin +BLOBS += multiboot.bin else BLOBS= endif +roms: + for d in $(ROMS); do \ + $(MAKE) -C $$d || exit 1 ; \ + done + install-doc: $(DOCS) mkdir -p "$(DESTDIR)$(docdir)" $(INSTALL) -m 644 qemu-doc.html qemu-tech.html "$(DESTDIR)$(docdir)" Index: qemu-kvm-0.10.5/configure =================================================================== --- qemu-kvm-0.10.5.orig/configure +++ qemu-kvm-0.10.5/configure @@ -1594,6 +1594,12 @@ if test `expr "$target_list" : ".*softmm fi echo "TOOLS=$tools" >> $config_mak +roms= +if test "$cpu" = "i386" -o "$cpu" = "x86_64" ; then + roms="pc-bios/optionrom" +fi +echo "ROMS=$roms" >> $config_mak + test -f ${config_h}~ && cmp -s $config_h ${config_h}~ && mv ${config_h}~ $config_h for target in $target_list; do @@ -1950,11 +1956,12 @@ done # for target in $targets # build tree in object directory if source path is different from current one if test "$source_path_used" = "yes" ; then - DIRS="tests tests/cris slirp audio kvm/libkvm" + DIRS="tests tests/cris slirp audio kvm/libkvm pc-bios/optionrom" FILES="Makefile tests/Makefile" FILES="$FILES tests/cris/Makefile tests/cris/.gdbinit" FILES="$FILES tests/test-mmap.c" FILES="$FILES kvm/libkvm/Makefile" + FILES="$FILES pc-bios/optionrom/Makefile" for dir in $DIRS ; do mkdir -p $dir done Index: qemu-kvm-0.10.5/pc-bios/optionrom/Makefile =================================================================== --- /dev/null +++ qemu-kvm-0.10.5/pc-bios/optionrom/Makefile @@ -0,0 +1,48 @@ +all: build-all + +include ../../config-host.mak + +VPATH=$(SRC_PATH)/pc-bios/optionrom +OBJCOPY=objcopy + +# from kernel sources - scripts/Kbuild.include +# try-run +# Usage: option = $(call try-run, $(CC)...-o "$$TMP",option-ok,otherwise) +# Exit code chooses option. "$$TMP" is can be used as temporary file and +# is automatically cleaned up. +try-run = $(shell set -e; \ + TMP="$(TMPOUT).$$$$.tmp"; \ + if ($(1)) >/dev/null 2>&1; \ + then echo "$(2)"; \ + else echo "$(3)"; \ + fi; \ + rm -f "$$TMP") + +# cc-option-yn +# Usage: flag := $(call cc-option-yn,-march=winchip-c6) +cc-option-yn = $(call try-run,\ + $(CC) $(KBUILD_CFLAGS) $(1) -S -xc /dev/null -o "$$TMP",y,n) + +CFLAGS = -Wall -Wstrict-prototypes -Werror -fomit-frame-pointer -fno-builtin +CFLAGS += -I$(SRC_PATH) +ifeq ($(call cc-option-yn,-fno-stack-protector),y) +CFLAGS += -fno-stack-protector +endif + +build-all: multiboot.bin + +%.o: %.S + $(CC) $(CFLAGS) -o $@ -c $< + +%.img: %.o + $(LD) --oformat binary -Ttext 0 -o $@ $< + +%.bin: %.img signrom + ./signrom $< $@ + cp $@ $(SRC_PATH)/pc-bios/ + +signrom: signrom.c + $(CC) -o $@ -g -Wall $^ + +clean: + $(RM) *.o *.img *.bin signrom *~ Index: qemu-kvm-0.10.5/pc-bios/optionrom/signrom.c =================================================================== --- /dev/null +++ qemu-kvm-0.10.5/pc-bios/optionrom/signrom.c @@ -0,0 +1,79 @@ +/* + * Extended Boot Option ROM + * + * 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 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Copyright IBM Corporation, 2007 + * Authors: Anthony Liguori <aliguori@us.ibm.com> + */ + +#include <stdio.h> +#include <stdint.h> +#include <string.h> + +int main(int argc, char **argv) +{ + FILE *fin, *fout; + char buffer[512], oldbuffer[512]; + int i, size, lag = 0; + uint8_t sum = 0; + + if (argc != 3) { + printf("Usage: %s ROM OUTPUT\n", argv[0]); + return 1; + } + + fin = fopen(argv[1], "rb"); + fout = fopen(argv[2], "wb"); + + if (fin == NULL || fout == NULL) { + fprintf(stderr, "Could not open input/output files\n"); + return 1; + } + + do { + size = fread(buffer, 512, 1, fin); + if (size == 1) { + for (i = 0; i < 512; i++) + sum += buffer[i]; + + if (lag) { + if (fwrite(oldbuffer, 512, 1, fout) != 1) { + fprintf(stderr, "Write failed\n"); + return 1; + } + } + lag = 1; + memcpy(oldbuffer, buffer, 512); + } + } while (size == 1); + + if (size != 0) { + fprintf(stderr, "Failed to read from input file\n"); + return 1; + } + + oldbuffer[511] = -sum; + + if (fwrite(oldbuffer, 512, 1, fout) != 1) { + fprintf(stderr, "Failed to write to output file\n"); + return 1; + } + + fclose(fin); + fclose(fout); + + return 0; +} Index: qemu-kvm-0.10.5/qemu-doc.texi =================================================================== --- qemu-kvm-0.10.5.orig/qemu-doc.texi +++ qemu-kvm-0.10.5/qemu-doc.texi @@ -910,13 +910,14 @@ Add ACPI table with specified header fie @end table Linux boot specific: When using these options, you can use a given -Linux kernel without installing it in the disk image. It can be useful -for easier testing of various kernels. +Linux or Multiboot kernel without installing it in the disk image. +It can be useful for easier testing of various kernels. @table @option @item -kernel @var{bzImage} -Use @var{bzImage} as kernel image. +Use @var{bzImage} as kernel image. The kernel can be either a Linux kernel +on in multiboot format. @item -append @var{cmdline} Use @var{cmdline} as kernel command line @@ -924,6 +925,13 @@ Use @var{cmdline} as kernel command line @item -initrd @var{file} Use @var{file} as initial ram disk. +@item -initrd "@var{file1} arg=foo,@var{file2}" + +This syntax is only available with multiboot. + +Use @var{file1} and @var{file2} as modules and pass arg=foo as parameter to the +first module. + @end table Debug/Expert options: Index: qemu-kvm-0.10.5/hw/fw_cfg.h =================================================================== --- qemu-kvm-0.10.5.orig/hw/fw_cfg.h +++ qemu-kvm-0.10.5/hw/fw_cfg.h @@ -10,6 +10,10 @@ #define FW_CFG_MACHINE_ID 0x06 #define FW_CFG_MAX_ENTRY 0x10 +#define FW_CFG_INITRD_ADDR 0x0a +#define FW_CFG_INITRD_SIZE 0x0b +#define FW_CFG_KERNEL_ADDR 0x07 + #define FW_CFG_WRITE_CHANNEL 0x4000 #define FW_CFG_ARCH_LOCAL 0x8000 #define FW_CFG_ENTRY_MASK ~(FW_CFG_WRITE_CHANNEL | FW_CFG_ARCH_LOCAL)
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor