无忧启动论坛

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

[教程] 支持UEFI启动的GRUB2 ISO光盘镜像的制作

[复制链接]
跳转到指定楼层
1#
发表于 2017-3-22 17:12:57 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 rkr077 于 2017-3-23 10:10 编辑

昨天试了一晚上才成功,贴出全过程。
工具:UltraISO(用于制作光盘的EFI启动镜像)
命令行工具genisoimage,mkisofs(Linux下用于生成iso文件的的命令行工具,如果是Windows系统,也可以使用其Windows版本或者Linux模拟器cygwin)或oscdimg.exe(Windows ADK包含的iso文件生成工具,注意该文件带有微软的数字签名)
GRUB2的Windows版本(下载地址:alpha.gnu.org/gnu/grub)

1.生成GRUB2的内核文件(core.img)
先使用bootice的GRUB4DOS编辑器编写grub.cfg文件(以UTF-8编码保存),包含以下内容:
search.file /boot/grub/grub.cfg root
set prefix=/boot/grub
normal
然后执行以下命令:
Legacy启动
grub-mkimage -c grub.cfg -p /boot/grub -o core.img -O i386-pc iso9660 udf fat exfat ntfs ext2 part_msdos part_gpt search disk biosdisk normal halt reboot
64位UEFI启动
grub-mkimage -c grub.cfg -p /boot/grub -o bootx64.efi -O x86_64-efi iso9660 udf fat exfat ntfs ext2 part_msdos part_gpt search disk normal halt reboot
32位UEFI启动
grub-mkimage -c grub.cfg -p /boot/grub -o bootia32.efi -O i386-efi iso9660 udf fat exfat ntfs ext2 part_msdos part_gpt search disk normal halt reboot
将GRUB2安装目录下的i386-pc\cdboot.img文件复制到当前目录下,并用copy命令将cdboot.img和core.img文件合并为grub2cd.img:
copy /B cdboot.img+core.img grub2cd.img
2.生成EFI启动镜像
用UltraISO新建一个软盘文件,然后在软盘下面新建以下文件夹:
efi\boot\
再将前面生成的bootx64.efi和bootia32.efi复制到该文件夹。最后保存为cdefi.img。
在Linux下面可以用dd生成软盘镜像,并用mount挂载软盘镜像。
3.用genisoimage命令生成可启动iso文件
在当前文件夹下面新建iso文件夹,并将iso镜像包含的文件复制到iso文件夹里面。在iso文件夹下面新建boot\grub文件夹,并将GRUB2安装目录的以下文件夹复制到iso\boot\grub文件夹下:
i386-pc(用于BIOS启动的GRUB2模块)
x86_64-efi(用于64位UEFI启动的GRUB2模块)
i386-efi(用于32位UEFI启动的GRUB2模块)
然后将grub2cd.img和cdefi.img复制到iso文件夹下面。
最后在Cygwin下面cd到当前目录,执行以下命令生成iso文件:
genisoimage -J -l -allow-lowercase -R -V GRUB2 -joliet-long -no-emul-boot -boot-load-size 4 -boot-info-table -b grub2cd.img -eltorito-alt-boot -b cdefi.img -o grub2.iso iso
genisoimage命令用法参见:
https://linux.die.net/man/1/genisoimage
genisoimage参数简介:-J:使用Joliet;-l:使用长文件名;-allow-lowercase:允许小写文件名;-R:使用Rock Ridge;-V:光盘卷标;-joliet-long:使用Joliet长文件名;-o grub2.iso:生成的ISO文件。

评分

参与人数 2无忧币 +15 收起 理由
wuxin9712 + 5
zhxy9804 + 10 很给力!

查看全部评分

2#
发表于 2017-3-22 17:48:36 | 只看该作者
支持一下!
回复

使用道具 举报

3#
发表于 2017-3-22 21:27:25 | 只看该作者
感觉好复杂,有没有更小白一点的方法
回复

使用道具 举报

4#
发表于 2017-3-22 22:24:10 来自手机 | 只看该作者
意思genisoimage也是必须把启动img放在ISO的明处?
回复

使用道具 举报

5#
发表于 2017-3-23 09:01:26 | 只看该作者
不错!但是genisoimage生成的ISO可以用ultraISO修改吗??
回复

使用道具 举报

6#
发表于 2020-1-21 09:04:44 | 只看该作者
谢谢分享此方法,结合qemu可以模拟引导效果了。不过最后的命令"genisoimage -J -l -allow-lowercase -R -V GRUB2 -joliet-long -no-emul-boot -boot-load-size 4 -boot-info-table -b grub2cd.img -eltorito-alt-boot -b cdefi.img -o grub2.iso iso"
回复

使用道具 举报

7#
发表于 2020-1-21 09:07:19 | 只看该作者
谢谢分享此方法,结合qemu可以模拟出引导效果了。
不过最后这行命令
genisoimage -J -l -allow-lowercase -R -V GRUB2 -joliet-long -no-emul-boot -boot-load-size 4 -boot-info-table -b grub2cd.img -eltorito-alt-boot -b cdefi.img -o grub2.iso iso
是不是应该在cdefi.img后面加上-no-emul-boot参数
我修改成以下命令才能成功生成镜像
genisoimage -J -l -allow-lowercase -R -V GRUB2 -joliet-long -no-emul-boot -boot-load-size 4 -boot-info-table -b $grub2cd_img -eltorito-alt-boot -b $efi_img -no-emul-boot -o $2 $iso
回复

使用道具 举报

8#
发表于 2020-1-22 17:48:44 | 只看该作者
这个还是有点复杂
回复

使用道具 举报

9#
发表于 2020-1-22 21:47:52 | 只看该作者
非常感谢楼主的付出!
回复

使用道具 举报

10#
发表于 2020-3-23 21:30:12 | 只看该作者
这个比memdisk好太多了
回复

使用道具 举报

11#
发表于 2020-3-23 21:31:19 | 只看该作者
这个比memdisk好太多了
回复

使用道具 举报

12#
发表于 2020-3-25 08:13:48 | 只看该作者
这个很详细,谢谢!
回复

使用道具 举报

13#
发表于 2020-4-21 14:27:29 来自手机 | 只看该作者
复杂了。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-19 17:46

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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