Chapter 8:記憶體管理系統 === :::info 這是讀書筆記  作者:鄭鋼 出版社:佳魁資訊股份有限公司 出版日期:2017/05/31 ::: --- # makefile 簡介 不錯的網路資源 * https://www.mropengate.com/2018/01/makefile.html * https://hackmd.io/@sysprog/SySTMXPvl * https://github.com/yyluoyong/Make-3.8-Chinese-Manuals/blob/master/main.pdf ## 檔案結構 >[!Tip] 盡可能的簡化整個檔案目錄  ## makefile ```mk= ##################################### # Environment # ##################################### BUILD_DIR = ./build OUT_DIR = ./out ##################################### # Build Tools # ##################################### AS = nasm CC = x86_64-linux-gnu-gcc LD = x86_64-linux-gnu-ld ##################################### # Build Flags # ##################################### KERNEL_ENTRY = 0xc0001500 ASFLAGS = -f elf CFLAGS = -c -m32 -fno-stack-protector -fno-builtin LDFLAGS = -m elf_i386 -Ttext $(KERNEL_ENTRY) -e main -z noexecstack ##################################### # Include Files # ##################################### INCLUDE = -I ./include ##################################### # Output Files # ##################################### obj := ##################################### # MBR: mbr.bin # ##################################### $(OUT_DIR)/mbr.bin: boot/mbr.S $(AS) -I boot/ $< -o $@ ##################################### # Bootloader: loader.bin # ##################################### $(OUT_DIR)/loader.bin: boot/loader.S $(AS) -I boot/ $< -o $@ ##################################### # Kernel Objects: C # ##################################### $(BUILD_DIR)/main.o: kernel/main.c $(CC) $(CFLAGS) $(INCLUDE) $< -o $@ obj += $(BUILD_DIR)/main.o $(BUILD_DIR)/init.o: kernel/init.c $(CC) $(CFLAGS) $(INCLUDE) $< -o $@ obj += $(BUILD_DIR)/init.o $(BUILD_DIR)/interrupt.o: kernel/interrupt.c $(CC) $(CFLAGS) $(INCLUDE) $< -o $@ obj += $(BUILD_DIR)/interrupt.o $(BUILD_DIR)/timer.o: kernel/timer.c $(CC) $(CFLAGS) $(INCLUDE) $< -o $@ obj += $(BUILD_DIR)/timer.o $(BUILD_DIR)/debug.o: kernel/debug.c $(CC) $(CFLAGS) $(INCLUDE) $< -o $@ obj += $(BUILD_DIR)/debug.o $(BUILD_DIR)/string.o: kernel/string.c $(CC) $(CFLAGS) $(INCLUDE) $< -o $@ obj += $(BUILD_DIR)/string.o $(BUILD_DIR)/bitmap.o: kernel/bitmap.c $(CC) $(CFLAGS) $(INCLUDE) $< -o $@ obj += $(BUILD_DIR)/bitmap.o $(BUILD_DIR)/memory.o: kernel/memory.c $(CC) $(CFLAGS) $(INCLUDE) $< -o $@ obj += $(BUILD_DIR)/memory.o ##################################### # Kernel Objects: Assembly # ##################################### $(BUILD_DIR)/print.o: kernel/print.S $(AS) $(ASFLAGS) $< -o $@ obj += $(BUILD_DIR)/print.o $(BUILD_DIR)/kernel.o: kernel/kernel.S $(AS) $(ASFLAGS) $< -o $@ obj += $(BUILD_DIR)/kernel.o ##################################### # Kernel: kernel.bin # ##################################### $(OUT_DIR)/kernel.bin: $(obj) $(LD) $(LDFLAGS) $^ -o $@ ##################################### # Command # ##################################### .PHONY : dir clean all dir: @echo ">>>Start $@..." @echo "mkdir $(BUILD_DIR)" @if [ ! -d $(BUILD_DIR) ];then mkdir $(BUILD_DIR);fi @echo "mkdir $(OUT_DIR)" @if [ ! -d $(OUT_DIR) ];then mkdir $(OUT_DIR);fi @echo ">>>make $@ done." clean: @echo ">>>Start $@..." rm -f $(BUILD_DIR)/* rm -f $(OUT_DIR)/* @echo ">>>make $@ done." all: dir $(OUT_DIR)/mbr.bin $(OUT_DIR)/loader.bin $(OUT_DIR)/kernel.bin @echo ">>>make $@ done." ``` # assert 實作 ## Source Code https://github.com/yifengyou/os-elephant/tree/master/code/c08/a ## Result  # 字串操作函數 ## Source Code https://github.com/yifengyou/os-elephant/tree/master/code/c08/b # Bitmap Operation ## Source Code https://github.com/yifengyou/os-elephant/tree/master/code/c08/c # 記憶體管理 ## Source Code https://github.com/yifengyou/os-elephant/tree/master/code/c08/e ## Result 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up