无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 60792|回复: 203
打印 上一主题 下一主题

[分享] 将grub2启动模板封装成efi单文件

  [复制链接]
跳转到指定楼层
1#
发表于 2020-1-18 17:17:05 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hilsonma 于 2020-3-9 12:10 编辑

20200308更新:感谢 nivigo 的分享,让我实现了在Windows下的封装,不需要linux环境封装,参见 windows下的封装

详细讲解请参看以下20200308更新前的内容:

附件是一个封装模板,里面是一个linux脚本build.sh 和一个文件夹build
build文件夹里有2个文件和一个文件夹
这两个文件一个是启动模板使用到的模块清单mod.txt ,一个是预配置文件pre.cfg
文件夹boot下有子文件夹grub,grub文件夹内是我的启动模板的整套文件

efi单文件封装模板.7z (568.45 KB, 下载次数: 1211)
efi单文件封装模板.7z
|
|-- build.sh
|-+ build
|------ pre.cfg
|------ mod.txt
|-----+ boot
|---------+ grub
|-------------- grub.cfg
|-------------+ run
|------------------ run.cfg
|------------------ rundir.cfg
|------------------ runseek.cfg
|-----------------+ ms
|---------------------- boot.sdi
|---------------------- bootmgfw.efi

下载模板解压放到grub2文件夹
将 build/boot/grub 里的内容清空,换上你自己的启动模板的整套文件
按你的启动模板用到的模块来修改模块清单文件 build/mod.txt
    注意有6个模块是本封装模式要用到的:cpio gzio loopback lzopio memdisk newc
    这6个模块不能缺少
进入linux系统,在linux系统中执行build.sh 就会生成 bootx64.efi .


感谢wintoflash,是他的指导和分享的源码让我学会了这个封装方法。
同时感谢江南一根葱,在学习这个方法之前就已经得到他的指点,知道了方向。

--------------------------------------------------------------------------------------------------------------------
如果电脑没有安装linux系统,可以到这里下载porteus绿色免安装版
将porteus文件夹提取放到任一分区根目录,将其中的porteus.cfg放到自动菜单目录,就可以在自动菜单中选择启动

--------------------------------------------------------------------------------------------------------------------
脚本解读:

#!/usr/bin/env sh
#  指明脚本解释器

cd build
#  进入 build目录

find ./boot | cpio -o -H newc | gzip -9 > ./memdisk.cpio.gz
#  搜索boot目录 以newc格式归档 最大压缩 生成压缩文件memdisk.cpio.gz

find ./memdisk.cpio.gz | cpio -o -H newc > ./memdisk.cpio
#  搜索memdisk.cpio.gz文件 以newc格式归档 生成归档文件 memdisk.cpio

cd ..
#  返回上一层目录

modules=$(cat build/mod.txt)
#  将模块清单文件mod.txt 的内容设为变量modules

grub-mkimage -O x86_64-efi -d x86_64-efi -m build/memdisk.cpio -c build/pre.cfg -o bootx64.efi $modules
#  定制efi文件  64位efi格式  使用x86_64-efi中的模块  使用内存盘其中载入build/memdisk.cpio归档的内容
#              使用预配置文件build/pre.cfg  生成文件名为bootx64.efi  包含模块如变量modules的内容

--------------------------------------------------------------------------------------------------------------------
使用内存盘参数定制时会默认-p (memdisk)/boot/grub
由于使用了压缩,内存盘memdisk中是压缩文件,不是直接的配置文件,所以要使用预配置文件进行预配置

pre.cfg预配置文件解读:

loopback loop (memdisk)/memdisk.cpio.gz
# 将内存盘的压缩文件(memdisk)/memdisk.cpio.gz挂载为虚拟盘loop

set root=loop
# 将loop设为root

set prefix=($root)/boot/grub
# 将(loop)/boot/grub设为安装目录(配置目录)
# 这样grub2启动时就会使用(loop)/boot/grub/grub.cfg进行配置
# 所以启动模板的主程序需要命名为grub.cfg

