| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- BUILD_O_DIR = ./build
- BUILD_BIN_DIR = $(BUILD_O_DIR)/bin
- ENTRY_POINT = 0xc0001500
- DIS_IMG = ./hd30M.img
- AS = nasm
- CC = /usr/local/i386elfgcc/bin/i386-elf-gcc
- LD = /usr/local/i386elfgcc/bin/i386-elf-ld
- NM = /usr/local/i386elfgcc/bin/i386-elf-nm
- LIB = -I lib/ -I lib/kernel -I lib/user/ -I kernel/ -I device/ -I thread/
- 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 = $(BUILD_O_DIR)/main.o $(BUILD_O_DIR)/init.o $(BUILD_O_DIR)/interrupt.o \
- $(BUILD_O_DIR)/timer.o $(BUILD_O_DIR)/kernel.o $(BUILD_O_DIR)/print.o \
- $(BUILD_O_DIR)/debug.o $(BUILD_O_DIR)/string.o $(BUILD_O_DIR)/bitmap.o \
- $(BUILD_O_DIR)/memory.o $(BUILD_O_DIR)/thread.o $(BUILD_O_DIR)/list.o \
- $(BUILD_O_DIR)/switch.o $(BUILD_O_DIR)/sync.o $(BUILD_O_DIR)/console.o \
- $(BUILD_O_DIR)/keyboard.o $(BUILD_O_DIR)/ioqueue.o $(BUILD_O_DIR)/tss.o \
- $(BUILD_O_DIR)/process.o $(BUILD_O_DIR)/syscall.o $(BUILD_O_DIR)/syscall-init.o
- ################################ C 代码编译 ################################
- $(BUILD_O_DIR)/main.o: kernel/main.c lib/kernel/print.h lib/stdint.h kernel/init.h
- $(CC) $(CFLAGS) $< -o $@
- $(BUILD_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 $@
- $(BUILD_O_DIR)/interrupt.o: kernel/interrupt.c lib/stdint.h kernel/interrupt.h kernel/global.h lib/kernel/print.h
- $(CC) $(CFLAGS) $< -o $@
- $(BUILD_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 $@
- $(BUILD_O_DIR)/debug.o: kernel/debug.c kernel/debug.h lib/kernel/print.h lib/stdint.h kernel/interrupt.h
- $(CC) $(CFLAGS) $< -o $@
- $(BUILD_O_DIR)/string.o: lib/string.c lib/string.h lib/stdint.h
- $(CC) $(CFLAGS) $< -o $@
- $(BUILD_O_DIR)/bitmap.o: lib/kernel/bitmap.c lib/kernel/bitmap.h lib/stdint.h lib/string.h
- $(CC) $(CFLAGS) $< -o $@
- $(BUILD_O_DIR)/memory.o: kernel/memory.c kernel/memory.h lib/stdint.h lib/kernel/bitmap.h lib/string.h lib/kernel/print.h
- $(CC) $(CFLAGS) $< -o $@
- $(BUILD_O_DIR)/thread.o: thread/thread.c thread/thread.h
- $(CC) $(CFLAGS) $< -o $@
- $(BUILD_O_DIR)/list.o: lib/kernel/list.c lib/kernel/list.h lib/stdint.h kernel/interrupt.h
- $(CC) $(CFLAGS) $< -o $@
- $(BUILD_O_DIR)/sync.o: thread/sync.c thread/sync.h
- $(CC) $(CFLAGS) $< -o $@
- $(BUILD_O_DIR)/console.o: device/console.c device/console.h
- $(CC) $(CFLAGS) $< -o $@
- $(BUILD_O_DIR)/keyboard.o: device/keyboard.c device/keyboard.h
- $(CC) $(CFLAGS) $< -o $@
- $(BUILD_O_DIR)/ioqueue.o: device/ioqueue.c device/ioqueue.h
- $(CC) $(CFLAGS) $< -o $@
- $(BUILD_O_DIR)/tss.o: userprog/tss.c userprog/tss.h
- $(CC) $(CFLAGS) $< -o $@
- $(BUILD_O_DIR)/process.o: userprog/process.c userprog/process.h
- $(CC) $(CFLAGS) $< -o $@
- $(BUILD_O_DIR)/syscall.o: lib/user/syscall.c lib/user/syscall.h
- $(CC) $(CFLAGS) $< -o $@
- $(BUILD_O_DIR)/syscall-init.o: userprog/syscall-init.c userprog/syscall-init.h
- $(CC) $(CFLAGS) $< -o $@
- ################################ 汇编代码编译 ################################
- $(BUILD_O_DIR)/kernel.o: kernel/kernel.S
- $(AS) $(ASFLAGS) $< -o $@
- $(BUILD_O_DIR)/switch.o: thread/switch.S
- $(AS) $(ASFLAGS) $< -o $@
- $(BUILD_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 $@
- $(BUILD_BIN_DIR)/kernel.sym: $(BUILD_BIN_DIR)/kernel.bin
- $(NM) $< | grep -i ' T ' | awk '{print $$1" "$$3}' > $@
- .PHONY:clean mk_dir mbr loader K create_img hd run build sym all
- mk_dir:
- @if [ ! -d $(BUILD_O_DIR) ]; then mkdir $(BUILD_O_DIR); fi
- @if [ ! -d $(BUILD_BIN_DIR) ]; then mkdir $(BUILD_BIN_DIR); fi
- ################################ 创建 DIS_IMG ################################
- create_img:
- @if [ ! -f $(DIS_IMG) ]; then bximage -q -func=create -hd=30M $(DIS_IMG); fi
- @echo "创建 $(DIS_IMG) 成功"
- hd: mbr loader K create_img
- 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=2000 seek=9 conv=notrunc
- clean: mk_dir
- cd $(BUILD_O_DIR) && rm -rf ./*
- rm -rf $(BUILD_O_DIR)
- rm -rf $(DIS_IMG)
- rm -rf bochs_log.txt
- K: mk_dir $(BUILD_BIN_DIR)/kernel.bin
- sym: K $(BUILD_BIN_DIR)/kernel.sym
- mbr: mk_dir $(BUILD_BIN_DIR)/mbr.bin
- loader: mk_dir $(BUILD_BIN_DIR)/loader.bin
- run: all hd
- bochs -f bochsrc -q
- all: mk_dir mbr loader K sym
- @echo "编译完成"
|