增加uefi启动 (#101)

* 增加uefi启动

* 修改脚本

* uefi修改

* 删除错误的注释

* 修正写入磁盘镜像的脚本

* 修改X86_64为x86_64

Co-authored-by: longjin <longjin@RinGoTek.cn>
This commit is contained in:
YJwu2023
2022-12-09 16:08:54 +08:00
committed by GitHub
parent 1a2eaa402f
commit 7f439c5ddb
6 changed files with 172 additions and 36 deletions

View File

@ -1,9 +1,21 @@
###############################################
# 该脚本用于将disk_mount目录下的文件写入到disk.img的第一个分区中
# 并在磁盘镜像中安装grub引导程序
#
# 用法bash write_disk_image.sh --bios legacy/uefi
# 如果之前创建的disk.img是MBR分区表那么请这样运行它bash write_disk_image.sh --bios legacy
# 如果之前创建的disk.img是GPT分区表那么请这样运行它bash write_disk_image.sh --bios uefi
###############################################
ARCH="x86_64"
# 内核映像
root_folder=$(dirname $(pwd))
kernel="${root_folder}/bin/kernel/kernel.elf"
boot_folder="${root_folder}/bin/disk_mount/boot"
mount_folder="${root_folder}/bin/disk_mount"
ARGS=`getopt -o p -l bios: -- "$@"`
eval set -- "${ARGS}"
#echo formatted parameters=[$@]
echo "开始写入磁盘镜像..."
@ -23,7 +35,7 @@ bins[0]=${kernel}
for file in ${bins[*]};do
if [ ! -x $file ]; then
echo "$file 不存在!"
exit 1
exit
fi
done
@ -39,13 +51,28 @@ if [ ${ARCH} == "i386" ] || [ ${ARCH} == "x86_64" ]; then
fi
fi
# 拷贝程序到硬盘
# 判断是否存在硬盘镜像文件,如果不存在,就创建一个(docker模式下由于镜像中缺少qemu-img不会创建)
if [ ! -f "${root_folder}/bin/disk.img" ]; then
echo "创建硬盘镜像文件..."
sudo bash ./create_hdd_image.sh || exit 1
case "$1" in
--bios)
case "$2" in
uefi)
sudo bash ./create_hdd_image.sh -P GPT #GPT分区
;;
legacy)
sudo bash ./create_hdd_image.sh -P MBR #MBR分区
;;
esac
;;
*)
# 默认创建MBR分区
sudo bash ./create_hdd_image.sh -P MBR #MBR分区
;;
esac
fi
# 拷贝程序到硬盘
mkdir -p ${root_folder}/bin/disk_mount
bash mount_virt_disk.sh || exit 1
mkdir -p ${boot_folder}/grub
@ -54,7 +81,6 @@ cp ${kernel} ${root_folder}/bin/disk_mount/boot
mkdir -p ${root_folder}/bin/disk_mount/bin
mkdir -p ${root_folder}/bin/disk_mount/dev
mkdir -p ${root_folder}/bin/disk_mount/proc
cp -r ${root_folder}/bin/user/* ${root_folder}/bin/disk_mount/bin
touch ${root_folder}/bin/disk_mount/dev/keyboard.dev
@ -73,8 +99,22 @@ fi
# rm -rf ${iso_folder}
LOOP_DEVICE=$(lsblk | grep disk_mount|sed 's/.*\(loop[0-9]*\)p1.*/\1/1g'|awk 'END{print $0}')
echo $LOOP_DEVICE
grub-install --target=i386-pc --boot-directory=${root_folder}/bin/disk_mount/boot/ /dev/$LOOP_DEVICE
case "$1" in
--bios)
case "$2" in
uefi) #uefi
grub-install --target=x86_64-efi --efi-directory=${mount_folder} --boot-directory=${boot_folder} --removable
;;
legacy) #传统bios
grub-install --target=i386-pc --boot-directory=${boot_folder} /dev/$LOOP_DEVICE
;;
esac
;;
*)
echo "参数错误"
;;
esac
sync
bash umount_virt_disk.sh