forked from zirandu/linux-0.11-lab
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile.emulators
116 lines (90 loc) · 2.56 KB
/
Makefile.emulators
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
TOP_DIR = $(CURDIR)
TOOL_DIR = $(TOP_DIR)/tools/
# Allow to run kernel on different emulators with different prebuilt rootfs
# Rootfs preparation
hda:
@make hda -C rootfs
flp:
@make flp -C rootfs
ramfs:
@make ramfs -C rootfs
# VM (Qemu/Bochs) Setting for different rootfs
ROOT_RAM = 0000
ROOT_FDB = 021d
ROOT_HDA = 0301
SETROOTDEV_CMD = $(SETROOTDEV) images/Image
SETROOTDEV_CMD_RAM = $(SETROOTDEV_CMD) $(ROOT_RAM) rootfs/$(RAM_IMG)
SETROOTDEV_CMD_FDB = $(SETROOTDEV_CMD) $(ROOT_FDB)
SETROOTDEV_CMD_HDA = $(SETROOTDEV_CMD) $(ROOT_HDA)
QEMU_CMD = $(QEMU) -m 16M -boot a -fda images/Image
ifeq ($(QEMU_PREBUILT),1)
QEMU_STATUS = $(shell $(QEMU_PATH)$(QEMU) --help >/dev/null 2>&1; echo $$?)
ifeq ($(QEMU_STATUS), 0)
QEMU_CMD := $(QEMU_PATH)$(QEMU_CMD) $(QEMU_OPTS) -L $(QEMU_PATH)
endif
endif
QEMU_CMD_FDB = $(QEMU_CMD) -fdb rootfs/$(FLP_IMG)
QEMU_CMD_HDA = $(QEMU_CMD) -hda rootfs/$(HDA_IMG)
nullstring :=
QEMU_DBG = $(nullstring) -s -S #-nographic #-serial '/dev/ttyS0'"
BOCHS_CFG = $(TOOL_DIR)/bochs/bochsrc/
BOCHS_CMD = $(BOCHS) -q -f $(BOCHS_CFG)/bochsrc-fda.bxrc
BOCHS_CMD_FDB = $(BOCHS) -q -f $(BOCHS_CFG)/bochsrc-fdb.bxrc
BOCHS_CMD_HDA = $(BOCHS) -q -f $(BOCHS_CFG)/bochsrc-hd.bxrc
BOCHS_DBG = .dbg
VM = $(shell cat $(VM_CFG) 2>/dev/null)
ifeq ($(VM), bochs)
NEW_VM=qemu
else
NEW_VM=bochs
endif
switch:
@echo "Switch to use emulator: $(NEW_VM)"
@echo $(NEW_VM) > $(VM_CFG)
VM=$(shell cat $(VM_CFG) 2>/dev/null)
ifeq ($(VM), bochs)
VM_CMD = $(BOCHS_CMD)
VM_CMD_FDB = $(BOCHS_CMD_FDB)
VM_CMD_HDA = $(BOCHS_CMD_HDA)
VM_DBG = $(BOCHS_DBG)
else
VM_CMD = $(QEMU_CMD)
VM_CMD_FDB = $(QEMU_CMD_FDB)
VM_CMD_HDA = $(QEMU_CMD_HDA)
VM_DBG = $(QEMU_DBG)
endif
# Allow to use curses based console via ssh
VM_DISPLAY =
ifeq ($(G),0)
ifeq ($(VM), bochs)
VM_DISPLAY = .term
else
VM_DISPLAY = $(nullstring) -curses
endif
endif
# Running on emulators with differrent rootfs
ramdisk-boot:
@# Force init/main.o build with ramdisk support
@make -B init/main.o RAMDISK=2048
boot-hd: start-hd
boot-fd: start-fd
boot: start
start: ramdisk-boot Image
@$(SETROOTDEV_CMD_RAM)
$(VM_CMD)$(VM_DISPLAY)
start-fd: Image flp
@$(SETROOTDEV_CMD_FDB)
$(VM_CMD_FDB)$(VM_DISPLAY)
start-hd: Image hda
@$(SETROOTDEV_CMD_HDA)
$(VM_CMD_HDA)$(VM_DISPLAY)
# Debugging the above targets
debug: ramdisk-boot Image
@$(SETROOTDEV_CMD_RAM)
$(VM_CMD)$(VM_DBG)$(VM_DISPLAY)
debug-fd: Image flp
@$(SETROOTDEV_CMD_FDB)
$(VM_CMD_FDB)$(VM_DBG)$(VM_DISPLAY)
debug-hd: Image hda
@$(SETROOTDEV_CMD_HDA)
$(VM_CMD_HDA)$(VM_DBG)$(VM_DISPLAY)