Feat: lab 4
This commit is contained in:
45
Makefile
45
Makefile
@@ -5,7 +5,7 @@ GNU := $(ARCH)-linux-gnu
|
||||
GDB := $(GNU)-gdb
|
||||
|
||||
QEMU := qemu-system-$(ARCH)
|
||||
QEMUFLAGS += -M raspi3b -display none -serial null -serial pty
|
||||
QEMUFLAGS += -M raspi3b -display none -serial null
|
||||
|
||||
CC := $(GNU)-gcc
|
||||
CCFLAGS += -Wall -Wextra -O0 \
|
||||
@@ -15,25 +15,32 @@ LD := $(GNU)-ld
|
||||
LDFLAGS += -g -nostdlib -no-pie
|
||||
OBJCOPY := $(GNU)-objcopy
|
||||
|
||||
MISC_DIR := misc
|
||||
QEMUFLAGS += -dtb $(MISC_DIR)/bcm2710-rpi-3-b-plus.dtb
|
||||
|
||||
LIB_DIR := lib
|
||||
INCLUDE := -Iinclude
|
||||
|
||||
#TARGET := kernel8
|
||||
#TARGET_DIR := ./kernel
|
||||
ELF := $(TARGET).elf
|
||||
IMG := $(TARGET).img
|
||||
|
||||
LD_SCRIPT := $(TARGET_DIR)/linker.ld
|
||||
INCLUDE += -Iinclude
|
||||
LIB_DIR := ./lib
|
||||
MISC_DIR := ./misc
|
||||
QEMUFLAGS += -dtb $(MISC_DIR)/bcm2710-rpi-3-b-plus.dtb
|
||||
INCLUDE += -I$(TARGET_DIR)/include
|
||||
TARGET_LIB_DIR := $(TARGET_DIR)/lib
|
||||
|
||||
BOOTLOADER_DIR := ./bootloader
|
||||
ROOTFS_DIR := ./rootfs
|
||||
|
||||
# initramfs
|
||||
ROOTFS_DIR := ./rootfs
|
||||
CPIO := initramfs.cpio
|
||||
QEMUFLAGS += -initrd $(CPIO)
|
||||
|
||||
SRCS := $(shell find $(TARGET_DIR) -name '*.[cS]') \
|
||||
$(shell find $(LIB_DIR) -name '*.c')
|
||||
TARGET_SRCS := $(shell find $(TARGET_DIR) -maxdepth 1 -name '*.[cS]') \
|
||||
$(shell find $(TARGET_LIB_DIR) -name '*.[cS]')
|
||||
TARGET_OBJS := $(TARGET_SRCS:%=%.o)
|
||||
SRCS := $(shell find $(LIB_DIR) -name '*.c')
|
||||
OBJS := $(SRCS:%=%.o)
|
||||
|
||||
.PHONY: all build clean clean_target run kernel debug gdb
|
||||
@@ -50,8 +57,8 @@ $(CPIO): $(shell find $(ROOTFS_DIR))
|
||||
$(IMG): $(ELF)
|
||||
$(OBJCOPY) -O binary $< $@
|
||||
|
||||
$(ELF): $(LD_SCRIPT) $(OBJS)
|
||||
$(LD) -o $@ -T $^ $(LDFLAGS)
|
||||
$(ELF): $(LD_SCRIPT) $(TARGET_OBJS) $(OBJS)
|
||||
$(LD) -o $@ -T $(LD_SCRIPT) $(TARGET_OBJS) $(OBJS) $(LDFLAGS)
|
||||
|
||||
%.S.o: %.S
|
||||
mkdir -p $(dir $@)
|
||||
@@ -62,22 +69,26 @@ $(ELF): $(LD_SCRIPT) $(OBJS)
|
||||
$(CC) -c $< -o $@ $(INCLUDE) $(CCFLAGS)
|
||||
|
||||
clean:
|
||||
-rm $(OBJS) $(CPIO)
|
||||
$(MAKE) clean_target TARGET_DIR=./kernel TARGET=kernel8
|
||||
$(MAKE) clean_target TARGET_DIR=./bootloader TARGET=bootloader
|
||||
|
||||
clean_target:
|
||||
-rm $(OBJS) $(ELF) $(IMG) $(CPIO)
|
||||
-rm $(TARGET_OBJS) $(ELF) $(IMG)
|
||||
|
||||
run: all $(CPIO)
|
||||
$(QEMU) -kernel bootloader.img $(QEMUFLAGS) -serial pty
|
||||
|
||||
kernel: $(CPIO)
|
||||
$(MAKE) build TARGET_DIR=kernel TARGET=kernel8
|
||||
$(QEMU) -kernel kernel8.img $(QEMUFLAGS) -serial stdio
|
||||
|
||||
bootloader: $(CPIO)
|
||||
$(MAKE) build TARGET_DIR=./bootloader TARGET=bootloader
|
||||
$(QEMU) -kernel bootloader.img $(QEMUFLAGS)
|
||||
|
||||
kernel: all $(CPIO)
|
||||
-killall screen
|
||||
$(QEMU) -kernel kernel8.img $(QEMUFLAGS)
|
||||
|
||||
debug: all $(CPIO)
|
||||
-killall screen
|
||||
$(QEMU) -kernel kernel8.img $(QEMUFLAGS) -S -s
|
||||
$(QEMU) -kernel kernel8.img $(QEMUFLAGS) -serial stdio -S -s
|
||||
|
||||
gdb:
|
||||
$(GDB)
|
||||
|
||||
Reference in New Issue
Block a user