代码拉取完成,页面将自动刷新
同步操作将从 辰湖飞彦/FFlyanx 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#
# 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 $@ $<
#============================================================================
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。