[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] Integrating applications into Mini-OS
I sent this patch directly to Gregor, and neglected to CC this list. Sorry about that. I'd like to make it so that there is no need to modify any Mini-OS source files when extending it with an application. All that is required is a change to Makefile, and a small change to kernel.c, printf.c, and string.c. I have enclosed the patch. With this patch, one could write an application in a file called, say, app.c, and add it to the Mini-OS directory along with newlib.c and setjmp_x86_32.S, the two files I use to adapt newlib to the Mini-OS environment. One would compile and link it with newlib, with the command: #! /bin/sh COMP_HOME=${HOME}/opt/cross/i386-elf CPPFLAGS="-DINIT_APP -DHAVE_LIBC" LDLIBS="-lc -lnosys" export PATH=${COMP_HOME}/bin:$PATH exec make CPPFLAGS="${CPPFLAGS}" LDLIBS="${LDLIBS}" "$@" The patch changes Makefile so that it needs no modification to handle an application. It also fixes some problems with the original Makefile. The original defined LDFLAGS, but did not use the definition in the linker command. There was some odd whitespace after the last update to OBJS, which has been removed. I also changed the rules for compiling C and assembler files, so they more closely match the default rules built into GNU Make. John Only in xen-unstable/extras/mini-os: app.c Only in xen-unstable/extras/mini-os: app.h Only in xen-unstable/extras/mini-os: app.lua Only in xen-unstable/extras/mini-os: bin2c Only in xen-unstable/extras/mini-os: bin2c.mk Only in xen-unstable/extras/mini-os: crmake diff -ur oxen-unstable/extras/mini-os/kernel.c xen-unstable/extras/mini-os/kernel.c --- oxen-unstable/extras/mini-os/kernel.c 2006-05-09 00:51:19.000000000 -0400 +++ xen-unstable/extras/mini-os/kernel.c 2006-05-09 08:18:33.000000000 -0400 @@ -38,6 +38,10 @@ #include <xen/features.h> #include <xen/version.h> +#if defined INIT_APP + void init_app(void); +#endif + /* * Shared page for communicating with the hypervisor. * Events flags go here, for example. @@ -171,6 +175,10 @@ /* Init XenBus from a separate thread */ create_thread("init_xs", init_xs, NULL); +#if defined INIT_APP + init_app(); +#endif + /* Everything initialised, start idle thread */ run_idle_thread(); } diff -ur oxen-unstable/extras/mini-os/lib/printf.c xen-unstable/extras/mini-os/lib/printf.c --- oxen-unstable/extras/mini-os/lib/printf.c 2006-05-09 00:51:19.000000000 -0400 +++ xen-unstable/extras/mini-os/lib/printf.c 2006-05-09 08:33:17.000000000 -0400 @@ -54,6 +54,8 @@ * $FreeBSD: src/sys/libkern/divdi3.c,v 1.6 1999/08/28 00:46:31 peter Exp $ */ +#if !defined HAVE_LIBC + #include <os.h> #include <types.h> #include <hypervisor.h> @@ -789,4 +791,4 @@ return i; } - +#endif Only in xen-unstable/extras/mini-os/lib: printf.c~ diff -ur oxen-unstable/extras/mini-os/lib/string.c xen-unstable/extras/mini-os/lib/string.c --- oxen-unstable/extras/mini-os/lib/string.c 2006-05-09 00:51:19.000000000 -0400 +++ xen-unstable/extras/mini-os/lib/string.c 2006-05-09 08:33:01.000000000 -0400 @@ -18,6 +18,8 @@ **************************************************************************** */ +#if !defined HAVE_LIBC + #include <os.h> #include <types.h> #include <lib.h> @@ -153,3 +155,5 @@ } return NULL; } + +#endif Only in xen-unstable/extras/mini-os/lib: string.c~ diff -ur oxen-unstable/extras/mini-os/Makefile xen-unstable/extras/mini-os/Makefile --- oxen-unstable/extras/mini-os/Makefile 2006-05-09 00:51:18.000000000 -0400 +++ xen-unstable/extras/mini-os/Makefile 2006-05-09 08:03:47.000000000 -0400 @@ -6,18 +6,23 @@ override TARGET_ARCH := $(XEN_TARGET_ARCH) # NB. '-Wcast-qual' is nasty, so I omitted it. -CFLAGS := -fno-builtin -Wall -Werror -Iinclude/ -Wredundant-decls -Wno-format +CFLAGS := -fno-builtin -Wall -Werror -Wredundant-decls -Wno-format CFLAGS += -Wstrict-prototypes -Wnested-externs -Wpointer-arith -Winline +override CPPFLAGS := -Iinclude $(CPPFLAGS) +ASFLAGS = -D__ASSEMBLY__ + +LDFLAGS := -N -T minios-$(TARGET_ARCH).lds + ifeq ($(TARGET_ARCH),x86_32) CFLAGS += -m32 -march=i686 -LDFLAGS := -m elf_i386 +LDFLAGS += -m elf_i386 endif ifeq ($(TARGET_ARCH),x86_64) CFLAGS += -m64 -mno-red-zone -fpic -fno-reorder-blocks CFLAGS += -fno-asynchronous-unwind-tables -LDFLAGS := -m elf_x86_64 +LDFLAGS += -m elf_x86_64 endif ifeq ($(debug),y) @@ -28,12 +33,12 @@ TARGET := mini-os -OBJS := $(TARGET_ARCH).o +OBJS := $(patsubst %.S,%.o,$(wildcard *$(TARGET_ARCH).S)) OBJS += $(patsubst %.c,%.o,$(wildcard *.c)) OBJS += $(patsubst %.c,%.o,$(wildcard lib/*.c)) OBJS += $(patsubst %.c,%.o,$(wildcard xenbus/*.c)) OBJS += $(patsubst %.c,%.o,$(wildcard console/*.c)) - + HDRS := $(wildcard include/*.h) HDRS += $(wildcard include/xen/*.h) @@ -45,7 +50,7 @@ [ -e include/xen ] || ln -sf ../../../xen/include/public include/xen $(TARGET): links $(OBJS) - $(LD) -N -T minios-$(TARGET_ARCH).lds $(OBJS) -o $@.elf + $(LD) $(LDFLAGS) $(OBJS) $(LDLIBS) -o $@.elf gzip -f -9 -c $@.elf >$@.gz .PHONY: clean @@ -55,10 +60,10 @@ find . -type l | xargs rm -f %.o: %.c $(HDRS) Makefile - $(CC) $(CFLAGS) -c $< -o $@ + $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@ %.o: %.S $(HDRS) Makefile - $(CC) $(CFLAGS) -D__ASSEMBLY__ -c $< -o $@ + $(CC) $(ASFLAGS) $(CPPFLAGS) -c $< -o $@ define all_sources ( find . -follow -name SCCS -prune -o -name '*.[chS]' -print ) Only in xen-unstable/extras/mini-os: newlib.c Only in xen-unstable/extras/mini-os: setjmp_x86_32.S _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |