无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 56135|回复: 111
打印 上一主题 下一主题

[原创] Windows下将GRUB2装入memdisk

    [复制链接]
跳转到指定楼层
1#
发表于 2015-3-1 15:56:22 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ql1307096 于 2021-8-9 12:04 编辑

多年前发的个小教程,有很多不足。感谢论坛的朋友的反馈。后来我简化了整个过程,使用win版的cpio,一条批处理全部搞定,分享给有需要的朋友们
  1. cd /d %~dp0
  2. mkdir out\boot\grub\x86_64-efi
  3. xcopy /s /e /y /i x86_64-efi out\boot\grub\x86_64-efi
  4. mkdir out\boot\grub\locale
  5. copy /y locale\zh_CN\grub.mo out\boot\grub\locale\zh_CN.mo
  6. copy /y grub.cfg out\boot\grub\grub.cfg

  7. mkdir out\boot\grub\fonts
  8. copy /y unicode.pf2.gz  out\boot\grub\fonts
  9. copy /y cpio.exe out
  10. copy /y find.exe out
  11. copy /y libiconv2.dll out
  12. copy /y libintl3.dll out
  13. copy /y grub-bootstrap.cfg out
  14. ::copy /y background.png out\boot\grub\

  15. cd out
  16. find ./boot -print|cpio -o -H newc > ./memdisk.cpio
  17. cd ..
  18. grub-mkimage.exe -m out\memdisk.cpio -d out\boot\grub\x86_64-efi -c out\grub-bootstrap.cfg -p "(memdisk)/boot/grub" -O x86_64-efi -o .\out\bootx64.efi -v newc iso9660 part_msdos part_gpt ext2 cpio memdisk blocklist minicmd loopback fat ntfs gfxterm reboot configfile normal echo test gfxmenu gfxterm search gzio
  19. @pause
  20. move .\out\bootx64.efi .\
  21. rmdir /s /q out
复制代码

所有需要的文件都打包上传到网盘。欢迎吐槽。
https://ql1307096.lanzoui.com/i41B0segu1e
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
在论坛几位前辈的帮助下,成功将grub2装入到memdisk中,这样不用带着一大堆的模块,整个grub2就几个文件。发布一下方法,供新手参考吧,老手的话看看能否提出更好的意见。。
1,首先下载grub2的Windows包
http://alpha.gnu.org/gnu/grub/grub-2.02~beta2-for-windows.zip
2,下载并安装Cygwin(在windows下使用linux命令,在本文中主要为了打包cpio文件),下载并安装cygwin需要点时间,可以搜索下载离线安装包,在下载或者安装的过程中可以干些其他的事情,,
3,解压grub2的windows包,随便解压到哪里都行,我解压到D盘根目录下,进入到解压后的i386-pc目录里,这里有grub2的全部模块,如果全部安装到memdisk中,最后编译的时候会提示内核太大而失败,因此只能做适当的精简,保留必须的,文件太多了,一个个的复制实在是麻烦,我写了个批处理,放到i386-pc目录运行一下就行,运行成功后会在i386-pc目录生成memdisk.cpio\boot\grub\i386-pc新的目录结构,memdisk.cpio\boot\grub\i386-pc下面则是精简后的模块了。现在的目录应该是这样的:d:\grub-2.02~beta2-for-windows\i386-pc\memdisk.cpio\boot\grub\i386-pc
4,下面的几步操作都在memdisk.cpio目录下进行的,在boot\grub下新建一文本文件,改名为grub.cfg,输入以下内容,保存为utf-8无bom格式编码,
set locale_dir=${prefix}/locale
if search -s -f /grub2/grub.cfg; then
        search --no-floppy -f --set=root  /grub2/grub.cfg
        configfile /grub2/grub.cfg
  else
        loadfont $prefix/font.pf2
        menuentry "" {
        true
        }
        menuentry "===cat (memdisk)/bot/grub/grub.cfg===" {
        true
        }
fi

5,在boot\grub下建立目录locale,将d:\grub-2.02~beta2-for-windows\locale\zh_CN\grub.mo改名为zh_CN.mo并复制到刚刚新建的locale目录下,将附件中的font.pf2复制到boot\grub下,现在文件基本上都准备好了memdisk目录下的文件如下:

6,现在cygwin应该安装好了吧?运行一次看看,@前面的就是用户名了,

将memdisk目录下的整个boot目录剪切到cygwin安装目录下的home/用户名/目录下,在cygwin中运行命令:find boot -print|cpio -o -H newc > /memdisk.cpio,如果无错误的话应该显示如下图:生成的文件memdisk.cpio在cygwin的安装目录下,

7,移动memdisk.cpio到d:\grub-2.02~beta2-for-windows下,运行cmd,切换到d:\grub-2.02~beta2-for-windows目录,运行:
grub-mkimage.exe -O i386-pc -d i386-pc -p (memdisk)/boot/grub -o core.img -m memdisk.cpio -v biosdisk newc blocklist fat iso9660 pxe reiserfs memdisk cpio minicmd part_msdos ext2 ntfs loopback gfxmenu gfxterm reboot normal search。生成的core.img大约300多K,将core.img移动到d:\grub-2.02~beta2-for-windows\i386-pc下,命令行下运行copy /b lnxboot.img+core.img g2ldr

8,完成了,g2ldr可以用Grub4dos的kernel启动,应该也可以用g2ldr.mbr启动,这个我没有试过,最后看看启动的画面




本文所提及的附件 附件.7z (209.18 KB, 下载次数: 333)

感谢论坛两位前辈“极限驱动”和“niumao”的热心解答

绝对的新手教程,高手的话看看有没有地方还可以改进的 {:soso_e147:}

另外附上我做的成品
attach]210751[/attach] grub2.part2.rar (124.14 KB, 下载次数: 243)

grub2.part1.rar

1 MB, 下载次数: 286, 下载积分: 无忧币 -2

成品

点评

grub-2.02~beta2-for-windows.zip 本来就是直接在windows命令行中使用的东西为什么要多此一举安装个Cygwin运行环境?  发表于 2016-4-17 23:30
既然在linux下已经完全能实现了,何必多此一举在windows再安装伪环境再折腾一次呢?如果说网友只需要成品,你这就是残缺的本成品,如果网友需要掌握过程,就不如在linux下直接操作.  发表于 2015-4-8 12:48
http://www.gaoxuey.com/ 古代穿越小说  发表于 2015-3-5 05:48
http://www.nbymzx.com/Show/5e3pUWEp0WtT/ 妃子谋:王爷采花我采草  发表于 2015-3-3 21:51

评分

参与人数 2无忧币 +10 收起 理由
beidoou + 5 很给力!
shan + 5 赞一个!

查看全部评分

2#
 楼主| 发表于 2015-3-1 16:01:04 | 只看该作者
为什么不用winly?不知道是不是我的操作问题,按照神雕大侠的方法,下载他的源码在linux下编译后,生成的winlyldr和winly.bin都是0字节的,另外在linux下编译grub2,最后得到的文件不能启动,只能在windows下使用cygwin了,也许是我的方法不对,再不就是我电脑的问题了吧{:soso_e100:}
回复

使用道具 举报

3#
发表于 2015-3-1 18:10:56 | 只看该作者
谢谢楼主公布自己心得,新年快乐哈!

点评

同乐  详情 回复 发表于 2015-3-1 21:45
回复

使用道具 举报

4#
发表于 2015-3-1 20:51:54 | 只看该作者
楼主啊,CYGWIN 选择包进行安装  应该选择安装那些呢?详细指点一下吧!是在不懂,一头雾水呢。。。

点评

我是默认状态安装一遍,然后搜索cpio再次安装就有了  详情 回复 发表于 2015-3-1 21:42
回复

使用道具 举报

5#
 楼主| 发表于 2015-3-1 21:42:54 | 只看该作者
shan 发表于 2015-3-1 20:51
楼主啊,CYGWIN 选择包进行安装  应该选择安装那些呢?详细指点一下吧!是在不懂,一头雾水呢。。。

我是默认状态安装一遍,然后搜索cpio再次安装就有了
回复

使用道具 举报

6#
 楼主| 发表于 2015-3-1 21:45:44 | 只看该作者
shan 发表于 2015-3-1 18:10
谢谢楼主公布自己心得,新年快乐哈!

同乐
回复

使用道具 举报

7#
发表于 2015-3-2 10:32:18 | 只看该作者
楼主辛苦了,收一个先。。。
回复

使用道具 举报

8#
发表于 2015-3-2 20:40:20 | 只看该作者
Windows下将GRUB2装入memdisk
回复

使用道具 举报

9#
发表于 2015-3-3 08:37:43 | 只看该作者
真的假的,不过还是先谢了
回复

使用道具 举报

10#
发表于 2015-3-3 10:02:42 | 只看该作者
成品不错学习
回复

使用道具 举报

11#
发表于 2015-3-3 10:20:15 | 只看该作者
谢谢,感谢分享
回复

使用道具 举报