--------------------------------------------------------------------------------------------------------------------
使用举例:
比如wintoflash的run源码,改用这个模板封装

先将build/boot/grub 里的内容清空
再将run源码里run.tar\boot\grub\ 目录下的所有内容提取到 build/boot/grub
    将主程序init.sh改名为grub.cfg
    这个封装模板使用grub.cfg作为主程序名,要不然就要修改预配置文件
将run源码里run.tar\arch\x64\builtin.txt的内容覆盖到 build/mod.txt
    源码中模块清单文件里的模块是齐全的,如果是自己的模板要注意包含上面说的6个模块。
在linux环境下执行build.sh

这样就生成了bootx64.efi,可以直接使用,也可以改回原本的程序名run.efi 在其他efi中调用,按需要加上参数。

点评

大大是高手666666  发表于 2020-3-31 07:12

评分

参与人数 6无忧币 +26 收起 理由
wuxin9712 + 5
szmsys + 5 赞一个!
某些人 + 5 赞一个!
minmax + 1 很给力!
yaojy + 5 很给力!
879792799 + 5 很给力!

查看全部评分

2#
 楼主| 发表于 2020-1-18 18:02:36 | 显示全部楼层

感谢指点。之前不知道,也没有听说过。刚才一搜wsl,看得到相关内容,稍后再学习,
回复

使用道具 举报

3#
 楼主| 发表于 2020-1-18 19:51:50 | 显示全部楼层
wintoflash 发表于 2020-1-18 19:16
说一个问题:

用7z压缩文件,不会保存unix权限信息。

我以前是用winrar的,近两三年才改用7z
tar没有用过,几乎不用linux,近来才接触,真正应用linux还是从现在这个封装开始,因为你给我的方法就是cpio所以才必须用linux,前面你提到wsl 如果我觉得好用可能会采用,不知道wsl 是不是可以使用 tar

我现在还没有找到比较趁手的免安装的linux,porteus 勉强可以用用。

也许要考虑加个硬盘装linux了。

没有装虚拟机,回了这贴重启到porteus 看看能不能象你说的tar ...

点评

后来找到Windows下有同样的打包程序cpio.exe,可以不用linux环境打包,参见31楼。  发表于 2020-3-11 00:08
除了真要编译源码好像不太要用linux,grub2那个也都可以改成批处理的 wls就是在win上运行完整的linux,通过win命令行窗口直接交互,以前编译ipxe很荒便, porteus还是跑在虚拟机上比较方便吧,脱离win切换过去用会  详情 回复 发表于 2020-1-18 20:05
回复

使用道具 举报

4#
 楼主| 发表于 2020-1-18 20:02:45 | 显示全部楼层
本帖最后由 hilsonma 于 2020-1-18 20:06 编辑
wintoflash 发表于 2020-1-18 19:16
说一个问题:

用7z压缩文件,不会保存unix权限信息。

是不是要这样的
单一efi文件封装模板.tar.gz (743.88 KB, 下载次数: 153)


压缩率没有7z的好,是tar本身没有那么高的压缩率还是没有使用合适的参数,稍后再深入学习。
回复

使用道具 举报

5#
 楼主| 发表于 2020-1-18 20:15:29 | 显示全部楼层
江南一根葱 发表于 2020-1-18 20:05
除了真要编译源码好像不太要用linux,grub2那个也都可以改成批处理的
wls就是在win上运行完整的linux, ...

感谢指点,看来还是要装虚拟机啊。我的硬盘都被西都冷占满了
回复

使用道具 举报

6#
 楼主| 发表于 2020-1-19 14:23:58 | 显示全部楼层
本帖最后由 hilsonma 于 2020-1-19 14:52 编辑
jxdeng2017 发表于 2020-1-19 09:30
试了一下,grub-mkimage.exe 在Linux下确实不兼容!!

我用没有问题呀。
用的就是wintoflash的grub2-latest.tar.gz ,win/lin通用的

