|
|
@@ -0,0 +1,81 @@
|
|
|
+BUID_O_DIR = ./build
|
|
|
+BUILD_BIN_DIR = $(BUID_O_DIR)/bin
|
|
|
+ENTRY_POINT = 0xc0001500
|
|
|
+DIS_IMG = ./hd30M.img
|
|
|
+AS = nasm
|
|
|
+CC = i386-elf-gcc
|
|
|
+LD = i386-elf-ld
|
|
|
+LIB = -I lib/ -I lib/kernel -I lib/user/ -I kernel/ -I device/
|
|
|
+BOOTLIB = -I boot/include/
|
|
|
+ASFLAGS = -f elf
|
|
|
+CFLAGS = -Wall $(LIB) -c -fno-builtin -W -Wstrict-prototypes -Wmissing-prototypes
|
|
|
+LDFLAGS = -Ttext $(ENTRY_POINT) -e main -Map $(BUILD_BIN_DIR)/kernel.map
|
|
|
+OBJS = $(BUID_O_DIR)/main.o $(BUID_O_DIR)/init.o $(BUID_O_DIR)/interrupt.o \
|
|
|
+ $(BUID_O_DIR)/timer.o $(BUID_O_DIR)/kernel.o $(BUID_O_DIR)/print.o \
|
|
|
+ $(BUID_O_DIR)/debug.o
|
|
|
+
|
|
|
+################################ C 代码编译 ################################
|
|
|
+$(BUID_O_DIR)/main.o: kernel/main.c lib/kernel/print.h lib/stdint.h kernel/init.h
|
|
|
+ $(CC) $(CFLAGS) $< -o $@
|
|
|
+
|
|
|
+$(BUID_O_DIR)/init.o: kernel/init.c kernel/init.h lib/kernel/print.h lib/stdint.h kernel/interrupt.h device/timer.h
|
|
|
+ $(CC) $(CFLAGS) $< -o $@
|
|
|
+
|
|
|
+$(BUID_O_DIR)/interrupt.o: kernel/interrupt.c lib/stdint.h kernel/interrupt.h kernel/global.h lib/kernel/print.h
|
|
|
+ $(CC) $(CFLAGS) $< -o $@
|
|
|
+
|
|
|
+$(BUID_O_DIR)/timer.o: device/timer.c lib/stdint.h device/timer.h kernel/interrupt.h lib/kernel/io.h lib/kernel/print.h
|
|
|
+ $(CC) $(CFLAGS) $< -o $@
|
|
|
+
|
|
|
+$(BUID_O_DIR)/debug.o: kernel/debug.c kernel/debug.h lib/kernel/print.h lib/stdint.h kernel/interrupt.h
|
|
|
+ $(CC) $(CFLAGS) $< -o $@
|
|
|
+
|
|
|
+################################ 汇编代码编译 ################################
|
|
|
+$(BUID_O_DIR)/kernel.o: kernel/kernel.S
|
|
|
+ $(AS) $(ASFLAGS) $< -o $@
|
|
|
+
|
|
|
+$(BUID_O_DIR)/print.o: lib/kernel/print.S
|
|
|
+ $(AS) $(ASFLAGS) $< -o $@
|
|
|
+
|
|
|
+$(BUILD_BIN_DIR)/mbr.bin: boot/mbr.S
|
|
|
+ $(AS) $(BOOTLIB) $< -o $@
|
|
|
+
|
|
|
+$(BUILD_BIN_DIR)/loader.bin: boot/loader.S
|
|
|
+ $(AS) $(BOOTLIB) $< -o $@
|
|
|
+
|
|
|
+################################ 链接所有目标文件 ################################
|
|
|
+$(BUILD_BIN_DIR)/kernel.bin: $(OBJS)
|
|
|
+ $(LD) $(LDFLAGS) $^ -o $@
|
|
|
+
|
|
|
+
|
|
|
+.PHONY:clean mk_dir mbr loader kernel create_img hd run all
|
|
|
+
|
|
|
+mk_dir:
|
|
|
+ @if [ ! -d $(BUID_O_DIR) ]; then mkdir $(BUID_O_DIR); fi
|
|
|
+ @if [ ! -d $(BUILD_BIN_DIR) ]; then mkdir $(BUILD_BIN_DIR); fi
|
|
|
+
|
|
|
+################################ 创建 DIS_IMG ################################
|
|
|
+create_img:
|
|
|
+ bximage -q -func=create -hd=30M $(DIS_IMG)
|
|
|
+
|
|
|
+hd:
|
|
|
+ dd if=$(BUILD_BIN_DIR)/mbr.bin of=$(DIS_IMG) bs=512 count=1 conv=notrunc
|
|
|
+ dd if=$(BUILD_BIN_DIR)/loader.bin of=$(DIS_IMG) bs=512 count=4 seek=2 conv=notrunc
|
|
|
+ dd if=$(BUILD_BIN_DIR)/kernel.bin of=$(DIS_IMG) bs=512 count=200 seek=9 conv=notrunc
|
|
|
+
|
|
|
+clean:
|
|
|
+ cd $(BUID_O_DIR) && rm -rf ./*
|
|
|
+ rm -rf $(BUID_O_DIR)
|
|
|
+ rm -rf $(DIS_IMG)
|
|
|
+ rm -rf bochs_log.txt
|
|
|
+
|
|
|
+kernel: $(BUILD_BIN_DIR)/kernel.bin
|
|
|
+
|
|
|
+mbr: $(BUILD_BIN_DIR)/mbr.bin
|
|
|
+
|
|
|
+loader: $(BUILD_BIN_DIR)/loader.bin
|
|
|
+
|
|
|
+run:
|
|
|
+ bochs -f bochsrc -q
|
|
|
+
|
|
|
+all: mk_dir create_img mbr loader kernel hd
|