12#
发表于 2015-3-4 15:12:30 | 只看该作者
学习学习
回复

使用道具 举报

13#
发表于 2015-3-7 15:08:21 | 只看该作者
成品不错学习
回复

使用道具 举报

14#
发表于 2015-3-7 16:15:25 | 只看该作者
看一下是什么内容。
回复

使用道具 举报

15#
发表于 2015-3-7 16:33:51 | 只看该作者
先谢谢了,下载学习!
回复

使用道具 举报

16#
发表于 2015-3-8 16:00:33 | 只看该作者
看看,怎么样?
回复

使用道具 举报

17#
发表于 2015-3-9 00:28:33 | 只看该作者
感谢分享,收成品。
回复

使用道具 举报

18#
发表于 2015-3-10 21:31:14 | 只看该作者
学习学习
回复

使用道具 举报

19#
发表于 2015-3-10 21:59:55 | 只看该作者
谢谢楼主分享支持!支持!!
回复

使用道具 举报

20#
发表于 2015-3-21 23:52:46 | 只看该作者
对了,事实上可以不用CPIO的,用tar也可以,而且windows下面用tar会方便一点,因为7-zip可以创建tar格式的归档包,而且7-zip要比cygwin小很多,只需要大概几MB的大小,只需要grub-mkimage的时候加上tar这个module就可以了。

点评

不错,谢谢提醒,这个方法更方便,  详情 回复 发表于 2015-3-22 15:55
回复

使用道具 举报

21#
 楼主| 发表于 2015-3-22 15:55:26 | 只看该作者
cnBoot 发表于 2015-3-21 23:52
对了,事实上可以不用CPIO的,用tar也可以,而且windows下面用tar会方便一点,因为7-zip可以创建tar格式的 ...

不错,谢谢提醒,这个方法更方便,

点评

不过好奇怪的是,我查看了GRUB2的源码,发现那个xzio和gzio分别是XZ压缩和GZIP压缩的支持模块,但是我把memdisk用tar打包然后再用XZ压缩之后,却发现读取不了memdisk了,而且grub-mkimage 的时候已经包含了memdisk,  详情 回复 发表于 2015-3-22 17:25
回复

使用道具 举报

22#
发表于 2015-3-22 17:25:47 | 只看该作者
ql1307096 发表于 2015-3-22 15:55
不错,谢谢提醒,这个方法更方便,

不过好奇怪的是,我查看了GRUB2的源码,发现那个xzio和gzio分别是XZ压缩和GZIP压缩的支持模块,但是我把memdisk用tar打包然后再用XZ压缩之后,却发现读取不了memdisk了,而且grub-mkimage 的时候已经包含了memdisk,tar和xzio三个模块了。不知道是不是方法有问题。。

点评

直接打包tar不要再压缩了,grub-mkimage编译的时候自动会压缩的,  详情 回复 发表于 2015-3-22 21:14
回复

使用道具 举报

23#
 楼主| 发表于 2015-3-22 21:14:40 | 只看该作者
cnBoot 发表于 2015-3-22 17:25
不过好奇怪的是,我查看了GRUB2的源码,发现那个xzio和gzio分别是XZ压缩和GZIP压缩的支持模块,但是我把m ...

直接打包tar不要再压缩了,grub-mkimage编译的时候自动会压缩的,

点评

。。。。。想起来了。。。我记得有个参数可以设置xz、none等压缩参数。。。多谢提醒。。。  详情 回复 发表于 2015-3-22 23:58
回复

使用道具 举报

24#
发表于 2015-3-22 23:58:18 | 只看该作者
ql1307096 发表于 2015-3-22 21:14
直接打包tar不要再压缩了,grub-mkimage编译的时候自动会压缩的,

。。。。。想起来了。。。我记得有个参数可以设置xz、none等压缩参数。。。多谢提醒。。。
回复

使用道具 举报

25#
发表于 2015-4-28 21:45:00 | 只看该作者
可以 在做个记号呀呀
回复

使用道具 举报

26#
发表于 2018-1-26 09:20:26 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

27#
发表于 2018-1-28 20:21:37 | 只看该作者
教程,高手的话看看有没有地方还可以改进的 {:soso_e147:}
回复

使用道具 举报

28#
发表于 2018-2-17 21:24:57 | 只看该作者
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
回复

使用道具 举报

29#
发表于 2018-3-3 23:56:46 | 只看该作者
谢谢分享!
回复

使用道具 举报

30#
发表于 2018-3-4 13:33:28 | 只看该作者
高手,高高手
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-29 10:14

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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