到这里下载试试。




回复

使用道具 举报

7#
 楼主| 发表于 2020-1-19 16:55:36 | 显示全部楼层
wintoflash 发表于 2020-1-19 16:09
你这是什么操作,莫名其妙。
在Linux下,你应该用系统提供的grub-mkimage。
grub-mkimage.exe当然是给w ...

有没有可能是wsl的问题呢?他用的是wsl,会不会是不带grub-mkimage的

我用的是porteus,在不带-d参数的时候会有 usr/....没有x86_64-efi 这样的提示,加上-d 参数指向grub2定制包中的x86_64-efi就好了,没注意grub-mkimage用的是不是定制包的,按你们这样一说,应该是porteus自带的grub-mkimage

点评

几乎所有的Linux发行版都带grub,不带的,也能通过官方仓库安装grub。 无论是何种情况,非开发者都应当使用系统自带的或者官方仓库的。  详情 回复 发表于 2020-1-19 17:12
回复

使用道具 举报

8#
 楼主| 发表于 2020-3-8 19:32:34 | 显示全部楼层
本帖最后由 hilsonma 于 2020-3-9 11:55 编辑
nivigo 发表于 2020-3-8 16:30
我修改了一下可以在win下定制,自测成功,欢迎大家测试。
用法:
1、把tools.7z解压出来,把tools文件夹 ...

感谢分享。

仿照你的方法,我更新了我的方案,添加grub2模块目录和定制程序,做成完整独立的单文件efi定制包。
grub2定制单文件efi.7z (2.43 MB, 下载次数: 863)

下载附件,解压放到任意文件夹
将 build/boot/grub 里的内容清空,换上自己的启动方案的整套文件
    启动方案的主程序需要命名为grub.cfg
按自己的启动方案用到的模块来修改模块清单文件 build/mod.txt
    注意有6个模块是本封装模式要用到的:cpio gzio loopback lzopio memdisk newc
    这6个模块不能缺少
点击执行脚本 制作单文件efi.cmd 就会生成 bootx64.efi .

如果自己没有现成的启动方案,也可以不清空 build/boot/grub 里的内容,直接对 build/boot/grub/grub.cfg 进行修改
根据修改的内容增删相应的文件,并在模块清单文件 build/mod.txt 中增删相应的模块,然后执行脚本。

点评

这个生产的efi启动win8.1x64.vhdx失败(提示硬件改动)而GrubFMx64.efi或GrubFMMultiArch.iso都可以成功,是什么原因?  发表于 2021-6-26 19:51
我下载了你这个打包生成efi,引导只显示grub>界面,看不到菜单,我不知道自己哪里错了?  详情 回复 发表于 2021-2-16 22:01
hilsonma大,按照此法依样画葫芦,想把之前wintoflash的Run模块中的grub2更新到最新版,打包后测试发现已无法加载iso 、wim文件(仅浏览功能可用),不知问题出在哪?是否还需修改其它内容?  详情 回复 发表于 2020-3-23 13:57
回复

使用道具 举报

9#
 楼主| 发表于 2020-3-25 21:54:59 | 显示全部楼层
2012kwy 发表于 2020-3-23 13:57
hilsonma大,按照此法依样画葫芦,想把之前wintoflash的Run模块中的grub2更新到最新版,打包后测试发现已 ...

Wintoflash的Run,其最新版本是直接引用grub2的grubfm模块来处理文件浏览及打开的,我试了很久,也不知你反馈的问题是什么原因导致,要不你就直接使用他打好包的efi文件吧。

我现在尝试用我的打包方案去打包他的Run也是有问题,现在也找不到原因。

点评

我就是使用您的打包方案去打包他的Run然后失败,可能要请W大亲自操刀才能解决。另请问H大,Wintoflash大的最新Run能否提供下载?谢谢啦  详情 回复 发表于 2020-3-26 13:53
回复

使用道具 举报

