自由狼-台风 发表于 2010-6-20 12:27:09

[好像解决了]用Grub Legacy/Grub4DOS制作可引导的ISO。

好像解决了

感谢[聚焦深空]@的提醒和[糊涂]@的支持。

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

我试图自行制做一份可引导的ISO,引导器用Grub Legacy/Grub4DOS。

问题用蓝色标注:

[*]大家谁有在Linux上用Grub做ISO引导的经验?用的是Grub Legacy还是Grub4DOS?

[*]如果用Grub Legacy,需要用到“stage2_eltorito”文件。到哪里去弄这个文件?还是用什么办法“生成”一个吗?
[*]我目前没有弄到“stage2_eltorito”文件,所以用的是Grub4DOS。

[*]我准备把“grub4dos_ROOT”作为ISO源内容根目录,此目录结构如下:
grub4dos_ROOT
|-contents/ //用于存放各种内容
|-grldr //取自grub4dos-0.4.4-2009-06-20.zip
`-menu.lst

menu.lst内容如下:default=0
timeout=10
title Main Boot Record
        rootnoverify (hd0)
        chainloader +1压制ISO的命令和提示如下:# mkisofs -J -b grldr -no-emul-boot -boot-load-size 4 -o grub4dos_ROOT.iso grub4dos_ROOT
Warning: creating filesystem with Joliet extensions but without Rock Ridge
         extensions. It is highly recommended to add Rock Ridge.
I: -input-charset not specified, using gb18030 (detected in locale settings)
Size of boot image is 4 sectors -> No emulation
Total translation table size: 2048
Total rockridge attributes bytes: 0
Total directory bytes: 2048
Path table size(bytes): 26
Max brk space used 0
300 extents written (0 MB)
#生成的ISO文件可以mount,结构如下:
mnt/ //grub4dos_ROOT.iso
|-contents/ //用于存放各种内容
|-boot.catalog
|-grldr //取自grub4dos-0.4.4-2009-06-20.zip
`-menu.lst
[*]ISO里生成一个2KB的boot.catalog,这个文件是什么?有什么用?
[*]在VirtualBox虚拟机里用这张ISO引导,BIOS画面过后只有一个光标停留在屏幕左上角,其他地方黑屏,可能的原因有哪些?应该怎样调整?




继承自 http://www.linuxfans.org/bbs/thread-192271-1-1.html 。

[ 本帖最后由 自由狼-台风 于 2010-6-20 20:02 编辑 ]

自由狼-台风 发表于 2010-6-20 13:40:28

线索:
[聚焦深空]@说:
看看文档
http://www.linuxsir.org/bbs/post2086203-3.html
http://www.gnu.org/software/grub/manual/html_node/Making-a-GRUB-bootable-CD_002dROM.html#Making-a-GRUB-bootable-CD_002dROM
但系统中没有“/usr/lib/grub/i386-pc/stage2_eltorito”。

[ 本帖最后由 自由狼-台风 于 2010-6-20 13:46 编辑 ]

自由狼-台风 发表于 2010-6-20 15:54:36

一翻寻找,原来我的“stage2_eltorito”不在“/usr/lib/……”里,而在“/usr/share/……”里。

[ 本帖最后由 自由狼-台风 于 2010-6-23 20:48 编辑 ]

自由狼-台风 发表于 2010-6-20 16:27:24

我分别用Grub Legacy和Grub4DOS制作了两个ISO文件,grub_legacy_ROOT.iso和grub4dos_ROOT.iso。在VirtualBox虚拟机上做引导试验时,BIOS画面过后只有一个光标停留在屏幕左上角,其他地方黑屏,没有任何提示信息,所以我做了实机引导试验。现在,这两个ISO都位于/soft.cache/下。

以下为重启试验实况记录。


[*]一级引导用的Lilo,不启动任何系统,只引导到各系统所在的分区。默认项前往Everest Linux 0.6及其Grub所在的;第二项前往Ntldr所在的。
http://www.linuxfans.org/bbs/attachments/month_1006/20100620_08b7eeea7143b8c2c822EsHF8TAbhE3D.jpg
我在装有Grub4DOS,并在Ntldr中添加了引导项。
http://www.linuxfans.org/bbs/attachments/month_1006/20100620_a633aecfd87bd3dc06daZxLl8rhNPyti.jpg
Grub4DOS的启动项。
http://www.linuxfans.org/bbs/attachments/month_1006/20100620_a3a9cef06620e6ed9097OWphCLsMXkBi.jpg

[*]“Boot ISO B”项引导grub4dos_ROOT.iso。
http://www.linuxfans.org/bbs/attachments/month_1006/20100620_1fd322d1a80fe550e9f5ncOEhnkW3OpU.jpg
引导参数见图。
http://www.linuxfans.org/bbs/attachments/month_1006/20100620_77b79f04b33b02f3848cIkY0QfekJ6bL.jpg
引导参数见图。
http://www.linuxfans.org/bbs/attachments/month_1006/20100620_77b79f04b33b02f3848cIkY0QfekJ6bL.jpg
boot时却无法找到“menu.lst”,出现fall back选单。
http://www.linuxfans.org/bbs/attachments/month_1006/20100620_0eacf4dc0df81005b4a9iIczhULa32aP.jpg
而转入命令行却发现“menu.lst”是存在的。
http://www.linuxfans.org/bbs/attachments/month_1006/20100620_602605832c91d18ad4ffdOecbOsAkyrQ.jpg
[*]“Boot ISO C”项引导grub_legacy_ROOT.iso。
http://www.linuxfans.org/bbs/attachments/month_1006/20100620_c1cf07912f9b2e8590f8JaJt6r4SGFa1.jpg
引导到loading stage2的时候停住不动了,只能重新启动。
http://www.linuxfans.org/bbs/attachments/month_1006/20100620_387652ff0f901b08ab9d6BGbQ9KCfPTS.jpg

