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
|