10#
 楼主| 发表于 2020-3-26 14:59:04 | 显示全部楼层
2012kwy 发表于 2020-3-26 13:53
我就是使用您的打包方案去打包他的Run然后失败,可能要请W大亲自操刀才能解决。另请问H大,Wintoflash大 ...

这是我之前下载保存的,也不知是不是最新 run.7z (2.18 MB, 下载次数: 284)
回复

使用道具 举报

11#
 楼主| 发表于 2020-4-18 22:11:18 | 显示全部楼层
本帖最后由 hilsonma 于 2020-4-18 22:24 编辑
2000lg 发表于 2020-4-18 20:14
请问Windows怎么才能从efi引导呢?用BOOTice增加一个启动菜单,设置成从bootx64.efi启动,这个我测试成功了 ...

要实现efi引导,需要一个efi系统分区,英文缩写esp,esp里需要存放有效的efi启动文件。

esp一般是FAT分区,你用bootice设置从bootx64.efi启动成功就说明已有esp。esp也有了有效的启动文件bootx64.efi

其他方法也不外是在esp里放置efi文件,然后将这个efi文件添加到uefi启动序列,如要成为默认启动项就要将其移动到uefi启动序列的第一位。

通常uefi启动序列的第一位是esp里的 \efi\boot\bootx64.efi ,如果是这样的话,也可以将其他的efi启动文件改名为bootx64.efi替换到 \efi\boot\ 中,这样就不再需要手工调整uefi启动序列。

windows自带的设置命令是bcdboot. 首先要给esp分配盘符,比如将esp挂载为K盘,windows系统在C盘,那么只需要在cmd窗口输入 bcdboot c:\windows /s K: /f uefi 然后回车,会自动安装efi启动文件和bcd配置文件到esp.

我这个贴中的启动模板是使用grub2引导,也就是将grub2启动文件bootx64.efi替换到esp 的 \efi\boot 中。bootx64.efi内置菜单,菜单第一项引导 windows分区中的 \Windows\Boot\EFI\bootmgf.efi ,由此实现windows的引导。这种引导方式需要配置一个正确的bcd文件放在windows分区的 \Windows\Boot\EFI
回复

使用道具 举报

12#
 楼主| 发表于 2020-4-18 22:37:01 | 显示全部楼层
本帖最后由 hilsonma 于 2020-4-18 23:02 编辑
2000lg 发表于 2020-4-18 22:26
多谢。但是比如我在ESP分区中新建了一个文件夹,然后把自己做的bootx64.efi放到这个文件夹里。想设置从这 ...

bcdboot负责将efi文件和bcd文件放到esp,如果你用了不能启动说明它不处理uefi启动序列。需要用其他工具处理启动序列。这类工具也多,你用的bootice就是其中一个,同一个作者做的另一个软件xorboot也有这个功能,还有diskgenius也有这个功能,其他你要找应该还有,我不一一列举,我自己常用bootice,因其轻便。

我可以肯定的是bcdboot执行efi引导配置成功后,esp里一定会有 \efi\microsoft\boot\bootmgfw.efi ,你可以使用bootice 将这个efi文件手动添加到uefi启动序列并上移到第一位即可实现引导。或者将你的主引导链接到这个efi文件也可以实现引导。


要说原理,就是uefi在检测完成后会将识别到的启动设备添加到nvram的uefi启动序列中,并按顺序逐一尝试引导直至成功或者试完整个序列。
uefi自动识别的就是esp里的 \efi\boot\bootx64.efi ,如果启用了csm,也会识别各存储设备的主引导扇区。

uefi启动序列可以使用bootice之类的工具修改调整。
bcdboot没有这个功能,它只会将bootmgfw.efi和bcd放到esp,如果esp还没有 \efi\boot\bootx64.efi就将bootmgfw.efi复制一份命名为bootx64.efi放到 \efi\boot\

回复

使用道具 举报

13#
 楼主| 发表于 2020-4-19 15:36:14 | 显示全部楼层
