|
本帖最后由 风.轻扬 于 2022-1-6 19:49 编辑
笔记本硬盘GPT+UEFI+GRUB2手动部署过程分享
手动部署,纯粹为了学习了解个中道理,内容仅供参考;若有错误遗漏,敬请包涵;欢迎讨论指教!
感谢无忧启动的大神们的工具及经验分享,包括但不限于Pauly、wintoflash、hilsonma、極限驅動、阿弥陀佛等
手动部署用到的软件和工具有:
wintoflash修改版grub2,https://github.com/a1ive/grub/re ... grub2-latest.tar.gz
bootice,Qemu,Notepad++
特别说明三点:
本帖中的bat、txt文件使用Windows(CRLF)格式;cfg文件使用Unix(LF)格式;编码均使用UTF-8。照搬,可减少bug
为突出自定义项目或关注点,+颜色标示
grub的mod加载,各种文章不尽相同,没有看到权威说明,只能Ctrl+c & Ctrl+v,欢迎专家释疑!
成功引导截图
模板下载
grub_template.part2.rar
(373.83 KB, 下载次数: 207)
grub_template.part1.rar
(1000 KB, 下载次数: 239)
手动部署过程
电脑准备:
进入bios,关闭安全启动
电脑任意位置按与esp分区相同的目录结构建立文件夹,并准备文件
\EFI\BOOT\BOOTX64.EFI(自定义)
----\grub\grub.cfg(自定义)
----------\fonts\unicode.pf2(字体支持中文)
----------\locale\zh_CN.mo(简体中文)
----------\themes(自定义)
----------\x86_64-efi(来自grub软件包)
电脑任意位置建立文件夹,并准备使用grub启动的镜像文件,本例在(hd0,gpt5)
\boot\winpe.iso,puppy
准备文件hd_efi_compile.cfg、hd_efi_build.bat、efi_builtin.txt,复制到grub2-latest解压的目录
hd_efi_compile.cfg,定义grub两个主要参数
search --no-floppy --set=root --file /EFI/grub/grub.cfg
set prefix=($root)/EFI/grub
configfile ($root)/EFI/grub/grub.cfg
efi_builtin.txt,打包进BOOTX64.EFI的模块
all_video blocklist boot cat chain commandline configfile echo efi_gop efi_uga exfat ext2 f2fs fat font gettext gfxmenu gfxterm gfxterm_background gfxterm_menu gzio halt help iso9660 jpeg linux linux16 loopback ls map memdisk newc normal ntboot ntfs part_gpt part_msdos png probe reboot regexp search search_fs_file search_fs_uuid tar terminal terminfo true udf vhd video video_bochs video_cirrus videoinfo wimboot xzio
hd_efi_build.bat,生成BOOTX64.EFI批处理
@echo off
cd /d "%~dp0"
set /p modules= < efi_builtin.txt
grub-mkimage.exe -d x86_64-efi -c hd_efi_compile.cfg -p /EFI/grub -o Bootx64.efi -O x86_64-efi %modules%
进入grub2-latest目录,运行hd_efi_build.bat,生成启动管理器文件BOOTX64.EFI
运行bootice->uefi->启动项管理->修改启动序列,添加、修改启动管理器项EFI GRUB2,指向esp分区的\EFI\BOOT\BOOTX64.EFI,调整顺序到第一项
启动管理器选择窗口,在电脑开机时可以通过F8调出
管理员权限打开cmd访问esp
diskpart
lis disk,显示磁盘列表
sel disk 0,选择磁盘0
lis vol,显示卷列表
sel vol 1,选择esp卷
assign letter=m,为esp卷分配驱动器号m
管理员权限新开cmd窗口,访问esp,备份原文件,复制自定义文件
m:,进入esp
dir,查看确认esp
cd \EFI\boot\,进入boot目录
move Bootx64.efi Bootx64.efi.bak,备份原文件
cd ..\..,回到esp根目录
xcopy /S /W /F \EFI .\EFI,目录复制,将自定义的文件复制到esp
tree /f,查看esp目录结构
exit,关闭cmd窗口
remove letter=m,进入另一个cmd窗口,删除分配的驱动器号
exit,退出diskpart
部署完成的esp目录结构,有修改,供参考
Esp分区,挂载为驱动器M,文件夹PATH列表
│ MHCOVERY.BIN
└─EFI
├─Microsoft
│ ├─Boot
│ └─Recovery
├─Boot
│ Bootx64.efi.bak,原文件备份
│ Bootx64.efi,自定义
├─HUAWEI
├─UpdateCapsule
└─grub,自定义
│ grub.cfg
├─fonts
│ unicode.pf2
├─locale
│ zh_CN.mo
├─themes
│ background.png
│ select_c.png
│ select_e.png
│ select_w.png
│ theme.txt
└─x86_64-efi
grub.cfg参考配置,实际使用请清除所有#注释,请参考附件
###############
##(1)特殊变量##
###############
set check_signatures=no #禁止验证签名
set default=0 #默认启动第一个菜单项
set gfxmode=1152x864,1024x768,auto #按顺序使用分辨率,若失败则自动匹配
set font=${prefix}/fonts/unicode.pf2 #指定字体
set lang=zh_CN #将GRUB2设置为简体中文界面
set locale_dir=${prefix}/locale #指定翻译文件(*.mo)的目录,显示中文必须
set theme=${prefix}/themes/theme.txt #指定启动界面主题
set timeout=5 #设置菜单的超时时间为5秒
set imgpart=(hd0,gpt5) #设置镜像文件存放分区,因人而异
set imgpath=${imgpart}/boot #设置镜像文件目录
###############
##(2)公共模块##
###############
insmod part_gpt
#常见文件系统驱动
insmod fat
insmod ntfs
insmod iso9660
insmod all_video #一次性加载所有可用的视频驱动
insmod gfxterm #图形模式终端
insmod png #背景图片支持
#####################################
##(3)公共命令(必须放在模块和变量之后)##
#####################################
terminal_output gfxterm #激活图形模式的输出终端,以允许使用中文和背景图
loadfont ${font} #加载字体文件
#加载、设置主题
if background_image ${prefix}/themes/background.png; then
set color_normal=white/black
set color_highlight=black/white
else
set menu_color_normal=cyan/blue
set menu_color_highlight=white/blue
fi
#############
##(4)菜单项##
#############
#本地Windows系统
menuentry "Locale System Windows" "/EFI/Microsoft/Boot/bootmgfw.efi" --unrestricted {
if search --no-floppy --file --set $2 ; then
chainloader $2
fi
}
#迷你Linux系统Puppy
if [ -f ${imgpath}/puppy/vmlinuz ] ; then
menuentry "Puppy Linux" --unrestricted {
clear
echo "Starting ... ..."
linux ${imgpath}/puppy/vmlinuz psubdir=/boot/puppy pfix=fsck,trim,copy PMEDIA=atahd
initrd ${imgpath}/puppy/initrd.gz
}
fi
#任意版本Windows pe更名为winpe
if [ -f ${imgpath}/winpe.iso ] ; then
menuentry "Windows PE By Map" --unrestricted {
clear
echo "Starting ... ..."
map -f "${imgpath}/winpe.iso";
}
fi
menuentry "Reboot" --unrestricted { reboot ; }
menuentry "Halt" --unrestricted { halt ; }
最后,再分享一个主题,也许有人喜欢,哈哈!
themes.part1.rar
(1000 KB, 下载次数: 119)
themes.part2.rar
(267.11 KB, 下载次数: 109)
|
评分
-
查看全部评分
|