From 7f439c5ddbd2ecffc112149d16983975f523052c Mon Sep 17 00:00:00 2001 From: YJwu2023 <119829947+YJwu2023@users.noreply.github.com> Date: Fri, 9 Dec 2022 16:08:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0uefi=E5=90=AF=E5=8A=A8=20(#10?= =?UTF-8?q?1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 增加uefi启动 * 修改脚本 * uefi修改 * 删除错误的注释 * 修正写入磁盘镜像的脚本 * 修改X86_64为x86_64 Co-authored-by: longjin --- Makefile | 20 ++++++++--- tools/arch/x86_64/OVMF.fd | Bin 0 -> 2097152 bytes tools/bootstrap.sh | 7 +++- tools/create_hdd_image.sh | 72 +++++++++++++++++++++++++++++++++++--- tools/run-qemu.sh | 55 +++++++++++++++++++---------- tools/write_disk_image.sh | 54 ++++++++++++++++++++++++---- 6 files changed, 172 insertions(+), 36 deletions(-) create mode 100644 tools/arch/x86_64/OVMF.fd diff --git a/Makefile b/Makefile index fce7d1d9..58d96078 100644 --- a/Makefile +++ b/Makefile @@ -66,12 +66,18 @@ gdb: # 写入磁盘镜像 write_diskimage: - sudo sh -c "cd tools && bash $(ROOT_PATH)/tools/write_disk_image.sh && cd .." + sudo sh -c "cd tools && bash $(ROOT_PATH)/tools/write_disk_image.sh --bios=legacy && cd .." +# 写入磁盘镜像(uefi) +write_diskimage-uefi: + sudo sh -c "cd tools && bash $(ROOT_PATH)/tools/write_disk_image.sh --bios=uefi && cd .." # 不编译,直接启动QEMU qemu: - sh -c "cd tools && bash run-qemu.sh && cd .." - + sh -c "cd tools && bash run-qemu.sh --bios=legacy && cd .." +# 不编译,直接启动QEMU(UEFI) +qemu-uefi: + sh -c "cd tools && bash run-qemu.sh --bios=uefi && cd .." + # 编译并写入磁盘镜像 build: $(MAKE) all -j $(NPROCS) @@ -81,7 +87,13 @@ build: docker: @echo "使用docker构建" sudo bash tools/build_in_docker.sh || exit 1 - + +# uefi方式启动 +run-uefi: + $(MAKE) all -j $(NPROCS) + $(MAKE) write_diskimage-uefi || exit 1 + $(MAKE) qemu-uefi + # 编译并启动QEMU run: $(MAKE) all -j $(NPROCS) diff --git a/tools/arch/x86_64/OVMF.fd b/tools/arch/x86_64/OVMF.fd new file mode 100644 index 0000000000000000000000000000000000000000..4b1cb364afbdfb0a70484f1796cebf39c08c0217 GIT binary patch literal 2097152 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