2000lg 发表于 2020-4-19 13:29
我现在想实现的功能是,加载自制的bootx64.efi。这个efi会自动加载Slic 2.5用来激活win7,加载完自动进入wi ...

我以前是用chew-wga在部署时激活,不需要每次启动时激活。
回复

使用道具 举报

14#
 楼主| 发表于 2020-4-27 09:03:48 | 显示全部楼层
2000lg 发表于 2020-4-26 23:48
请问楼主、怎么更新为最新的guub2?

将文件夹 x86_64-efi 和文件 grub-mkimage.exe 用新版grub2中的替换。
回复

使用道具 举报

15#
 楼主| 发表于 2020-5-8 13:07:52 | 显示全部楼层
szmsys 发表于 2020-5-8 12:51
楼主好!请教一下,

把 SLIC.BIN 文件放在了 ESP 分区的根目录,想让它加载SLIC.BIN之后,启动 /EFI/Mic ...

source $prefix/run/run.cfg
search -n -s -f /slic.bin
acpi --slic /slic.bin
run /EFI/Microsoft/Boot/bootmgfw.efi

点评

重新制作了一次,手动输入命令,又显示这个  详情 回复 发表于 2020-5-8 15:04
手动输入run命令,提示不存在  详情 回复 发表于 2020-5-8 14:53
谢谢老大!测试失败,咋回事?  详情 回复 发表于 2020-5-8 14:40
回复

使用道具 举报

16#
 楼主| 发表于 2020-5-8 15:06:28 | 显示全部楼层
本帖最后由 hilsonma 于 2020-5-8 15:21 编辑
szmsys 发表于 2020-5-8 14:53
手动输入run命令,提示不存在

$prefix 目录下面需要有run文件夹和相关的3个cfg文件以及ms文件夹等,这样才能使用run命令。

要么就是不使用run命令,如果grub.cfg在esp,那么grub.cfg如下:
acpi --slic /slic.bin
chainloader /EFI/Microsoft/Boot/bootmgfw.efi

如果grub.cfg不在esp,slic.bin和bootmgfw.efi都在esp,那么grub.cfg如下:
search -n -s -f /slic.bin
acpi --slic /slic.bin
chainloader /EFI/Microsoft/Boot/bootmgfw.efi

总之只要分区不同或不确定就使用search来确定分区。
回复

使用道具 举报

17#
 楼主| 发表于 2020-5-8 15:44:31 | 显示全部楼层
szmsys 发表于 2020-5-8 15:40
search -n -s -f /slic.bin
acpi --slic /slic.bin
chainloader /EFI/Microsoft/Boot/bootmgfw.efi

关secureboot,或者添加过secureboot方案。
回复

使用道具 举报

18#
 楼主| 发表于 2020-5-8 17:50:51 | 显示全部楼层
szmsys 发表于 2020-5-8 17:39

chainloader /EFI/Microsoft/Boot/bootmgfw.efi
命令行 启动失败,

那你是在bios平台启动,不是在uefi平台启动,当然不能通过bootmgfw.efi引导了,只能通过bootmgr引导。

grub2是支持uefi/bios双平台的。你需要了解电脑是在以哪个模式启动。

点评

好的,谢谢  详情 回复 发表于 2020-5-8 18:03
回复

使用道具 举报

19#
 楼主| 发表于 2020-5-8 18:36:44 | 显示全部楼层

不过一般bios引导也不会引导到esp的呀,所以你这情况有点奇怪。
还有一个可能就是你有多个esp,bootmgfw.efi跟grub.cfg或slic.bin不在同一个分区。
你可以试一下先确定bootmgfw.efi所在分区再引导
search -n -s -f /EFI/Microsoft/Boot/bootmgfw.efi
chainloader /EFI/Microsoft/Boot/bootmgfw.efi

要知是bios还是uefi平台,可以在grub2命令行下输入set然后看grub_platform变量的值是pc还是efi.

