代码拉取完成,页面将自动刷新
# 编译环境所需要的变量
# 本项目的绝对文件路径
ABS_PATH := $(abspath .)
# 各环境的文件路径
DISK_PATH := ./hdisk
MOUNT_PATH := ./environment
# 各设备的文件路径
hda := $(DISK_PATH)/hda.img
hdb := $(DISK_PATH)/hdb.img
hdc := $(DISK_PATH)/hdc.img
hdd := $(DISK_PATH)/hdd.img
# 各配置文件的路径
SCRIPTS := $(ABS_PATH)/scripts
SCRIPT_GRUB2_CFG := $(SCRIPTS)/grub2/grub.cfg
SCRIPT_BOCHS := $(SCRIPTS)/bochs/bochsrc.cfg
SCRIPT_ASSIST:= $(SCRIPTS)/config/program
SCRIPT_SHELL_ENV := ${SCRIPTS}/shell/env
ABS_BUILD := $(ABS_PATH)/src/build
BOCHS := bochs
BOCHS_OPTIONS := -f $(SCRIPT_BOCHS)
# qume 参数说明:
# 1. -serial dev : 重定向串口到字符设备 “dev”
# 2. -m <size> : 指定虚拟机的内存大小
# 3. -drive : 指定存储设备
# file= : 指定储存设备(虚拟磁盘)
# format= : 指定储存设备格式。虚拟机对 raw 格式的磁盘有着很好的兼容性, 可简单容易地访问它,
# 而且该格式的磁盘占用存储=已被写的扇区数。使用命令“qemu-img info <X.img>”查看
# 磁盘使用情况。
# bus= : IDE 通道,0 为主通道,1 为次通道
# unit= : IDE 设备,0 为主设备,1 为次设备
# media= : 指定存储设备的类型
QEMU := qemu-system-i386
QEMU_OPTIONS_NORMAL := -serial stdio -m 128M \
-drive file=$(hda),format=raw,bus=0,unit=0,media=disk
QEMU_OPTIONS_DEBUG := -s -S
QEMU_OPTIONS_DEV := -device ahci,id=ahci0 \
-drive file=$(hdb),if=none,format=raw,id=sata0 \
-drive file=$(hdc),if=none,format=raw,id=sata1 \
-device ide-hd,drive=sata0,bus=ahci0.0 \
-device ide-hd,drive=sata1,bus=ahci0.1 \
#-drive file=$(hdb),format=raw,bus=0,unit=1,media=disk \
-device pci-bridge,chassis_nr=1 \
-device pci-bridge,chassis_nr=2 \
-device pci-bridge,chassis_nr=3,bus=pci.1 \
-device pci-bridge,chassis_nr=4,bus=pci.2
#===================================================================================
.PHONY: _build assist mount
# 创建环境
# 1. 新建文件夹:environment(挂载 loop 用)、hdisk(存储 hd.img)
# 2. 创建一个主存储设备并分区,且仅有一个主引导分区
# 3. 把虚拟硬盘与 loop 设备绑定,在引导分区安装文件系统 ext2 ,然后挂载分区
# 4. 在主存储设备上安装 GRUB2 ,注意:不是在分区内安装
# 5. 把 grub.cfg 复制到 grub/boot/
build: _build assist
_build:
@sh ${SCRIPT_SHELL_ENV}/env.sh
export ABS_PATH := $(ABS_PATH)
assist:
@echo -e "\033[32mcompiling assist program --start\033[0m"
@$(MAKE) -C $(SCRIPT_ASSIST)
@echo -e "\033[32mcompiling assist program --done\033[0m"
# 由于电脑关机后会把临时挂载的设备信息清除,所以可以使用命令“make mount”重新挂载
mount:
@sh ${SCRIPT_SHELL_ENV}/remount.sh
.PHONY: bclean
# 清除环境
bclean:
@sh ${SCRIPT_SHELL_ENV}/umount.sh
#-----------------------------------------------------------------------------------
.PHONY: cclean readelf
# 删除在 src/build 内的待链接文件以及 kernel.bin
cclean:
-@rm -i -rf $(ABS_BUILD)/*
@echo -e "\033[32mdeleting all the compiled file --done\033[0m"
# 查看 kernel.bin 的 elf 头
#(包含 elf 头信息、节头表、程序头表以及节和段之间的映射关系)
readelf:
@readelf -e $(ABS_BUILD)/kernel.bin
#-----------------------------------------------------------------------------------
.PHONY: run
# 默认使用 bachs 启动
run:
@echo -e "\033[32mlaunching bochs...\033[0m"
@$(BOCHS) $(BOCHS_OPTIONS)
#-----------------------------------------------------------------------------------
.PHONY: qrun qdebug
# 使用 qemu 启动
qrun:
@echo -e "\033[32mlaunching qemu...\033[0m"
@$(QEMU) $(QEMU_OPTIONS_NORMAL) $(QEMU_OPTIONS_DEV)
# 使用 qemu 进行 debug
qdebug:
@echo -e "\033[32mlaunching qemu for debugging with GDB\033[0m"
@$(QEMU) $(QEMU_OPTIONS_NORMAL) $(QEMU_OPTIONS_DEV) $(QEMU_OPTIONS_DEBUG)
#-----------------------------------------------------------------------------------
.PHONY: clean
# 清除所有环境
clean: bclean cclean
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。