代码拉取完成,页面将自动刷新
同步操作将从 Calon/EleOS 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
# 编译环境所需要的变量
# 本项目的绝对文件路径
ABS_PATH := $(abspath .)
# 各环境的文件路径
DISK_PATH := ./hdisk
MOUNT_PATH := ./environment
GRUB2_BOOT_PATH := $(MOUNT_PATH)/boot
GRUB2_GURB_PATH :=
ASSIST_PROG_PATH := comp
CONFIG_LOG_PATH := config.log
# 各设备的文件路径
IDE0DISK0 := $(DISK_PATH)/ide0primary.img
IDE0DISK1 := $(DISK_PATH)/ide0secondary.img
IDE1DISk0 := $(DISK_PATH)/ide1primary.img
IDE1DISK1 := $(DISK_PATH)/ide1secondary.img
DEV_LOOP :=
# 各配置文件的路径
SCRIPTS := $(ABS_PATH)/scripts
SCRIPT_GRUB2 := $(SCRIPTS)/grub2/grub.cfg
SCRIPT_BOCHS := $(SCRIPTS)/bochs/bochsrc.cfg
SCRIPT_LD := $(SCRIPTS)/ld/kernel.ld
SCRIPT_MAKE := $(SCRIPTS)/mk/global.mk
SCRIPT_ASSIST:= $(SCRIPTS)/config/program
SCRIPT_IDESH := $(SCRIPTS)/config/ide.sh
# 编译内核所需要的变量
SRC := $(ABS_PATH)/src
ABS_INCLUDE := $(SRC)/include
ABS_BUILD := $(SRC)/build
# grub_install 命令
GRUB_INSTALL :=
GRUB_CHECK := $(shell if test -n "$(find /usr/sbin/ -name grub2-install)";then echo "True";fi)
ifdef GRUB_CHECK
GRUB_INSTALL := grub2-install
GRUB2_GURB_PATH := $(GRUB2_BOOT_PATH)/grub2
else
GRUB_INSTALL := grub-install
GRUB2_GURB_PATH := $(GRUB2_BOOT_PATH)/grub
endif
SPECIFY := 1
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=$(IDE0DISK0),format=raw,bus=0,unit=0,media=disk \
-drive file=$(IDE0DISK1),format=raw,bus=0,unit=1,media=disk
QEMU_OPTIONS_DEBUG := -s -S
QEMU_OPTIONS_DEV := -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
CHOSEN_OTHER_IDE := ide0secondary
.PHONY: ide0primary ide0secondary ide1primary ide1secondary
ide0primary:
@dd if=/dev/zero of=$(IDE0DISK0) bs=1M count=128
ide0secondary:
@dd if=/dev/zero of=$(IDE0DISK1) bs=1M count=32
ide1primary:
@dd if=/dev/zero of=$(IDE1DISk0) bs=1M count=32
ide1secondary:
@dd if=/dev/zero of=$(IDE1DISK1) bs=1M count=32
export ABS_PATH := $(ABS_PATH)
export INC := $(ABS_INCLUDE)
export BUILD := $(ABS_BUILD)
export SUB_MAKE := $(SCRIPT_MAKE)
export LD_SCRIPT := $(SCRIPT_LD)
# 编译环境
# 1.获取一个空闲的 loop 设备
# 2.新建文件夹:environment(挂载 loop 用)、hdisk(存储 hd.img)
# 3.新建一个映像文件(虚拟硬盘 512 MB)
# 4.把虚拟硬盘设置为 loop 设备、设置文件系统ext2、最后挂载
# 5.在虚拟硬盘新建文件夹 boot
# 6.在虚拟硬盘安装 GRUB2
.PHONY: _build setup_master_disk mount assist
build: _build assist
@echo "\033[32mcompiling the environment --done\033[0m"
_build: setup_master_disk mount $(CHOSEN_OTHER_IDE)
@mkdir $(GRUB2_BOOT_PATH);\
$(GRUB_INSTALL) --boot-directory=$(GRUB2_BOOT_PATH) --force --allow-floppy $(DEV_LOOP);\
cp $(SCRIPT_GRUB2) $(GRUB2_GURB_PATH);\
echo "compiling the environment --done"
.PHONY: welcome make_hdiskdir make_partTable_and_ext2
setup_master_disk: welcome make_hdiskdir ide0primary make_ext2
welcome:
@echo "\033[32mstarting build...\033[0m"
make_hdiskdir:
-@mkdir $(MOUNT_PATH) $(DISK_PATH)
make_ext2:
@mkfs.ext2 -q $(IDE0DISK0)
# 由于电脑关机后会把临时挂载的设备信息清除,所以可以使用命令“make mount”重新挂载
mount:
$(eval DEV_LOOP := $(shell losetup -f))
@echo "loop device: $(DEV_LOOP)"
@mount -o loop $(IDE0DISK0) $(MOUNT_PATH)
assist:
@$(MAKE) -C $(SCRIPT_ASSIST)
# 清除环境
# umount 参数 -d :若挂臷了回环设备,也释放该回环设备
.PHONY: bclean
bclean:
@umount -d $(MOUNT_PATH);\
rm -rf $(DISK_PATH)/* $(MOUNT_PATH)/*
@rm $(ASSIST_PROG_PATH) $(CONFIG_LOG_PATH)
@echo "deleting the environment --done"
.PHONY: comp comp-t __comp example
comp: __comp
comp-t: example __comp
example:
$(eval export EXAMPLE := 1)
$(eval export EXP_ROUTINE := $(ABS_PATH)/example)
$(eval export SPECIFY := $(SPECIFY))
# 编译 kernel.bin
__comp:
@echo "start to compile..."
-@mkdir $(ABS_BUILD);\
$(MAKE) -C $(SRC);\
cp $(ABS_BUILD)/kernel.bin $(GRUB2_BOOT_PATH)
@echo "compiling --done"
# 查看 kernel.bin 的 elf 头
#(包含 elf 头信息、节头表、程序头表以及节和段之间的映射关系)
.PHONY: readelf
readelf:
@readelf -e $(ABS_BUILD)/kernel.bin
# 删除在 src/build 内的待链接文件以及 kernel.bin
.PHONY: cclean
cclean:
-@rm -rf $(ABS_BUILD)/*
@echo "deleting all the compiled file --done"
# 默认使用 bachs 启动
.PHONY: run qrun
run:
@echo "launching bochs..."
@$(BOCHS) $(BOCHS_OPTIONS)
# 使用 qemu 启动
qrun:
@echo "launching qemu..."
@$(QEMU) $(QEMU_OPTIONS_NORMAL) $(QEMU_OPTIONS_DEV)
# 使用 qemu 进行 debug
.PHONY: qdebug
qdebug:
@echo "launching qemu for debugging with GDB"
@$(QEMU) $(QEMU_OPTIONS_NORMAL) $(QEMU_OPTIONS_DEV) $(QEMU_OPTIONS_DEBUG)
# 清除所有环境
.PHONY: clean
clean: bclean cclean
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。