点评

search -n -s -f /EFI/Microsoft/Boot/bootmgfw.efi chainloader /EFI/Microsoft/Boot/bootmgfw.efi boot 谢谢,终于折腾成功了 可是,满屏的字符太难看了,怎么去掉啊?  详情 回复 发表于 2020-5-8 19:01
好的谢谢  详情 回复 发表于 2020-5-8 18:43
回复

使用道具 举报

20#
 楼主| 发表于 2020-5-8 22:46:14 | 显示全部楼层
szmsys 发表于 2020-5-8 19:01
search -n -s -f /EFI/Microsoft/Boot/bootmgfw.efi
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
bo ...

命令行需要输入boot来执行引导,菜单里是不需要的。

嫌文字信息难看可以切换成图形模式,这些文字信息是显示在console的,gfxterm没有这些信息。
即菜单中使用
terminal_output gfxterm
当然定制efi文件时要包含相应的模块。(gfxterm efi_gop efi_uga)

点评

辛苦老大,我试试  详情 回复 发表于 2020-5-9 01:18
回复

使用道具 举报

21#
 楼主| 发表于 2020-5-29 07:12:29 | 显示全部楼层
pseudo 发表于 2020-5-28 22:39
试了一下没成功,不知道是哪里弄错。

我用楼主模板,grub文件夹下只放grub.cfg和grubfmx64.efi(5月14 ...

grubfmx64.efi本身就是这样打包生成的,不建议二次打包。有需要的,可以直接改grubfm源码再打包生成efi.
回复

使用道具 举报

22#
 楼主| 发表于 2020-6-26 19:37:54 | 显示全部楼层
本帖最后由 hilsonma 于 2020-6-27 10:19 编辑
pseudo 发表于 2020-6-26 19:04
请教楼主,pre.cfg里,能用if语句吗?

可以的。

更正:抱歉。我没有试过,因为官方文档有这样的例子,所以我就说是可以的。经wintoflash指正,我进行了测试,没有进入normal 之前使用if是无效的,提示Unkown command

你还是在grub.cfg中做各种设置吧,里面也可以设置使用其他设置档的,包括其他位置上的grub.cfg

在这个封装方案中,主配置是 (loop)/boot/grub/grub.cfg,你可以在主配置中设置有 /EFI/grub/grub.cfg 就使用 /EFI/grub/grub.cfg 等等。
pre.cfg越简单越好。
回复

使用道具 举报

23#
 楼主| 发表于 2020-6-27 00:56:34 | 显示全部楼层
pseudo 发表于 2020-6-26 23:43
也不行。
在grub提示符下试好的if语句放到pre.cfg里就不行,导致菜单出不来了。

你的 grub提示符下 需要是你制作生成的efi文件的命令行,这样你就会知道是不是少了模块
你检查一下是不是你制作efi文件的模块列表中没有 test 模块

pre.cfg 主要是为了解决 root 和 prefix 这两个变量而存在,只要能找到 $prefix/grub.cfg 或者你的主配置文件,其他配置应该放到主配置文件 ($prefix/grub.cfg) 中。grub在执行了 pre.cfg 后会加载 normal 模块并使用主配置文件 $prefix/grub.cfg

所以我把这个文件命名为pre.cfg,中文我把它叫预配置文件。在官方文档中叫嵌入式配置文件。
http://www.gnu.org/software/grub ... edded-configuration

尽量不要在这个文件做文章,这个文件是为了找到你的配置文件而存在。
回复

使用道具 举报

24#
 楼主| 发表于 2020-6-27 07:12:26 | 显示全部楼层
本帖最后由 hilsonma 于 2020-6-27 07:21 编辑
wintoflash 发表于 2020-6-27 06:30
看样子你是想在嵌入grub的配置里面用if。
这不行。
只有进入normal环境后才能用if then function while ...

你的解说是容易理解。
只是官方的说明好象不一样。


因为我没有需求,所以没有特意去试过if。
loopback 是需要loopback模块的,估计在rescue下不能用(我没有试过),但我们可以在嵌入配置中使用。

点评

你试试不就知道了吗。反正我和官方,总有一个错的。 你试试不就知道了吗。rescue 下什么命令都可以使用。 但是 if else while 这些不是命令。  详情 回复 发表于 2020-6-27 08:03
回复

使用道具 举报

25#
 楼主| 发表于 2020-6-27 10:03:34 | 显示全部楼层
wintoflash 发表于 2020-6-27 08:03
你试试不就知道了吗。反正我和官方,总有一个错的。

你试试不就知道了吗。rescue 下什么命令都可以 ...

试了,官方错的。
没进入normal之前使用if 会提示 Unknown command 'if'.
其他命令照执行。
回复

使用道具 举报

26#
 楼主| 发表于 2020-7-5 06:04:42 | 显示全部楼层
wintoflash 发表于 2020-7-4 19:34
欢迎测试新版 wimboot 和 ntboot :http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=41754 ...

已试,OK.
http://bbs.wuyou.net/forum.php?m ... &fromuid=586362
回复

使用道具 举报

27#
 楼主| 发表于 2020-10-3 16:57:17 | 显示全部楼层
本帖最后由 hilsonma 于 2020-10-3 17:14 编辑
yuaie 发表于 2020-10-3 11:18
大神,我想问问启动后那个memdisk和loop的目录能隐藏吗?

本贴模板中我是在runseek自定义命令中实现自动菜单的,想要不显示这类设备,需要修改runseek这个自定义命令。

可以参考wintoflash的grubfm示例,其中有隐藏这类设备的例子。(代码第39行和第43行)
回复

使用道具 举报

28#
 楼主| 发表于 2020-11-17 15:43:16 | 显示全部楼层
tdqk003 发表于 2020-11-17 15:25
大神请问在BISO下也能封装成单文件吗   谢谢大神

bios下不能封装成单文件,因为core.img大小不能超出458240字节。

点评

谢谢大神 请问可以菜单内置吗 谢谢  详情 回复 发表于 2020-11-17 17:01
回复

使用道具 举报

29#
 楼主| 发表于 2020-11-17 21:44:33 | 显示全部楼层
tdqk003 发表于 2020-11-17 17:01
谢谢大神  请问可以菜单内置吗   谢谢

都不能单文件了,就不要考虑菜单内置了吧

如果要菜单内置的,还是用g4d,体积小,功能强劲。
bios平台下,如果为了界面与uefi一致,可以考虑grub2。不然的话bios平台我建议还是用g4d.

如果是uefi平台,我就建议首选grub2。
回复

使用道具 举报

30#
 楼主| 发表于 2020-11-18 18:13:38 | 显示全部楼层
tdqk003 发表于 2020-11-18 15:49
非常感谢大神的回复,我发现江南一根葱大神的作品http://bbs.wuyou.net/forum.php?mod=viewthread&tid=4222 ...

他这个实例可以说是菜单内置,因为看不到独立的菜单文件,也不能编辑。
但是对于引导文件本身来说又不是内置,引导文件是fmldr,这个文件没有菜单或者说是内置菜单只有一条,就是引导一个镜像fm.loop,你看到的菜单应该就是在fm.loop中的。
而fmldr和fm.loop又是打包成一个iso文件了的,你看到的就是这个iso: netpe_multiarch.iso

所以这个实例中,真正的引导应该是ventoy或者是g4d或者是其他的引导程序
这个引导程序引导 netpe_multiarch.iso ,从而引导其中的fmldr,再引导iso中的fm.loop,然后就呈现设置在fm.loop中的菜单。
(init.sh --> netboot.sh --> netpe.lua 前面3个菜单项在netpe.lua中,后面的菜单项在netboot.sh中)

点评

非常感谢大神的详细解答,总与明白了,谢谢  详情 回复 发表于 2020-11-19 11:32
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-4 16:12

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表