目前為止,檔案有些多且雜亂。
與此同時,編譯、連結的指定越來越多,我們採用 Makefile 來解決此問題。
嘗試修改 kernel/start.c,在 cstart() 函數最後增加一行,
並進行指令
最後的執行畫面
$ tree . ├── a.img ├── boot │ ├── boot.asm │ ├── include │ │ ├── fat12hdr.inc │ │ ├── load.inc │ │ └── pm.inc │ └── loader.asm ├── include │ ├── const.h │ ├── protect.h │ └── type.h ├── kernel │ ├── kernel.asm │ └── start.c └── lib ├── kliba.asm └── string.asm
與此同時,編譯、連結的指定越來越多,我們採用 Makefile 來解決此問題。
Makefile
################ # Makefile for Orange'S ################ # Entry point of Orange'S # It must have the same value with 'KernelEntryPointPhyAddr; in load.inc! ENTRYPOINT = 0x30400 # Offset of entry point in kernel file # It depends on ENTRYPOINT ENTRYOFFSET = 0x400 # Programs, flags, etc. ASM = nasm DASM = ndisam CC = gcc LD = ld ASMBFLAGS = -I boot/include/ ASMKFLAGS = -I include/ -f elf CFLAGS = -I include/ -c -fno-builtin LDFLAGS = -s -Ttext $(ENTRYPOINT) DASMFLAGS = -u -o $(ENTRYPOINT) -e $(ENTRYOFFSET) # This program ORANGESBOOT = boot/boot.bin boot/loader.bin ORANGESKERNEL = kernel.bin OBJS = kernel/kernel.o kernel/start.o lib/kliba.o lib/string.o DASMOUTPUT = kernel.bin.asm # All Phony Targets .PHONY : everything final image clean realclean disasm all buildimg # Default starting position everything : $(ORANGESBOOT) $(ORANGESKERNEL) all : realclean everything final : all clean image : final buildimg clean : rm -f $(OBJS) realclean : rm -f $(OBJS) $(ORANGESBOOT) $(ORANGESKERNEL) disasm : $(DASM) $(DASMFLAGS) $(ORANGESKERNEL) > $(DASMOUTPUT) # We assume that "a.img" exists in current folder buildimg : mkdir tmp dd if=boot/boot.bin of=a.img bs=512 count=1 conv=notrunc sleep 1 sudo mount -o loop a.img tmp sleep 1 sudo cp -fv boot/loader.bin tmp sudo cp -fv kernel.bin tmp sleep 1 sudo umount tmp sleep 1 rmdir tmp boot/boot.bin : boot/boot.asm boot/include/load.inc boot/include/fat12hdr.inc $(ASM) $(ASMBFLAGS) -o $@ $< boot/loader.bin : boot/loader.asm boot/include/load.inc boot/include/fat12hdr.inc boot/include/pm.inc $(ASM) $(ASMBFLAGS) -o $@ $< $(ORANGESKERNEL) : $(OBJS) $(LD) $(LDFLAGS) -o $(ORANGESKERNEL) $(OBJS) kernel/kernel.o : kernel/kernel.asm $(ASM) $(ASMKFLAGS) -o $@ $< kernel/start.o : kernel/start.c include/type.h include/const.h include/protect.h $(CC) $(CFLAGS) -o $@ $< lib/kliba.o : lib/kliba.asm $(ASM) $(ASMKFLAGS) -o $@ $< lib/string.o : lib/string.asm $(ASM) $(ASMKFLAGS) -o $@ $<
嘗試修改 kernel/start.c,在 cstart() 函數最後增加一行,
disp_str("-----\"cstart\" ends-----\n");
並進行指令
$ make image
最後的執行畫面
留言
張貼留言