# Makefile for GeekOS kernel, userspace, and tools
# Copyright (c) 2004,2005 David H. Hovemeyer <daveho@cs.umd.edu>
-# $Revision: 1.42 $
+# $Revision: 1.48 $
# This is free software. You are permitted to use,
# redistribute, and modify it as specified in the file "COPYING".
#
# The setup code needs to copy it up to this address and jump there
#
-KERNEL_BASE_ADDR := 0x00010000
+KERNEL_BASE_ADDR := 0x00100000
# Kernel entry point function
KERNEL_ENTRY = $(SYM_PFX)Main
#when -DNDEBUG is set the kassert functions are disabled
#JRLDEBUG=-DNDEBUG
+# DEBUG=1 means VMM_DEBUG, VMM_INFO, and VMM_TRACE are enabled
+# as are SERIAL_PRINT_DEBUG
+#
DEBUG=1
+DEBUG_SECTIONS=
+
+ifeq ($(DEBUG_SHADOW_PAGING),1)
+DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_SHADOW_PAGING
+endif
+ifeq ($(DEBUG_CTRL_REGS),1)
+DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_CTRL_REGS
+endif
+ifeq ($(DEBUG_INTERRUPTS),1)
+DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_INTERRUPTS
+endif
+ifeq ($(DEBUG_IO),1)
+DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_IO
+endif
+ifeq ($(DEBUG_KEYBOARD),1)
+DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_KEYBOARD
+endif
+ifeq ($(DEBUG_PIC),1)
+DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_PIC
+endif
+ifeq ($(DEBUG_DEBUG_PIT),1)
+DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_PIT
+endif
+ifeq ($(DEBUG_NVRAM),1)
+DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_NVRAM
+endif
+
+
+
+#
+# XED=1 means that libxed will be included
+#
+# and VMM_XED is one
+#
+# and make world will build an empty boot package
+#
+XED=0
ifeq ($(DEBUG),1)
- JRLDEBUG= -DSERIAL_PRINT_DEBUG=1 -DSERIAL_PRINT_DEBUG_LEVEL=10 -DSERIAL_PRINT=1 -DVMM_DEBUG=1 -DVMM_INFO=1 -DVMM_TRACE=1
+ JRLDEBUG= -DSERIAL_PRINT_DEBUG=1 -DSERIAL_PRINT_DEBUG_LEVEL=10 -DSERIAL_PRINT=1 -DVMM_DEBUG=1 -DVMM_INFO=1 -DVMM_TRACE=1 $(DEBUG_SECTIONS)
+
else
JRLDEBUG= -DSERIAL_PRINT_DEBUG=0 -DSERIAL_PRINT_DEBUG_LEVEL=999999 -DSERIAL_PRINT=0 -DVMM_DEBUG=0 -DVMM_INFO=0 -DVMM_TRACE=0
endif
+ifeq ($(XED),1)
+ LEIXED = -DVMM_XED=1
+else
+ LEIXED = -DVMM_XED=0
+endif
+
+LEIFLAGS = $(LEIXED)
+
#
#
#Peter's compile flags
# Kernel assembly files
KERNEL_ASM_SRCS := lowlevel.asm
-KERNEL_GAS_SRCS := testvm.s
+KERNEL_GAS_SRCS := testvm.s udivdi3.s
# Kernel object files build from assembler source files
KERNEL_ASM_OBJS := $(KERNEL_ASM_SRCS:%.asm=geekos/%.o)
vmm_intr.c vmm_time.c\
vmm_shadow_paging.c vm_guest_mem.c \
vm_dev.c vmm_dev_mgr.c vmm_decoder.c \
- svm_halt.c
+ svm_halt.c svm_pause.c
#\
# vmx.c vmcs_gen.c vmcs.c
VMM_OBJS := $(VMM_C_OBJS) $(VMM_ASM_OBJS)
-DEVICE_C_SRCS := generic.c keyboard.c nvram.c timer.c simple_pic.c 8259a.c 8254.c
+DEVICE_C_SRCS := generic.c keyboard.c nvram.c timer.c simple_pic.c 8259a.c 8254.c serial.c
DEVICE_C_OBJS := $(DEVICE_C_SRCS:%.c=devices/%.o)
DEVICE_OBJS := $(DEVICE_C_OBJS)
+V3LIBS :=
+
+ifeq ($(XED),1)
+ V3LIBS := $(V3LIBS) -L../lib/xed -lxed
+endif
# ----------------------------------------------------------------------
NUMSECS := $(PERL) $(PROJECT_ROOT)/scripts/numsecs
+#Round a value up to a certain factor (hex values)
+ROUND_UP_HEX := $(PERL) $(PROJECT_ROOT)/scripts/round_up_hex.pl
+
# ----------------------------------------------------------------------
# Definitions -
# Options passed to the tools.
# ----------------------------------------------------------------------
# Flags used for all C source files
-GENERAL_OPTS := -O -Wall $(EXTRA_C_OPTS) $(JRLDEBUG) $(PADFLAGS) -fPIC
+GENERAL_OPTS := -O -Wall $(EXTRA_C_OPTS) $(JRLDEBUG) $(PADFLAGS) $(LEIFLAGS) -fPIC
CC_GENERAL_OPTS := $(GENERAL_OPTS) -Werror
# Flags used for kernel C source files
# $(CC) geekos/test.o geekos/vmcs.o geekos/vmx_lowlevel.o -o geekos/test
# Standard floppy image - just boots the kernel
-fd.img : geekos/fd_boot.bin geekos/setup.bin geekos/kernel.bin vm_kernel
+fd.img : geekos/fd_boot.bin geekos/setup.bin geekos/kernel.bin
cat geekos/fd_boot.bin geekos/setup.bin geekos/kernel.bin > _temp
$(PAD) _temp 512
- cat _temp vm_kernel > $@
+ cp _temp fd.img
vmm.img : fd.img
cp fd.img vmm.img
(cd ../src/vmboot/vgabios; make clean; make)
force_payload: force_rombios force_vgabios
+ifeq ($(XED),1)
+ ../scripts/make_payload.pl payload_none.txt vm_kernel
+else
../scripts/make_payload.pl payload_layout.txt vm_kernel
+endif
inter1: force_payload
-make clean
# Floppy boot sector (first stage boot loader).
-geekos/fd_boot.bin : geekos/setup.bin geekos/kernel.bin $(PROJECT_ROOT)/src/geekos/fd_boot.asm vm_kernel
+geekos/fd_boot.bin : geekos/setup.bin geekos/kernel.bin $(PROJECT_ROOT)/src/geekos/fd_boot.asm
$(NASM) -f bin \
-I$(PROJECT_ROOT)/src/geekos/ \
-DNUM_SETUP_SECTORS=`$(NUMSECS) geekos/setup.bin` \
-DNUM_KERN_SECTORS=`$(NUMSECS) geekos/kernel.bin` \
- -DNUM_VM_KERNEL_SECTORS=`$(NUMSECS) vm_kernel` \
$(PROJECT_ROOT)/src/geekos/fd_boot.asm \
-o $@
-I$(PROJECT_ROOT)/src/geekos/ \
-DENTRY_POINT=0x`egrep 'Main$$' geekos/kernel.syms |awk '{print $$1}'` \
-DVMM_SIZE=`$(NUMSECS) geekos/kernel.bin` \
- -DGUEST_SIZE=`$(NUMSECS) vm_kernel` \
$(PROJECT_ROOT)/src/geekos/setup.asm \
-o $@
$(PAD) $@ 512
$(PAD) $@ 512
# The kernel executable and symbol map.
-geekos/kernel.exe : $(KERNEL_OBJS) $(COMMON_C_OBJS) $(VMM_OBJS) $(DEVICE_OBJS)
+geekos/kernel.exe : $(KERNEL_OBJS) $(COMMON_C_OBJS) $(VMM_OBJS) $(DEVICE_OBJS) vm_kernel
$(TARGET_LD) -o geekos/kernel.exe -Ttext $(KERNEL_BASE_ADDR) -e $(KERNEL_ENTRY) \
- $(KERNEL_OBJS) $(COMMON_C_OBJS) $(VMM_OBJS) $(DEVICE_OBJS)
+ $(KERNEL_OBJS) $(COMMON_C_OBJS) $(VMM_OBJS) $(DEVICE_OBJS) $(V3LIBS) -b binary vm_kernel
$(TARGET_NM) geekos/kernel.exe > geekos/kernel.syms
force:
-vm_kernel: force
- $(PAD) vm_kernel 512
- @echo "VM kernel lives at 0x100000 and is" `$(NUMSECS) vm_kernel` "sectors long"
+#vm_kernel: force
+# $(PAD) vm_kernel 512
+# @echo "VM kernel lives at 0x100000 and is" `$(NUMSECS) vm_kernel` "sectors long"