1 Star 0 Fork 21

yhn/FFlyanx

forked from 辰湖飞彦/FFlyanx 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
Makefile 6.41 KB
一键复制 编辑 原始数据 按行查看 历史
#
# Makefile
# Created by flyan on 2019/11/9.
# QQ: 1341662010
# QQ-Group:909830414
# gitee: https://gitee.com/flyanh/
# Makefile文件包含如何编译工程的规则
#============================================================================
# Flyanx内核的内存挂载点
#----------------------------------------------------------------------------
# 这个值必须存在且相等在文件"load.inc"中的 'KERNEL_ENTRY_POINT_PHY_ADDR'!
ENTRY_POINT = 0x1000
#============================================================================
# 变量
#----------------------------------------------------------------------------
# 头文件目录
u = /usr
i = include
h = $i/flyanx
s = $i/sys
b = $i/ibm
l = $i/lib
# C文件所在目录
sk = src/kernel
sog = src/origin
smm = src/mm
sfs = src/fs
sfly = src/fly
# 库文件所在目录
lansi = src/lib/ansi
lstdio = src/lib/stdio
li386 = src/lib/i386
# 编译链接中间目录
t = target
tb = $t/boot
tk = $t/kernel
tl = $t/lib
tog = $t/origin
tmm = $t/mm
tfs = $t/fs
tfly = $t/fly
# 所需软盘镜像,可以指定已存在的软盘镜像,系统内核将被写入到这里
FD = Flyanx.img
# 硬盘镜像 -- 还没有
# 镜像挂载点,自指定,必须存在于自己的计算机上,没有请自己创建一下
ImgMountPoint = /media/floppyDisk
# 所需要的编译器以及编译参数
ASM = nasm
DASM = objdump
CC = gcc
LD = ld
ASMFlagsOfBoot = -I src/boot/include/
ASMFlagsOfKernel= -f elf -I $(sk)/
CFlags = -c -I$i -fno-builtin -Wall
LDFlags = -Ttext $(ENTRY_POINT) -Map kernel.map
DASMFlags = -D
#============================================================================
# 目标程序以及编译的中间文件
#----------------------------------------------------------------------------
FlyanxBoot = $(tb)/boot.bin $(tb)/loader.bin
FlyanxKernel = $(tk)/kernel.bin
# 内核,只实现基本功能
KernelObjs = $(tk)/kernel.o $(tk)/main.o $(tk)/kernel_386lib.o $(tk)/protect.o \
$(tk)/table.o $(tk)/start.o $(tk)/exception.o $(tk)/misc.o $(tk)/i8259.o \
$(tk)/clock.o $(tk)/process.o $(tk)/ipc_msg.o $(tk)/dump.o $(tk)/keyboard.o
# 内核之外所需要的库,有系统库,也有提供给用户使用的库
LibObjs = $(AnsiObjs) $(StdioObjs) $(I386Objs)
AnsiObjs = $(tl)/ansi/string.o $(tl)/ansi/memcmp.o $(tl)/ansi/stringc.o
StdioObjs = $(tl)/vsprintf.o
I386Objs = $(tl)/i386/ipc/ipc_msg.o
Objs = $(KernelObjs) $(LibObjs)
#============================================================================
# 所有的功能伪命令
#----------------------------------------------------------------------------
.PHONY: nop all image debug run clean realclean
# 默认选项(输入make但没有跟参数,自动执行),提示一下用户我们的makefile有哪些功能
nop:
@echo "all 编译所有文件,生成目标文件(二进制文件,boot.bin)"
@echo "image 生成系统镜像文件"
@echo "debug 打开bochs进行系统的运行和调试"
@echo "run 提示用于如何将系统安装到虚拟机上运行"
@echo "clean 清理所有的中间编译文件"
@echo "realclean 完全清理:清理所有的中间编译文件以及生成的目标文件(二进制文件) "
# 编译所有文件
all: $(FlyanxBoot) $(FlyanxKernel)
@echo "已经生成 Flyanx 内核!"
# 生成系统镜像文件
image: $(FD) $(FlyanxBoot)
dd if=$(tb)/boot.bin of=$(FD) bs=512 count=1 conv=notrunc
sudo mount -o loop $(FD) $(ImgMountPoint)
sudo cp -fv $(tb)/loader.bin $(ImgMountPoint)
sudo cp -fv $(FlyanxKernel) $(ImgMountPoint)
sudo umount $(ImgMountPoint)
# 打开 bochs 进行系统的运行和调试
debug: $(FD)
bochs -q
# 运行Flyanx系统:打印提示信息
run: $(FD)
@qemu-system-i386 -drive file=$(FD),if=floppy
@echo "你还可以使用Vbox等虚拟机挂载Flyanx.img软盘,即可开始运行!"
# 更新映像并运行
uprun: $(FD) image run
# 清理所有的中间编译文件
clean:
-rm -f $(Objs)
# 完全清理:清理所有的中间编译文件以及生成的目标文件(二进制文件)
realclean: clean
-rm -f $(FlyanxBoot) $(FlyanxKernel)
#============================================================================
# 目标文件生成规则
#----------------------------------------------------------------------------
# 软盘镜像文件不存在,应该怎么生成? 生成规则
$(FD):
dd if=/dev/zero of=$(FD) bs=512 count=2880
# 引导程序的生成规则
$(tb)/boot.bin: src/boot/include/fat12hdr.inc
$(tb)/boot.bin: src/boot/boot.asm
$(ASM) $(ASMFlagsOfBoot) -o $@ $<
# 加载程序Loader
$(tb)/loader.bin: src/boot/include/fat12hdr.inc
$(tb)/loader.bin: src/boot/include/load.inc
$(tb)/loader.bin: src/boot/loader.asm
$(ASM) $(ASMFlagsOfBoot) -o $@ $<
# 内核
$(FlyanxKernel): $(Objs)
$(LD) $(LDFlags) -o $(FlyanxKernel) $^
#============================================================================
# 中间Obj文件生成规则
#----------------------------------------------------------------------------
# ======= 内核 =======
$(tk)/kernel.o: $(sk)/kernel.asm
$(ASM) $(ASMFlagsOfKernel) -o $@ $<
$(tk)/main.o: $(sk)/main.c
$(CC) $(CFlags) -o $@ $<
$(tk)/kernel_386lib.o: $(sk)/kernel_386lib.asm
$(ASM) $(ASMFlagsOfKernel) -o $@ $<
$(tk)/start.o: $(sk)/start.c
$(CC) $(CFlags) -o $@ $<
$(tk)/protect.o: $(sk)/protect.c
$(CC) $(CFlags) -o $@ $<
$(tk)/table.o: $(sk)/table.c
$(CC) $(CFlags) -o $@ $<
$(tk)/exception.o: $(sk)/exception.c
$(CC) $(CFlags) -o $@ $<
$(tk)/misc.o: $(sk)/misc.c
$(CC) $(CFlags) -o $@ $<
$(tk)/i8259.o: $(sk)/i8259.c
$(CC) $(CFlags) -o $@ $<
$(tk)/clock.o: $(sk)/clock.c
$(CC) $(CFlags) -o $@ $<
$(tk)/process.o: $(sk)/process.c
$(CC) $(CFlags) -o $@ $<
$(tk)/ipc_msg.o: $(sk)/ipc_msg.c
$(CC) $(CFlags) -o $@ $<
$(tk)/dump.o: $(sk)/dump.c
$(CC) $(CFlags) -o $@ $<
$(tk)/keyboard.o: $(sk)/keyboard.c
$(CC) $(CFlags) -o $@ $<
# ======= 库 =======
$(tl)/ansi/string.o: $(lansi)/string.asm
$(ASM) $(ASMFlagsOfKernel) -o $@ $<
$(tl)/ansi/memcmp.o: $(lansi)/memcmp.c
$(CC) $(CFlags) -o $@ $<
$(tl)/ansi/stringc.o: $(lansi)/stringc.c
$(CC) $(CFlags) -o $@ $<
$(tl)/vsprintf.o: $(lstdio)/vsprintf.c
$(CC) $(CFlags) -o $@ $<
$(tl)/i386/ipc/ipc_msg.o: $(li386)/ipc/ipc_msg.asm
$(ASM) $(ASMFlagsOfKernel) -o $@ $<
#============================================================================
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/qqrtqr/FFlyanx.git
git@gitee.com:qqrtqr/FFlyanx.git
qqrtqr
FFlyanx
FFlyanx
master

搜索帮助

0d507c66 1850385 C8b1a773 1850385