-
Notifications
You must be signed in to change notification settings - Fork 1
/
Makefile
103 lines (76 loc) · 2.87 KB
/
Makefile
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
PREFIX = aarch64-linux-gnu-
CC = $(PREFIX)gcc
LD = $(PREFIX)ld
OBJCOPY = $(PREFIX)objcopy
CPU = cortex-a72+nofp
QCPU = cortex-a72
CFLAGS = -Wall -Og -g -MD -ffreestanding -nostdinc -nostdlib -nostartfiles -mcpu=$(CPU)
#CFLAGS += -DKDBG
CFLAGS += -DUSE_ARMVIRT
CFLAGS += -I ./include/
LDFLAGS = -nostdlib
QEMUPREFIX =
QEMU = $(QEMUPREFIX)qemu-system-aarch64
GIC_VERSION = 3
MACHINE = virt,gic-version=$(GIC_VERSION)
ifndef NCPU
NCPU = 4
endif
QEMUOPTS = -cpu $(QCPU) -machine $(MACHINE) -smp $(NCPU) -m 256
QEMUOPTS += -global virtio-mmio.force-legacy=false
QEMUOPTS += -drive file=fs.img,if=none,format=raw,id=d0
QEMUOPTS += -device virtio-blk-device,drive=d0,bus=virtio-mmio-bus.0
QEMUOPTS += -nographic -kernel kernel8.elf
KOBJS = kernel/boot.o kernel/vectortable.o kernel/file.o kernel/buf.o \
kernel/console.o kernel/trap.o kernel/font.o kernel/ext2.o kernel/uname.o \
kernel/main.o kernel/printk.o kernel/proc.o kernel/kalloc.o kernel/fs.o \
kernel/cswitch.o kernel/syscall.o kernel/mm.o kernel/string.o kernel/elf.o \
kernel/cdev.o kernel/spinlock.o
DRIVER = kernel/driver/gicv3.o kernel/driver/timer.o kernel/driver/virtio.o \
kernel/driver/psci-if.o kernel/driver/psci.o
VIRTDRV = $(DRIVER) kernel/driver/virt/uart.o
RPI4DRV = $(DRIVER)
OBJS = $(KOBJS) $(VIRTDRV)
SDPATH = /media/k-mrm/09D0-F0A8
usr/initcode: usr/initcode.S
$(CC) $(CFLAGS) -c usr/initcode.S -o usr/initcode.o
$(LD) $(LDFLAGS) -N -e initcode -Ttext 0x1000 -o usr/initcode.elf usr/initcode.o
$(OBJCOPY) -S -O binary usr/initcode.elf usr/initcode
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
%.o: %.S
$(CC) $(CFLAGS) -c $< -o $@
-include: *.d
ULIBS = usr/systable.o usr/ulib.o usr/malloc.o
root = rootfs
UPROGS = $(root)/sh $(root)/cat $(root)/echo $(root)/ls $(root)/uname \
$(root)/mkdir $(root)/loop $(root)/writetest $(root)/thread $(root)/heap \
$(root)/thbench $(root)/bug $(root)/kill $(root)/init
$(root)/%: usr/%.o $(ULIBS)
@mkdir -p $(root)
$(LD) $(LDFLAGS) -N -e main -Ttext 0x1000 -o $@ $^
cp README.md $(root)/
fs.img: $(UPROGS)
dd if=/dev/zero of=fs.img count=10000
mkfs -t ext2 -d rootfs/ -v fs.img -b 1024
kernel8.elf: $(OBJS) kernel/kernel.ld usr/initcode
$(LD) -r -b binary usr/initcode -o usr/initcode.o
$(LD) $(LDFLAGS) -T kernel/kernel.ld -o $@ $(OBJS) usr/initcode.o
kernel8.img: kernel8.elf
$(OBJCOPY) -O binary $^ $@
qemu: kernel8.img fs.img
$(QEMU) $(QEMUOPTS)
gdb: kernel8.img fs.img
@echo "*** aarch64-linux-gnu-gdb -x connect.gdb"
$(QEMU) -S -gdb tcp::1234 $(QEMUOPTS)
dts:
$(QEMU) -S -cpu $(QCPU) -machine $(MACHINE),dumpdtb=virt.dtb -smp $(NCPU) -nographic
dtc -I dtb -O dts -o virt.dts virt.dtb
$(RM) virt.dtb
raspi: kernel8.img fs.img
cp kernel8.img $(SDPATH)
clean:
$(RM) $(OBJS) $(ULIBS) $(UOBJS) $(UPROGS) usr/initcode.o usr/initcode.elf usr/initcode kernel8.elf kernel8.img fs.img
find ./ -name "*.d" | xargs $(RM)
$(RM) -rf $(root)
.PHONY: qemu gdb clean dts raspi