无忧启动论坛

标题: Windows下将GRUB2装入memdisk [打印本页]

作者: ql1307096    时间: 2015-3-1 15:56
标题: Windows下将GRUB2装入memdisk
本帖最后由 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

成品


作者: ql1307096    时间: 2015-3-1 16:01
为什么不用winly?不知道是不是我的操作问题,按照神雕大侠的方法,下载他的源码在linux下编译后,生成的winlyldr和winly.bin都是0字节的,另外在linux下编译grub2,最后得到的文件不能启动,只能在windows下使用cygwin了,也许是我的方法不对,再不就是我电脑的问题了吧{:soso_e100:}
作者: shan    时间: 2015-3-1 18:10
谢谢楼主公布自己心得,新年快乐哈!
作者: shan    时间: 2015-3-1 20:51
楼主啊,CYGWIN 选择包进行安装  应该选择安装那些呢?详细指点一下吧!是在不懂,一头雾水呢。。。
作者: ql1307096    时间: 2015-3-1 21:42
shan 发表于 2015-3-1 20:51
楼主啊,CYGWIN 选择包进行安装  应该选择安装那些呢?详细指点一下吧!是在不懂,一头雾水呢。。。

我是默认状态安装一遍,然后搜索cpio再次安装就有了
作者: ql1307096    时间: 2015-3-1 21:45
shan 发表于 2015-3-1 18:10
谢谢楼主公布自己心得,新年快乐哈!

同乐
作者: devilma    时间: 2015-3-2 10:32
楼主辛苦了,收一个先。。。
作者: zsjyzx    时间: 2015-3-2 20:40
Windows下将GRUB2装入memdisk
作者: xyxb    时间: 2015-3-3 08:37
真的假的,不过还是先谢了

作者: ggmm888    时间: 2015-3-3 10:02
成品不错学习
作者: wuyouman01    时间: 2015-3-3 10:20
谢谢,感谢分享
作者: wdtx    时间: 2015-3-4 15:12
学习学习
作者: ziyi520    时间: 2015-3-7 15:08
成品不错学习
作者: freesoft00    时间: 2015-3-7 16:15
看一下是什么内容。
作者: helloman    时间: 2015-3-7 16:33
先谢谢了,下载学习!
作者: 青青草    时间: 2015-3-8 16:00
看看,怎么样?
作者: 2011mking    时间: 2015-3-9 00:28
感谢分享,收成品。
作者: 2012列兵    时间: 2015-3-10 21:31
学习学习
作者: 易广白    时间: 2015-3-10 21:59
谢谢楼主分享支持!支持!!
作者: cnBoot    时间: 2015-3-21 23:52
对了,事实上可以不用CPIO的,用tar也可以,而且windows下面用tar会方便一点,因为7-zip可以创建tar格式的归档包,而且7-zip要比cygwin小很多,只需要大概几MB的大小,只需要grub-mkimage的时候加上tar这个module就可以了。
作者: ql1307096    时间: 2015-3-22 15:55
cnBoot 发表于 2015-3-21 23:52
对了,事实上可以不用CPIO的,用tar也可以,而且windows下面用tar会方便一点,因为7-zip可以创建tar格式的 ...

不错,谢谢提醒,这个方法更方便,
作者: cnBoot    时间: 2015-3-22 17:25
ql1307096 发表于 2015-3-22 15:55
不错,谢谢提醒,这个方法更方便,

不过好奇怪的是,我查看了GRUB2的源码,发现那个xzio和gzio分别是XZ压缩和GZIP压缩的支持模块,但是我把memdisk用tar打包然后再用XZ压缩之后,却发现读取不了memdisk了,而且grub-mkimage 的时候已经包含了memdisk,tar和xzio三个模块了。不知道是不是方法有问题。。
作者: ql1307096    时间: 2015-3-22 21:14
cnBoot 发表于 2015-3-22 17:25
不过好奇怪的是,我查看了GRUB2的源码,发现那个xzio和gzio分别是XZ压缩和GZIP压缩的支持模块,但是我把m ...

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

。。。。。想起来了。。。我记得有个参数可以设置xz、none等压缩参数。。。多谢提醒。。。
作者: root0    时间: 2015-4-28 21:45
可以 在做个记号呀呀
作者: vxnvxn    时间: 2018-1-26 09:20
提示: 作者被禁止或删除 内容自动屏蔽
作者: tanqida588    时间: 2018-1-28 20:21
教程,高手的话看看有没有地方还可以改进的 {:soso_e147:}
作者: iceman0142    时间: 2018-2-17 21:24
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
作者: chishingchan    时间: 2018-3-3 23:56
谢谢分享!
作者: 2012_by    时间: 2018-3-4 13:33
高手,高高手
作者: wangziqiang    时间: 2018-3-10 14:25
好东西啊,谢谢楼主分享
作者: 2010eflying    时间: 2018-3-31 13:01
谢谢大神共享
作者: 心跳~    时间: 2018-4-10 15:04
1
作者: neity    时间: 2018-4-17 09:35
xiexie,辛苦了
作者: 2010wxky6688    时间: 2018-4-25 13:25
学习了,谢谢分享!
作者: phyuzhoukai    时间: 2018-4-25 21:14
有没有EFI版的呢?
作者: 大悍虎    时间: 2018-4-26 05:50
请个看看谢谢——
作者: zenws    时间: 2018-4-27 09:58
谢谢楼主分享
作者: goodtime    时间: 2018-4-27 16:15
只是为了少点文件吗
作者: bjlbjl    时间: 2018-4-28 09:06
成品不错学习
作者: bjlbjl    时间: 2018-5-7 09:54
谢谢楼主分享
作者: ziluopao    时间: 2018-5-14 13:27
学习一下,方法确实不错
作者: allanhello    时间: 2018-5-17 14:07
好东西 学习学习
作者: BestMiniPE    时间: 2018-5-20 12:29
这个很神奇,要看一下
作者: newswan    时间: 2018-5-21 15:28
看看。。。。。。。。。。。。。
作者: zyk02    时间: 2018-7-9 01:36
向楼主学习,我要加油了。
作者: tim82520    时间: 2018-7-12 23:07
藏内容请回复
作者: pky317    时间: 2018-8-26 11:08
正在折腾,多谢分享!
作者: xing1954    时间: 2018-9-3 05:41
感谢分享...
作者: zhangmi    时间: 2018-9-3 08:35
这个其实也是没有签名的吧?
作者: dongwu    时间: 2018-9-3 17:22
学习
作者: sfx90    时间: 2018-9-16 12:42
kankan ne  
作者: jie_china    时间: 2018-10-26 15:17

楼主辛苦了,收一个先。。。
作者: wongfaye    时间: 2018-11-5 19:21
好像可以启动grub4dos,我看看
作者: veryi    时间: 2018-11-7 19:59
grub调试
作者: xj888xj    时间: 2018-11-11 09:18
下个成品省心点

作者: 2011cwj6958    时间: 2018-11-20 04:15
#在这里快速回复# 谢谢楼主分享
作者: 2011cwj6958    时间: 2018-11-28 01:07
希望更新,成品尽量打包更多模块,至少加入显示日期时间模块
作者: 2011twriter    时间: 2018-12-19 21:43
因为不是谁都玩的转Linux的,所以需要牛人帮忙
作者: sxz7392    时间: 2019-1-7 15:32
楼主辛苦了,收一个先
作者: 2010ljlp    时间: 2019-1-16 13:40
222222222222
作者: lanqingxiao    时间: 2019-2-16 10:10
研究研究,grub2好难玩
作者: gyng    时间: 2019-2-27 13:26
zhegehaoa,woshixingshou,xiexie!

作者: 2010sya    时间: 2019-2-27 13:46
谢谢分享
作者: hfpc168    时间: 2019-3-22 13:15
太好了,找了好久的
作者: kzr588    时间: 2019-3-25 22:52
收藏了。感谢分享……
作者: xybb    时间: 2019-4-30 11:59
GRUB2装入RAMdisk?
作者: mizma2k    时间: 2019-5-3 10:35

