[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Xen-devel] Mini-OS Makefile and Cross Compilation
I acquired a Core 2 Duo machine, and decided to see if I could get a
32-bit Mini-OS application running using a 64-bit hypervisor. I'm
running Fedora Core 6 for hardware platform x86_64 using its packaging
of the Xen hypervisor. The Mini-OS sources were obtained today from
I built binutils 2.17, gcc 4.1.2, and newlib 1.5.0 with a target of
i386-elf, and installed them into $HOME/opt/i386-elf.
$ cd $HOME/opt/i386-elf
$ ls i386-elf/bin
ar as c++ g++ gcc ld nm objdump ranlib strip
[ramsdell@mm144697-pc i386-elf]$ ls bin
i386-elf-addr2line i386-elf-cpp i386-elf-gcov i386-elf-ranlib
i386-elf-ar i386-elf-g++ i386-elf-ld i386-elf-readelf
i386-elf-as i386-elf-gcc i386-elf-nm i386-elf-size
i386-elf-c++ i386-elf-gcc-4.1.2 i386-elf-objcopy i386-elf-strings
i386-elf-c++filt i386-elf-gccbug i386-elf-objdump i386-elf-strip
I first tried to build an application on top of Mini-OS, so I
attempted to build libminios.a with:
$ make CROSS_COMPILE=$HOME/opt/i386-elf/i386-elf/bin/ \
TARGET_ARCH=x86_32 CPPFLAGS=-DHAVE_LIBC libminios.a
I found there is no rule for the libminios.a target, or one for the
all target. Okay, lets get more conservative.
I decided to try to build just Mini-OS with:
$ make CROSS_COMPILE=$HOME/opt/i386-elf/i386-elf/bin/ TARGET_ARCH=x86_32
[ -e include/xen ] || ln -sf ../../../xen/include/public include/xen
/home/ramsdell/opt/i386-elf/i386-elf/bin/gcc -fno-builtin -Wall -Werror
-Wredundant-decls -Wno-format -Wstrict-prototypes -Wnested-externs
-Wpointer-arith -Winline -D__XEN_INTERFACE_VERSION__=0x00030205 -g -m64
-mno-red-zone -fpic -fno-reorder-blocks -fno-asynchronous-unwind-tables
events.c -o events.o
events.c:1: sorry, unimplemented: 64-bit mode not compiled in
In file included from
error: hypercall-x86_32.h: No such file or directory
cc1: warnings being treated as errors
In file included from events.c:22:
/home/ramsdell/scm/xen-unstable.hg/extras/mini-os/include/events.h: In function
implicit declaration of function 'HYPERVISOR_event_channel_op'
nested extern declaration of 'HYPERVISOR_event_channel_op'
make: *** [events.o] Error 1
Some how, setting TARGET_ARCH=x86_32 was not enough to convince the
makefile to think 32-bits. What was I supposed to do?
I decided to carefully read the makefiles in the Mini-OS directories.
I discovered that the one in the root directory calls for $(OBJCOPY).
When using a cross compiler, this variable evaluates to objcopy, but
the installation of a cross compiler does not produce a binary named
objcopy. When the target is i386-elf, it puts i386-elf-objcopy in the
bin directory where it is installed, but objcopy is not put the
i386-elf/bin directory. Is this makefile intended to be used with a
cross compiler? I'd gladly specify a target of i386-elf on the
command line if that helps.
I promise to submit a text document to be placed in the Mini-OS root
directory describing how to use its makefile with a cross compiler if
given the information need to complete this document by you all.
Xen-devel mailing list