无从到有,一步一步教你基于grub4dos制作Legacy(非UEFI)引导启动U盘-教学向20240226

目录

前言

准备工作

(a. 硬件

(b. 软件

制作过程

1、制作grub4dos引导分区

十字路口处

2、自定义grub4dos图形界面及引导菜单(添加相应文件即可)

参考文献


前言

grub4dos是一个启动工具,它是基于GNU GRUB Lagecy项目的二次开发。其目前主要由国内的一些大佬维护和更新,算是GRUB项目在中国的分叉。在广大网友的群策群力下,GRUB4DOS的功能不断完善,目前可以说是非常强大了。grub4dos的显著特点是对主板的Legacy引导(或者说BIOS引导)兼容性好,我实际体验下来,确实是非常好用的一个启动工具。

这两天鼓捣显存测试软件,就顺便研究了一下,下面我就站在前人的肩膀上,把我的一些心得和经验分享给大家,手把手带大家制作一个Legacy(非UEFI)引导的启动U盘。

准备工作

(a. 硬件

至少一台可以开机显示的电脑(两台最好,一个用来配置启动U盘,一个用来验证效果)

一个U盘(大于4G的就行,容量按照所需要的功能酌情增减)

(b. 软件

链接先放在这里,可以看说明,用到的时候再来下载。

附件1、Diskgenius软件

DiskGenius – 正式版下载|免费下载

附件2、BOOTICE软件

BOOTICE下载_BOOTICE中文版免费下载1.3.4.0 - 系统之家 (xitongzhijia.net)

附件3、grub4dos0.4.6a压缩包

grub4dos (chenall.net)

懒人版链接:https://pan.baidu.com/s/1gWgQChbBDf6VGBEhHniZwg?pwd=LHB1 
提取码:LHB1 

附件4、启动U盘根目录全部文件---整合而成的压缩包

链接:https://pan.baidu.com/s/1VdBPtoA6xVjEtWsluU3QVA?pwd=LHB1 
提取码:LHB1 

附件5、系统镜像网站

MSDN, 我告诉你 - 做一个安静的工具站 (itellyou.cn)

制作过程

1、制作grub4dos引导分区

(1)第一步,先清空一下U盘。打开【附件1、Diskgenius软件】,选中自己的U盘,快速分区,注意千万别选错了

快速分区-MBR-1个分区-(NTFS/exFAT/FAT32三种格式均可,推荐NTFS)-主分区-4K对齐-确定-此步骤完成

(2)分区成功后会出现新盘符。此时打开【附件2、BOOTICE软件】,进行主引导记录(MBR)的写入。

选择目标磁盘为刚才新分区的U盘,同样,注意千万别选错了

目标磁盘-主引导记录

选中序号3处:GRUB4D0S 0.4.5c/0.4.6a (grldr.mbr)-安装配置

取消勾选序号5处-选中序号6处:0.4.6a-写入磁盘

提示写入成功,程序告诉我们:请将 GRLDR(和menu.lst)两个文件拷贝到某分区根目录。接下来我们就按照程序指示的去做。

去网站下载【附件3、grub4dos0.4.6a压缩包】

选择右侧菜单栏0.4.6a,选择最新版本2023年10月的(2024年的链接打不开,可以在github上下载或者按我的链接)下载即可,旧版本的试过几个,兼容性不好,所以还是下载最新版本的比较好。

下载后解压,文件目录如下:

将其中的 grldr 和sample文件夹中 menu.lst 两个文件拷贝到U盘(我这里是H盘)的根目录下。

其中,grldr文件grub4dos的核心启动文件;menu.lst文件 是一个用来编辑grub4dos图形界面的外部菜单的配置文件,本质上是一个文本文件,用记事本打开即可进行修改。

【制作grub4dos引导分区】这一步骤完成。

十字路口处

懒人看这里:

到这里,如果你着急看看效果、想一步到位的话,可以下载附件4、启动U盘根目录全部文件---整合而成的压缩包】,然后将里面的文件全部解压并复制到U盘的根目录中,直接跳转到步骤(8),插到电脑上验证使用即可。而如果你想一步一步实操,就顺着步骤(3)继续往下耐心看。

======================================================================

求知者看这里:

(3)此时,将U盘插入关机状态下的电脑,然后开机进入BIOS(需要提前打开 Legacy启动/CSM兼容),选择U盘启动项。

我这用的华硕B75M-A主板,Del进入BIOS,F8选择启动项。

回车进入,可以看到已经能够显示grub4dos的图形界面,有很多的菜单选项可供选择,点击这些菜单项本质上是运行一串指令,可以通过选中当前菜单并按e进行查看和编辑。因为这里的示例菜单只是一系列的指令,而这些指令对应的参数或者文件我们并没有添加,所以目前有很多菜单是无法正常使用的。

下面是如何编辑一个菜单项的讲解,不感兴趣可跳过

例如:选中菜单13 halt(关机)

然后按下e,便可以看到它对应的指令是halt

因为这个指令时grub4dos原生支持的,并且不需要接收外部参数或加载外部文件,所以菜单13是可以正常运行的。

在当前界面再次按下e,可对其进行编辑,例如我们将其改为reboot,编辑完成后按下回车,完成编辑,同时回到上一个界面。

此时按下b可以启动屏幕上显示的指令(也就是你刚刚修改后的内容)。可以发现,此时运行的效果就是重启电脑,而非关机了。

注意这样修改不会改变菜单文件menu.lst里的实际内容,修改后的指令仅限当次生效

这个技巧在调试的时候还是很有用的,假如你的菜单选项运行错误,你可以检查menu.lst里面的指令是否写错,如果发现错误,可以即时修改并验证,可以避免反复插拔U盘和修改menu.lst文件,极大的提高调试效率。

现在grub4dos引导分区的框架我们已经搭建好了,接下来需要对其进行自定义的配置。

2、自定义grub4dos图形界面及引导菜单(添加相应文件即可)

(4)现在我们回过头来看menu.lst这个文件具体写了些什么(部分有删减)。图方便,我直接搬运【参考文献1】中的内容,请大家自行阅读学习(狗头)。

示例menu.lst

发行版grub4dos压缩包中grldr文件内置菜单(预置菜单)详解

#==================== 初始化命令组(菜单头)部分=========================

pxe detect
#检测当前PXE环境
configfile
#现在预置菜单具有最高控制权。它将在启动设备上的 menu.lst 之前获得控制。
#在预置菜单的初始化命令组中使用不带参数的 configfile 命令,将把控制权转到启动设备上的menu.lst文件。
#只有第一次启动时执行不带参数的 configfile 命令才会执行默认外置菜单,即根目录的menu.lst文件。
#以后任何情况下再次执行这条不带参数的 configfile 命令,都将失效,什么也不做,直接执行 configfile 之后的命令。
default 0
#将默认菜单项设置为菜单0(即第一个菜单项)
timeout 1
#设置自动执行默认菜单项前等待时间为1秒

#====================菜单项(菜单正文)=================================

title find /menu.lst, /boot/grub/menu.lst, /grub/menu.lst
#设置本项菜单的标题

errorcheck off
#关闭错误检查模式
configfile /boot/grub/menu.lst
#尝试加载/boot/grub/目录下的menu.lst文件
configfile /grub/menu.lst
#尝试加载/grub/目录下的menu.lst文件
if "%@root%"=="(ud)" && calc *0x82A0=*0x82b9&0xff
#如果当前ROOT是(ud),设置当前磁盘为(ud)所在磁盘,比如(fd0)或(hd0)
if "%@root:~1,1%"=="f" && find --set-root --devices=f /menu.lst && configfile /menu.lst
#如果当前ROOT是fd设备,则在所有的fd设备根目录下查找menu.lst文件,找到的话就将该设备设为根,并加载该菜单文件
find --set-root --ignore-floppies --ignore-cd /menu.lst && configfile /menu.lst
#以上尝试均失败时在所有设备的根目录下查找menu.lst文件,忽略软驱和光驱设备,找到的话就将该设备设为根,并加载该菜单文件
find --set-root --ignore-floppies --ignore-cd /boot/grub/menu.lst && configfile /boot/grub/menu.lst
#上一个查找失败时在所有设备的/boot/grub/目录下查找menu.lst文件,忽略软驱和光驱设备,找到的话就将该设备设为根,并加载该菜单文件 
find --set-root --ignore-floppies --ignore-cd /grub/menu.lst && configfile /grub/menu.lst
#上一个查找失败时在所有设备的/grub/目录下查找menu.lst文件,忽略软驱和光驱设备,找到的话就将该设备设为根,并加载该菜单文件 
errorcheck on
#打开错误检查模式 
commandline
#进入命令行模式

title commandline
#设置本项菜单的标题 

commandline
#进入命令行模式

title reboot
#设置本项菜单的标题 

reboot
#重启启动计算机

title halt
#设置本项菜单的标题 

halt
#关闭计算机

菜单文件的代码主要分为两部分,

第一部分是【初始化命令】,是用来初始化图形界面的,类似于C语言变量、数组等的初始化;

第二部分是【菜单命令】,也是我们重点关心的内容。

大概编程思路就是先在【初始化命令】部分将颜色、字体、路径等设置好。

【菜单命令】部分去自定义需要的功能和需要引导的系统,这一部分的格式很容易理解,

title指定图形界面显示的该菜单选项的名称,用于人机交互;

后面跟上该菜单选项需要执行的指令。

用   #   开头可以注释该行。

具体的指令和语法难以在本文讲清楚,大家可以自行翻阅【参考文献1】的第9章进行学习。我这里直接给大家贴一段可以运行win10 PE系统和Ubuntu Live的菜单代码供大家使用。

可用menu.lst

#====================初始化命令组(菜单头)=================================
color blue/green yellow/red white/magenta white/magenta
timeout 600
find --set-root /menu.lst
 
font /grub/fonts.gz
setmenu  --lang=zh
## menu border color
color border=0xEEFFEE
## set vbe mode
graphicsmode -1 640:800 480:600 24:32 || graphicsmode -1 -1 -1 24:32
## loading splashimage
splashimage /boot/grub/splashimage.xpm || splashimage /boot/grub/splashimage.bmp
default /default
 
#启用菜单自动编号,同时编号和菜单键的分隔符使用空格,更多用法可参见其他相关中 在固定位置访问一些内部变量 部分
write 0x8274 0x2001
 
 
#====================菜单项(菜单正文)=================================
 
 
# 设置菜单项标题, \n 后为在菜单底部显示的帮助信息 
# 后面必须跟一行命令,不然黑屏
title made by LHB 2024/02/25  \n test
echo test!!!
echo 按任意键返回主菜单
# 屏幕显示内容暂停10s,便于调试
pause --wait=10
 
# 本项菜单没有启动敏感命令,因此不能通过上方向键或下方向键选中执行,
# 这并非毫无用处,很多高级菜单都使用了这项特性

title 显示设备列表
echo 按任意键返回主菜单
ls dev
pause --wait=10
 
title 新机子运行Win10   PE  64位(不加载USB2.0驱动)
map /0-Win/w1064pe.iso (hd32)
map --hook
chainloader (hd32)
boot
 
title 启动ubuntu-18.04.4 Live
kernel /1-Ubuntu/vmlinuz boot=casper iso-scan/filename=/1-Ubuntu/ubuntu-18.04.4-desktop-amd64.iso locale=zh_CN.UTF-8
initrd /1-Ubuntu/initrd
 
title commandline
#进入命令行模式
commandline
 
title 重启
reboot
 
title 关机
halt
 
#====================菜单项结束(菜单正文)=================================
 
# In the end, font lines for unicode chars in unifont.hex format.
# It should include all unicode chars used in the above menu code.
# Surely normal ASCII chars are not necessary to be included here.
 
5173:10100810082000003FF8010001000100FFFE010002800280044008203018C006
542F:010000801FFC1004100410041FFC10001000100017FC24042404440487FC0404
673A:100011F011101110FD10111031103910551055109110111211121212120E1400
91CD:001000F83F000100FFFE01001FF011101FF011101FF001003FF80100FFFE0000

(5)将U盘根目录menu.lst文件的全部内容替换为上述内容;

(6)添加汉字字体包到U盘根目录,即【附件4、启动U盘根目录全部文件---整合而成的压缩包】中的fonts.gz;

(7)添加你需要的镜像文件(我这里用的是win10 PE和Ubuntu18.04镜像)到U盘根目录,即【附件4、启动U盘根目录全部文件---整合而成的压缩包】中的Win和Ubuntu两个文件夹。

到这里,这个可以运行win10 PE系统和Ubuntu Live的启动U盘就已经制作好了。文件目录如下:

(8)把做好的U盘再次插到电脑上进行验证,选择U盘启动,可以看到菜单选项已经变成了menu.lst文件里我们自定义的内容,如下图。

(9)选择1,可以进入PE系统,成功后如下图。

选择2,可以进入Ubuntu系统,成功后如下图。

完结。

本制作方法优点:

使用极其方便,可自定义。

借用【参考文献3】作者的话:

反复地“制作与还原”很方便、很容易,首先从一个空白U盘做成动U盘很容易,然而突然有一天我又想把这款启动U盘还原成空白U盘使用该怎么办呢?很简单,打开启动U盘,按下Ctrl+A键全部选定启动U盘里的文件,即可还原你一个空白的U盘使用——不用格式化U盘!假如那一天我又心血来潮,又想把它再次重新制作成启动U盘,那又该怎么办呢?同样很简单,打开之前已经搭建好grub4dos引导分区框架的U盘,把里面的文件、资料等腾空,该转移的转移,该删除的删除,使整个U盘空白化,然后再将附件4、启动U盘根目录全部文件---整合而成的压缩包】里面的文件解压到你的已经腾空了的空白U盘里面就行了,无论制作与还原,都不格式化U盘,都不影响U盘的读写速度,确实很简单、方便、快捷。

参考文献

[1].  grub4dos-help-2015-02-09.CHM

链接:https://pan.baidu.com/s/1sp-q0Y916xJNUV8WvF3ofg?pwd=LHB1 
提取码:LHB1 

[2].  grub4dos初级教程_CHM图文版_090411.CHM

链接同上

[3].重大更新—我的G4D0.4.6a的启动U盘 支持BIOS/UEFI双启/移动硬盘 7月10日更新 第30版 - GRUB4DOS - 无忧启动论坛 - Powered by Discuz! (wuyou.net)

[4]使用grub4dos制作多系统启动U盘(win7、ubuntu12.04)_grub4dos引导多系统开机启动教程-CSDN博客

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值