作者: 2010ihotte    时间: 2019-5-28 00:16
RE: Windows下将GRUB2装入memdisk
作者: jxdeng2017    时间: 2019-5-28 07:57
想试一下 2.0.4  
作者: oksbsb    时间: 2019-6-11 13:58
大佬!!!!
作者: oksbsb    时间: 2019-6-11 13:58
大佬!!!!
作者: kixg    时间: 2019-7-10 03:35
查看本帖隐藏内容请回
作者: Sho    时间: 2019-9-27 04:03
谢谢楼主分享!!!
作者: beidoou    时间: 2019-9-28 16:46
先收藏,抽空好好学习,太感谢了
作者: litaz    时间: 2019-10-29 06:20
赞一个!
作者: 2011zoujingkang    时间: 2019-10-29 12:47
谢谢楼主
作者: wahrx520zll    时间: 2019-10-29 13:20
谢谢分享
作者: nishijiji1    时间: 2019-11-22 02:47
楼主6666666666666666666666666666
作者: swj9314    时间: 2019-12-18 16:18
fdhfbluivuytcyu
作者: 创新科技2015    时间: 2019-12-21 18:16
很给力!
作者: 从此消失    时间: 2019-12-24 08:41
让 江小白 来看看帖子里藏了啥好东西~~~
作者: 2012janson    时间: 2020-2-28 17:37
楼主辛苦了,收一个先。。。

作者: cbl    时间: 2020-2-28 18:17

作者: yang77    时间: 2020-3-5 22:48
来看看旧时光
作者: bwchame    时间: 2020-3-7 09:23
学习了。
作者: 2012dghdh    时间: 2020-3-13 00:39
赞一个弄了好一会还没成功。
作者: hilsonma    时间: 2020-3-13 04:27
2012dghdh 发表于 2020-3-13 00:39
赞一个弄了好一会还没成功。

可以不用memdisk,直接把模块文件集成到引导程序中去。这样只有一个引导文件bootx64.efi和一个配置文件grub.cfg。
参考 http://bbs.wuyou.net/forum.php?m ... &fromuid=586362
本贴说的是bios启动的,那就集成一个引导文件g2ldr 和一个配置文件grub.cfg。

如果配置文件比较复杂,甚至还有主题等内容,那再使用memdisk,把这些配置文件等都集成到memdisk中,再生成一个单一的引导文件
参考 http://bbs.wuyou.net/forum.php?m ... &fromuid=586362
同样,bios平台就集成一个单一的g2ldr。

作者: wintoflash    时间: 2020-3-13 09:11
hilsonma 发表于 2020-3-13 04:27
可以不用memdisk,直接把模块文件集成到引导程序中去。这样只有一个引导文件bootx64.efi和一个配置文件gr ...

BIOS 下一般不能这样弄。不信你可以试试。
作者: hilsonma    时间: 2020-3-13 10:54
wintoflash 发表于 2020-3-13 09:11
BIOS 下一般不能这样弄。不信你可以试试。

我还真试了
grub-mkimage: error: core image is too big (0xec53b > 0x78000).

确实不行,我太想当然了。应该是bios下的core.img有大小限制吧。
作者: wintoflash    时间: 2020-3-13 11:04
hilsonma 发表于 2020-3-13 10:54
我还真试了 :
grub-mkimage: error: core image is too big (0xec53b > 0x78000).

是的
作者: Climbing    时间: 2020-3-19 17:19
做得不错,点赞!
作者: book0909    时间: 2020-3-25 16:37
memdisk对于小内存来说太慢了,有解决办法吗?
作者: qj_tzy    时间: 2020-4-2 22:23
学习下,谢谢分享!
作者: lhpxs    时间: 2020-6-12 10:59
又遇见好东西了,谢谢分享
作者: njenje    时间: 2020-8-5 19:59
楼主辛苦了,收一个
作者: dddlywb3    时间: 2020-9-14 15:03
楼主,高!有没有新的发布?
作者: minmax    时间: 2020-9-23 14:22
TRYIT

作者: sman19999    时间: 2020-12-2 03:07
Windows下将GRUB2装入memdisk
作者: 2011cwj6958    时间: 2020-12-2 06:47
本帖最后由 2011cwj6958 于 2020-12-2 11:38 编辑

弄的太复杂了,完全可以Windows下定制的 几条命令直接写批处理。




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3