在GRUB中,可以利用 stage2_eltorito 来制作启动光盘:
mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o grub.iso iso
stage2_eltorito和menu.lst应该放在光盘的/boot/grub目录里。
在GRUB4DOS中,可以利用 grldr 来制作启动光盘。制作方法有两种:
mkisofs -R -b grldr -no-emul-boot -boot-load-seg 0x1000 -o bootable.iso iso_root
mkisofs -R -b grldr -no-emul-boot -boot-load-size 4 -o grldr.iso iso_root
grldr和menu.lst应该放在光盘的根目录里。
第一种方法告诉 BIOS,希望它能够装入整个 GRLDR 文件到内存。装入内存后,BIOS 还应该正确设置堆栈,使得不至于把堆栈设置到 GRLDR 的程序体内,造成冲突。一般情况下,BIOS 做到这一点很容易,因为它可以设置堆栈指针为装入的起始地址。但也不排除存在 BUGGY BIOS 的可能性。
有些 BIOS 不完全符合可启动的 CDROM 规范,比如 VirtualPC 的就是的。这类 BIOS 只是装入了一部分 GRLDR 扇区到内存,典型的可能只装入了一个扇区(2048 字节的大扇区)到内存。不过我们的代码已经替这些 BUGGY BIOS 打了补丁。只要这些 BIOS 能够设置正确的堆栈,不至于和装入内存中的 GRLDR 扇区数据产生冲突就 OK 了。
也就是说,上述第一种制作光盘的方法,应该没有多大问题了。这种方法很有可能适应于所有的 BIOS。
第二种方法本身就只要求 BIOS 装入一个 CDROM 扇区到内存(等同于 4 个 512 字节的小扇区)。这种方法是最保守的,没有理由会失败了。微软的 win2000 启动光盘就是这么做的,isolinux 和 stage2_eltorito 也都是这么做的。如果这种方法失败了,那么 win2000,isolinux 和 stage2_eltorito 应该都会失败的。
对于第二种方法,我们不需要 -boot-info-table 这个参数。但是允许你用这个参数(用了和没用是一样的,我们的引导代码将忽略由这个参数所传递的数据结构)。
对于第一种方法也一样,不需要 -boot-info-table 这个参数,同时也是允许你用这个参数(用了和没用是一样的,我们的引导代码将忽略由这个参数所传递的数据结构)。
这样,stage2_eltorito 就可以完全用 grldr 来代替了。
评论
请教npcomet兄,并且希望小平也能看一下,关于整合FANX和WINPE的。
读了你好几篇文章了,受益匪浅,多谢先!
我一直有个想法,想把FANX和WINPE集合在同一张光盘里,光盘里面还可以放进一个GHO文件,甚至还有空间装上几个维护系统用的软件(以前我是想把FANX和WINXP安装盘集成到一块的)。但一直没有成功,因为我在光盘启动机制、GRUB应用等方面的知识实在太贫乏了。摸索了好久,渐渐有了头绪,主要得益于你的帖子和小平兄的启发。
我想问的是,你觉得这样的一张光盘是用GRUB来引导好,还是用FANX(SLAX)本身的SYSLINUX引导比较好呢?
因为我发现网上很多光盘(如JUJUMAO、番茄)的WINPE都是用EASTBOOT制作的启动光盘,光盘启动后,可以在菜单中选择启动WINPE——一个软盘IMG,IMG中有GRUB,通过GRUB加载运行WINPE的。不知道如果采用SYSLINUX启动光盘的话,能不能实现启动WINPE呢?如果我也是用一个能启动GRUB的IMG,SYSLINUX启动此IMG后,IMG再启动GRUB,从而实现启动WINPE,是否可行?
另一种方式,用GRUB来启动光盘的话,WINPE肯定没有问题了,不过我担心的是FANX(SLAX)本身的启动,因为我到目前都还没有弄清楚通过GRUB来运行FANX的ISO文件的做法。——如果是参照LIVE方式安装到硬盘的方法来启动FANX的话,我目前遇到了一个还没有得到解答的问题——LIVE方式安装到硬盘的FANX启动时,必须提前插入U盘,否则会在加载USB设备这一步后找不到U盘而挂起,死掉。具体情况请看:
http://fanx.org.cn/node/50
所以想要光盘启动后用GRUB顺利启动FANX的话,我没有把握做到。
还有一个方式,不用光盘,我有一个U盘,大小1G,完全支持FANX,我是不是可以直接将WINPE集成到里面去呢?我估计这同样涉及到GRUB的问题,FANX(SLAX)制作到U盘后,是通过LILO启动的吗?LILO启动后,能嵌套启动GRUB?
万望抽空解答一下?
关于引导winPE
如果抛弃引导Fanx的isolinux,fanx将失去很多的功能,所有最好的引导方式不能抛弃isolinux。
最佳的方式应该是使用EasyBoot引导Fanx。这时需要使用UltraISO提取isolinux的引导信息,然后在EasyBoot中用“run xxx.bif”调用。
同时你提到了GRUB引导PE希望你提供下相关的引导参数,只要是GRUB可以引导isolinux就应该没有问题。
grub引导fanx肯定不是问
grub引导fanx肯定不是问题,问题主要在于fanx的启动参数上,可以将所有的启动参数做到grub的选择菜单中,可想而知一个启动参数对应一个启动菜单,如果有10个启动参数的话就需要10个选择菜单,有点不可想象,但是这样做完全可以,只是办法有点笨。
上面的东西也不是绝对的,slax以前只用isolinux引导,现在为了实现u盘的引导添加了syslinux (isolinux的母体)来实现启动,而且slax6rc版本已经是图形界面可选菜单来引导了,启动参数的输入也发生了改变。需要我们继续研究.
isolinux+gfxboot
isolinux+gfxboot 也是一个绝妙的主意
看了下slax-6.0.0rc3
发现使用的是syslinux(isolinux)的图形菜单
太好了,有茅塞顿开之感
grub引导PE这个没有问题了,前面已经有很多人实现了这个功能。我看一下他们的menu.lst就行了。
现在还有一个问题请教:
当easyboot中调用isolinux的引导信息之后,此引导信息如何寻找原先在ISO中的isolinux.cfg?是不是只要保持原来的ISO中的文件目录结构即可?能更详细的说明一下吗?
如果解决了此问题,就可以实现LIVECD的N合一,将FANX、HIWEED、ML LIVECD统统都集成起来也没有问题了。当然这样之后光盘体积太大……呵呵。
只需要保留原来的目录结构就可以了
只需要保留原来的目录结构就可以了,easyboot中调用isolinux的引导信息之后,isolinux就接管了启动程序,这个时候的光盘就和单一的fanx光盘是一样的。
easyboot调用isolinux成功,但isolinux自身启动失败。
如题。
始料不及啊,按以上讨论方法制作ISO,然后由VMWARE载入启动,在光盘菜单中选择启动FANX后,isolinux开始启动,但刚开始就失败了。提示:光盘映像checksum错误。
苦也……npcomet兄,你看这是什么缘故?
估计是更改了光盘目录结构(不得不多了一个ezboot目录啊,没它不行)后,linuxiso就不认光盘了?继续寻求解决方法,打算跟下来把FANX的文件全部放在*.bif所在的ezboot下,看看如何。
把FANX的文件全部放在ezboot下之后,制作出来的ISO运行结果与原来一样:
Image checksum error, sorry......
这下头真的大了。难道真的非得用Grub引导不可?
换一个参数试一试
用“bootinfotable;run xxx.bif”调用isolinux试一试
不行的话就先用boot/dos/loadlin.exe引导fanx。
换了参数之后,能运行了……
呼呼,这个参数以前改人家的安装盘时见过,怎么我就没想到试试这个呢。哈哈,笨得可以啊。
在虚拟机里不过进不了X……原版的光盘ISO在虚拟机里也进不了X,报错都是一样的。错误情况在:
http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&t=1...
这个帖子下半部分。记得在论坛里看过虚拟机FANX进不了X的解决方法,回头我再找找看看。
目前算是成功了一大半了……
呵呵,有时间写一篇心得吧
呵呵,有时间写一篇心得吧。
关于虚拟机不能运行X,应该是驱动程序的问题了。
心得已经写出来了
因为全是Windows的问题,所以不敢开新帖,只是跟在论坛我原来的求助帖下了。
回头把帖子改一下名,呵呵,方便菜鸟们看。
呵呵,开源不是不能谈windows吧
呵呵,开源不是不能谈windows吧
刚发现心得里面有BUG,想修改却进不了Linuxfans了。
估计又是DNS的问题……
改一下就好。
你觉得学技术是往深处去学还是往容易处去学好?
技术无深浅
技术无深浅,不过有两个原则,一个是兴趣,一个是工作需要。^_^