自由狼-台风 发表于 2010-6-20 16:33:49

前述命令、提示以及照片记录是否足以判断ISO引导失败的原因?

[ 本帖最后由 自由狼-台风 于 2010-6-20 16:38 编辑 ]

自由狼-台风 发表于 2010-6-20 17:23:55

最新制作一份用Grub Legacy引导的ISO,可以引导至menu部分。

# mkisofs -R -J -b boot/grub/stage2_eltorito -no-emul-boot -boot-info-table -boot-load-size 4 -o grub_legacy_ROOT.iso grub_legacy_ROOT
I: -input-charset not specified, using gb18030 (detected in locale settings)
Size of boot image is 4 sectors -> No emulation
Total translation table size: 2048
Total rockridge attributes bytes: 921
Total directory bytes: 4096
Path table size(bytes): 34
Max brk space used 0
240 extents written (0 MB)
#

参数缺一不可。

haddy 发表于 2010-6-20 17:30:15

印象中Grub Legacy不支持map --mem ISO的……

zy_sunshine 发表于 2010-6-20 18:59:33

国内制作iso的那些人大多用grub4dos,不管是Linux发行还是WinPe这样的光盘。
国外就比较倾向于用那个Grub Legacy了。
我倾向于grub4dos,因为符合国内大多数人用windows的习惯。

关于stage2_eltorito文件
Grub Legacy是开源项目,所以你要去它发布的源码和二进制包中找找有没有答案。

在VirtualBox虚拟机里用这张ISO引导,BIOS画面过后只有一个光标停留在屏幕左上角,其他地方黑屏,可能的原因有哪些?应该怎样调整?
这个问题应该从光盘引导开始分析,有可能是你的引导没有写入mbr头,有可能是你的mbr头找不到需要引导的文件(比如grldr)。

引导iso用的map -mem不是100%能成功启动的。你这样测试又有了不确定因素。
还是用Virtualbox来测试吧。
再就是引导器只是一个程序,运行起来就是加载到内存中的一个程序,和这个程序在哪个盘符上没有区别...

zy_sunshine 发表于 2010-6-20 19:01:21

原来你发的那个帖子上有我生成iso的一段操作。那个命令行就是实际MI生成iso使用的。

自由狼-台风 发表于 2010-6-20 19:21:06

重新用Grub-0.97-X和Grub4DOS-0.4.4-2009-06-20各做了一个ISO,在Virtual Box虚拟机上都能引导至选单,实现重启和关机。为了以后方便,我在两个ISO里分别放置了build_iso.sh。我的Shell脚本写得很烂,愿意喷的就喷吧,喷喷更健康。export SELF_VERSION=2010-06-20_19-0X
export GRUB_VERSION=0.97-X
#        export ISO_ROOT_DIR=XXX
#        export ISO_TARGET_PATH=XXX
export ISO_NAME=bootable.grub-$GRUB_VERSION.build-$SELF_VERSION.iso
#        chmod -R u+w,a+r,go-w $ISO_ROOT_DIR
export BUILD_CMD='mkisofs -J -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-info-table -boot-load-size 4 -o '$TARGET_PATH/$ISO_NAME' '$ISO_ROOT_DIR
echo $BUILD_CMD
$BUILD_CMDexport SELF_VERSION=2010-06-20_19-0X
export GRUB4DOS_VERSION=0.4.4-2009-06-20
#        export ISO_ROOT_DIR=XXX
#        export ISO_TARGET_PATH=XXX
export ISO_NAME=bootable.grub4dos-$GRUB4DOS_VERSION.build-$SELF_VERSION.iso
#        chmod -R u+w,a+r,go-w $ISO_ROOT_DIR
export BUILD_CMD='mkisofs -J -R -b boot/grub/grldr -no-emul-boot -boot-load-size 4 -o '$TARGET_PATH/$ISO_NAME' '$ISO_ROOT_DIR
echo $BUILD_CMD
$BUILD_CMD

自由狼-台风 发表于 2010-6-20 19:22:08

下一步做实机试验。

自由狼-台风 发表于 2010-6-20 19:44:42

实机测试,两个ISO均可使用。

自由狼-台风 发表于 2010-6-23 20:49:17

更正笔误:

一翻寻找,原来我的“stage2_eltorito”不在“/usr/lib/……”里,而在“/usr/share/……”里。

[ 本帖最后由 自由狼-台风 于 2010-6-23 20:52 编辑 ]
页: [1]
查看完整版本: [好像解决了]用Grub Legacy/Grub4DOS制作可引导的ISO。