无忧启动论坛

标题: 如何用GRUB4DOS启动ISOlinux制作得光盘系统(Puppy Linux)(疑惑已解,谢谢各位!) [打印本页]

作者: showgo    时间: 2008-12-2 12:04
标题: 如何用GRUB4DOS启动ISOlinux制作得光盘系统(Puppy Linux)(疑惑已解,谢谢各位!)
不知道大家有没有用过Puppy Linux

现在我手头有块用深度技术论坛USB启动设置工具做的USB启动盘

可以正常使用

研究后发现是用grub4dos制作得

本来用的很好,,现在偶然手痒,想把Puppy Linux集成到该U盘里

自然而然想到了除了量产以外得且不破坏原来功能得最简单得办法就是用grub4dos来启动Puppy Linux


现在我用UltraIso把Puppy Linux得所有文件都提取到了U盘得根目录下

文件列表如下:




现在,我该怎么写menu.lst来启动这个Puppy Linux呢?









PS:感觉原镜像是用ISOlinux引导得,不知道是不是我的臆断

新手,见谅!!!!!!

[ 本帖最后由 showgo 于 2008-12-3 12:58 编辑 ]
作者: Climbing    时间: 2008-12-2 14:01
参照isolinux.cfg中的内容写你的menu.lst的内容,例如:

isolinux.cfg的内容如下:
LABEL xconf
MENU LABEL Slax Graphics mode (KDE)
KERNEL /boot/vmlinuz
APPEND initrd=/boot/initrd.gz ramdisk_size=6666 root=/dev/ram0 rw autoexec=xconf;telinit~4 changes=/slax/


那么,对应的grub4dos的menu.lst内容应该类似下面:
  1. title Slax Graphics mode (KDE)
  2. kernel /boot/vmlinuz  ramdisk_size=6666 root=/dev/ram0 rw autoexec=xconf;telinit~4 changes=/slax/
  3. initrd /boot/initrd.gz
复制代码
注意,menu.lst中的命令要用小写。

另外,这样肯定可以启动你的内核,但你的puppy能不能正常启动,我就不敢保证了,关键问题就在于它的初始化脚本能不能搜寻到U盘上的根文件系统并挂载。

[ 本帖最后由 Climbing 于 2008-12-2 14:02 编辑 ]
作者: Climbing    时间: 2008-12-2 14:03
那个PUP_411.SFS应该就是要搜寻并挂载的文件系统。
作者: Climbing    时间: 2008-12-2 14:15
参考了一下人家的网站,应该这样写:

  1. title Puppy-Linux
  2. find --set-root /PUP_411.SFS
  3. kernel /vmlinuz root=/dev/ram0 PMEDIA=usbhd
  4. initrd /initrd.gz
复制代码


既然想学用linux,必要的功课是需要认真做的,例如,如何启动linux,如何安装和设置,这些都应该好好学一下。

另外,建议到http://grub4dos.nufans.net下载最新版本的grub4dos(0.4.4-2008-11-19),grub4dos的资料,请参考http://bbs.znpc.net
作者: barton    时间: 2008-12-2 16:56
那个linux.bif实际上就是isolinux.bin,在U盘上加载这个是启动不了了。

要么用syslinux,将isolinux.cfg改成syslinux.cfg且这些文件放置的目录涉及到isolinux这种名称的改成syslinux即可,要么用grub4dos,climbing的介绍已经很详细了。
作者: showgo    时间: 2008-12-2 17:03
原帖由 barton 于 2008-12-2 16:56 发表
那个linux.bif实际上就是isolinux.bin,在U盘上加载这个是启动不了了。

要么用syslinux,将isolinux.cfg改成syslinux.cfg且这些文件放置的目录涉及到isolinux这种名称的改成syslinux即可,要么用grub4dos,c ...




谢谢各位

我试试~~~~~~~~~~~
作者: showgo    时间: 2008-12-2 18:01
标题: 成功!


[ 本帖最后由 showgo 于 2008-12-2 18:03 编辑 ]
作者: showgo    时间: 2008-12-2 18:02
原帖由 Climbing 于 2008-12-2 14:15 发表
参考了一下人家的网站,应该这样写:

title Puppy-Linux
find --set-root /PUP_411.SFS
kernel /vmlinuz root=/dev/ram0 PMEDIA=usbhd
initrd /initrd.gz


既然想学用linux,必要的功课是需要认真做的 ...




谢谢荣誉版主得指导!!!!!!!!!!!!!!
小弟不甚荣幸!!!!

作者: showgo    时间: 2008-12-2 18:25
标题: 不过我觉得,解决问题是次要得,关键是弄懂原理
我之前之所以会问这个问题,是因为我用EZBooT用成了惯性思维

没有想到换个关键字搜索,Climbing 提醒了我

后来我就用 GRUB puppy之类关键词搜索了一下

发现有以下几个版本得menu.lst

版本1:
default      0

timeout      10

title      Puppy Linux
kernel      /vmlinuz
initrd      /initrd.gz

title      Windows PE
root      (hd0,0)
savedefault
makeactive
chainloader   +1
==============================



版本2:
U 盘安装,很简单,把 U 盘格式化成FAT32格式(其它格式没试过),然后用 syslinux 制作成可引导的 U 盘,并把那个下载下来的iso 文件解开放在 U 盘的根目录,把 isolinux.cfg 重命名为 syslinux.cfg,并把其中的 “pmedia=cd”去掉就行了。

硬盘非正式安装,把上述解开的 iso 文件下的东西同样复制到一个 FAT32 分区(估计ext2等也行,没试过)的根目录下,再在我已经有的 grub 菜单中加入 Puppy Linux 的启动项就行了。我在 grub 的menu.lst加的内容如下:

title Puppy Linux
root (hd0,8)
kernel /vmlinuz root=/dev/ram0
initrd /initrd.gz
boot



版本3:
title Puppy Linux
kernel (hd0,0)/vmlinuz root=/dev/ram0 PMEDIA=idehd
initrd (hd0,0)/initrd.gz
title Puppy Linux in RAM
kernel (hd0,0)/vmlinuz root=/dev/ram0 PMEDIA=idehd pfix=ram
initrd (hd0,0)/initrd.gz






版本4:(就是C版主给的)
title Puppy-Linux
find --set-root /PUP_411.SFS
kernel /vmlinuz root=/dev/ram0 PMEDIA=usbhd
initrd /initrd.gz

下面将分析。。。。。。。。。。。。。


比较这几个版本得menu.lst
区别主要在如下地方

1.介质指定
C版主给的是PMEDIA=usbhd,因为我的U盘是用深度得USB启动工具制作得
当然这个不是问题所在
关键得在下面

2.根文件系统得指定

这一点大同小异,版本3使用了完整得路径,因为在安装Grub时,本机硬盘为hd0,移动硬盘为hd1,所以要将Grub安装到hd1。而使用移动硬盘引导时,移动硬盘则成了hd0,故需要在menu.lst中注意修改
C版主给的是相对路径,就是版本4


实际上,版本1既没有介质指定,也没有根文件系统得指定,而是直接而简单得启动内核
这个方法不敢苟同(PS:puppy linux比较特殊,是运行在ram里面得,不把root设定到ram里面可否运行,我待会儿试试)


3.根文件系统得二次指定,也是我疑惑得地方放,望版主解答!

在版本4里面,C版主两次指定root,当然,对于对于puppy linux比较特殊得系统,其文件系统由PUP_411.SFS挂载生成在ram里面,有没有必要在GRUB里面指定这个root呢?
我想,puppy linux的INITRD应该会完成这个工作吧???(待会儿我在试试)

附上光盘里面的ISOLINUX.CFG
default puppy

display boot.msg

prompt 1

label puppy

kernel vmlinuz

append initrd=initrd.gz pmedia=cd

timeout 50


对syslinux得引导机理不清楚,但是觉得有些东西是相通得

实际上,这个里面也没有指定root

那么,上面,设定root得动机何在呢??????????


我新手,以上不对处纯胡诌,各位原谅~~~~~~~~~

[ 本帖最后由 showgo 于 2008-12-2 19:00 编辑 ]
作者: barton    时间: 2008-12-2 21:01
isolinux.cfg里 pmedia=cd用在U盘下的syslinux.cfg里,肯定是有问题的,看来不能简单的改名。

grub4dos里设置root,是查找到文件所在的路径,并设为root,省掉kernel initrd的内核路径,直接用/来替代(hd0,x)/

syslinux/isolinux启动后root的概念是不一样的,各种启动介质启动后,这个介质里的/boot   /boot/?linux   /?linux三个位置中的任何一个都可能是root,取决与使用者的意愿。

[ 本帖最后由 barton 于 2008-12-2 21:04 编辑 ]
作者: Climbing    时间: 2008-12-2 21:24
标题: 回复 #9 showgo 的帖子
由于grub4dos也是源出于linux,在它的执行环境里也有一个根设备的概念,也就是root device,不过这个root跟你要启动的linux的root不是一回事。这一点儿,一定要区分清楚。

由于你用U盘启动,视机器BIOS处理启动U盘的不同及你的U盘格式的不同,有可能你的U盘启动起来后其设备号是会有变化的,例如,有可能是(hd0),也有可能是(hd1),还有可能是(fd0),这样,如果你用:
kernel (hd0,0)/vmlinuz ...
initrd (hd0,0)/initrd.gz
这种形式来引导很显然是不妥当的,所以,我用find --set-root命令来动态确定你的U盘的设备号。

而syslinux和isolinux的引导只局限于U盘和光盘,它启动起来后,直接将启动设备当作其根设备,所以它不需要指定根设备。

至于Puppy Linux启动时内核参数中所指定的root,那是Puppy Linux自己内核所需要的参数(相当于指定根分区),跟grub4dos的root就风马牛不相及了。

grub4dos的根设备有点类似DOS下的当前盘的概念,另外,它同时也具有当前目录的概念,例如,你可以指定:
root (hd0,0)/boot

这种情况下,原来的kernel (hd0,0)/boot/vmlinuz可以简化成:kernel /vmlinuz。

在Ubuntu的Windows安装程序WUBI下就充分使用了这一特性。
作者: showgo    时间: 2008-12-3 12:55
原帖由 barton 于 2008-12-2 21:01 发表
isolinux.cfg里 pmedia=cd用在U盘下的syslinux.cfg里,肯定是有问题的,看来不能简单的改名。

grub4dos里设置root,是查找到文件所在的路径,并设为root,省掉kernel initrd的内核路径,直接用/来替代(hd0,x ...




都是高手


谢谢解惑!!!!!!!!!!!
作者: showgo    时间: 2008-12-3 12:57
原帖由 Climbing 于 2008-12-2 21:24 发表
由于grub4dos也是源出于linux,在它的执行环境里也有一个根设备的概念,也就是root device,不过这个root跟你要启动的linux的root不是一回事。这一点儿,一定要区分清楚。

由于你用U盘启动,视机器BIOS处理启 ...




明白。我再学习下!!!!!!!!!!!!!!!




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