All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Integrating applications into Mini-OS
@ 2006-05-11 16:34 John D. Ramsdell
  2006-05-15 12:18 ` Jacob Gorm Hansen
  0 siblings, 1 reply; 12+ messages in thread
From: John D. Ramsdell @ 2006-05-11 16:34 UTC (permalink / raw)
  To: xen-devel

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

^ permalink raw reply	[flat|nested] 12+ messages in thread
* RE: [PATCH] Integrating applications into Mini-OS
@ 2006-05-15 13:33 Puthiyaparambil, Aravindh
  2006-05-15 14:12 ` Jacob Gorm Hansen
  0 siblings, 1 reply; 12+ messages in thread
From: Puthiyaparambil, Aravindh @ 2006-05-15 13:33 UTC (permalink / raw)
  To: Jacob Gorm Hansen, Ian Campbell
  Cc: John D. Ramsdell, xen-devel, Grzegorz Milos

This seems like a really good idea. I have been meaning to fix
VIRT_START. I see your patch shows
-#define VIRT_START              0xFFFFFFFF00000000UL
I remember changing this to 0xFFFFFFFF80000000UL. Are you diffing
against the latest changeset? Could you please check if this works on
x86_64 too?

Thanks,
Aravindh

> -----Original Message-----
> From: xen-devel-bounces@lists.xensource.com [mailto:xen-devel-
> bounces@lists.xensource.com] On Behalf Of Jacob Gorm Hansen
> Sent: Monday, May 15, 2006 9:21 AM
> To: Ian Campbell
> Cc: John D. Ramsdell; xen-devel@lists.xensource.com
> Subject: Re: [Xen-devel] [PATCH] Integrating applications into Mini-OS
> 
> On 5/15/06, Jacob Gorm Hansen <jacobg@diku.dk> wrote:
> > On 5/15/06, Ian Campbell <Ian.Campbell@xensource.com> wrote:
> > > On Mon, 2006-05-15 at 14:18 +0200, Jacob Gorm Hansen wrote:
> > > > I have attached a small patch to mini-os which ... adds a dummy
main
> > >
> > > Should it be marked with __attribute__((weak))?
> >
> > Probably a good idea, makes link order less important. Revised patch
> > is attached.
> 
> One more change: When providing one's own linker script (e.g. for
> changing the memory layout, my boot loader cannot exist at 0xc0000000
> but likes to live at 0x0), use &_text for the VIRT_START constant
> instead of hardcoded value.
> 
> New version attached.
> 
> Jacob

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2006-05-15 15:15 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-05-11 16:34 [PATCH] Integrating applications into Mini-OS John D. Ramsdell
2006-05-15 12:18 ` Jacob Gorm Hansen
2006-05-15 12:46   ` Ian Campbell
2006-05-15 13:08     ` Jacob Gorm Hansen
2006-05-15 13:20       ` Jacob Gorm Hansen
     [not found]       ` <ogtpsifqtkz.fsf@divan.mitre.org>
2006-05-15 14:40         ` Jacob Gorm Hansen
2006-05-15 14:45           ` John D. Ramsdell
2006-05-15 15:09           ` John D. Ramsdell
2006-05-15 15:15             ` Jacob Gorm Hansen
2006-05-15 13:45   ` John D. Ramsdell
  -- strict thread matches above, loose matches on Subject: below --
2006-05-15 13:33 Puthiyaparambil, Aravindh
2006-05-15 14:12 ` Jacob Gorm Hansen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.