无忧启动论坛

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

[讨论] grldr是如何实现对menu.lst的搜索的?

[复制链接]
跳转到指定楼层
1#
发表于 2011-2-13 09:45:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我16进制下查看Grub4Dos里的grldr,大概在偏移000003c0的行,看见有/menu.lst,请教这个是表示搜索当前根目录吗?还是表示会搜寻所有的分区的根目录?另在偏移00002010行,看见有0.97/boot/grub/menu.lst,这又表示什么意思呢?

我曾经看见某个版本的grldr中,可能是在偏移3c0行(当时未注意,只记得很靠前)有(hd0,0)/boot/menu.lst字样,结果grldr似乎只在这个位置找menu。我将它改为自己想要的地址(字符长度不一致),就会在我指定的地址找。但我不知道,这个修改menu.lst地址的代码,是不是必须从同一位置开始,结束的地址有什么限制?如果要指定多个地址该如何写呢?

后来我又在Grub4Dos里的grldr的末尾发现一些很像内置菜单的代码,用GrubMenu提取出来如下:

pxe detect
configfile
default 0
timeout 1

title find /menu.lst, /boot/grub/menu.lst, /grub/menu.lst
        errorcheck off
        configfile /menu.lst || configfile /MENU.LST
        configfile /boot/grub/menu.lst || configfile /BOOT/GRUB/MENU.LST
        configfile /grub/menu.lst || configfile /GRUB/MENU.LST
        find --set-root --ignore-floppies --ignore-cd /menu.lst && configfile /menu.lst
        find --set-root --ignore-floppies --ignore-cd /boot/grub/menu.lst && configfile /boot/grub/menu.lst
        find --set-root --ignore-floppies --ignore-cd /grub/menu.lst && configfile /grub/menu.lst
        errorcheck on
        commandline

title commandline
        commandline

title reboot
        reboot

title halt
        halt

这个内置菜单很像设置了在多个地址寻找menu.lst。我想应该内置菜单不是GRLDR必须的吧。它是优先外部菜单还是优先内部菜单呢?我看论坛有说GRLDR对menu.lst的搜索默认地址就是/menu.lst、 /boot/grub/ 、/grub/menu.lst。难道它就是内置菜单实现的?
那么没有内置菜单的话会在哪里寻找呢?是不是3c0行?3c0行与内置菜单谁优先呢?

如果我将grub装入了MBR,所谓GRLDR对menu.lst的搜索默认地址就是/menu.lst、 /boot/grub/ 、/grub/menu.lst,这个根目录是指哪个分区呢?是不是grldr所在的分区?或者是所有分区?
2#
发表于 2011-2-13 14:05:39 | 只看该作者
这个我也感兴趣。刚开始接触。
我的grldr用grldr editor.exe提取出如下代码,共同研究探讨一下:

default 0
timeout 1
fallback 1

title find /menu.lst
        find --set-root --ignore-floppies /menu.lst
        configfile /menu.lst

title find /boot/grub/menu.lst
        fallback 2
        find --set-root --ignore-floppies /boot/grub/menu.lst
        configfile /boot/grub/menu.lst

title find /grub/menu.lst
        fallback 3
        find --set-root --ignore-floppies /grub/menu.lst
        configfile /grub/menu.lst

title commandline
        commandline

title reboot
        reboot

title halt
        halt

我的menu.lst内容如下:

# menu.lst produced by grb4dosconf
color white/blue black/cyan white/black cyan/black
timeout 10
default 0

title lupu-510
  find --set-root --ignore-floppies /puppy/initrd.gz
  kernel /puppy/vmlinuz pmedia=atahd psubdir=puppy
  initrd /puppy/initrd.gz

title UNetbootin
  find --set-root --ignore-floppies /unetbtin/menu.lst
  configfile /unetbtin/menu.lst

title Windows Vista/2008/7
  find --set-root --ignore-floppies /bootmgr
  chainloader /bootmgr

title Windows NT/2000/XP
  find --set-root --ignore-floppies /ntldr
  chainloader /ntldr

title Windows 9x/Me
  find --set-root /io.sys
  chainloader /io.sys

title Grub4Dos commandline\n(for experts only)
  commandline

title Reboot computer
  reboot

title Halt computer
  halt

title Puppy Linux (pup2usb)
root (hd0,5)
kernel /puppy/vmlinuz PMEDIA=idehd PSUBDIR=puppy
initrd /puppy/initrd.gz

title Puppy Linux (pup2usb)
root (hd0,5)
kernel /puppy/vmlinuz PMEDIA=idehd PSUBDIR=puppy
initrd /puppy/initrd.gz

title Puppy Linux (pup2usb)
root (hd0,5)
kernel /puppy/vmlinuz PMEDIA=idehd PSUBDIR=puppy
initrd /puppy/initrd.gz

以下是boot.ini的代码:
[boot loader]
timeout=15
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect /NoExecute=AlwaysOff
C:\AVLDR="启动中天维护杀毒版WinPE系统"
C:\ubnldr.mbr="UNetbootin"
C:\wubildrd.mbr = "Ylmf_OS-hd"
C:\GRLDR="Puppy Linux (pup2usb)"
回复

使用道具 举报

3#
 楼主| 发表于 2011-2-15 21:31:58 | 只看该作者
http://bbs.znpc.net/viewthread.php?tid=3290

bean 发表于 2007-5-6 22:23

缺省菜单是在grldr第二扇区中,找到/menu.lst并把它改为/rising/menu.lst就行了。

也可以修改内置菜单,把它改为这样:

timeout 1
fallback 1

title find /rising/menu.lst
        find --set-root --ignore-floppies /rising/menu.lst
        configfile /rising/menu.lst

title find /boot/grub/menu.lst
        fallback 2
        find --set-root --ignore-floppies /boot/grub/menu.lst
        configfile /boot/grub/menu.lst

title find /grub/menu.lst
        fallback 3
        find --set-root --ignore-floppies /grub/menu.lst
        configfile /grub/menu.lst

title commandline
        commandline

title reboot
        reboot

title halt
        halt

不过使用这种方法时,要确定在根目录里没有menu.lst文件,否则会直接使用该菜单,而不使用内置的菜单。
回复

使用道具 举报

4#
 楼主| 发表于 2011-2-15 21:40:26 | 只看该作者
看了这些,但还是有点不肯定。第二扇区缺省菜单、内置菜单、外部菜单,三者的优先级是怎样的?从bean以前的描述,似乎是首先根据第二扇区的指定位置寻找外部菜单,如果找不到,就使用内置菜单,内置菜单采取find和configfile搭配,实现对外部多个位置寻找菜单并加载。如果还找不到,就使用内置菜单。
回复

使用道具 举报

5#
发表于 2011-2-15 23:22:17 | 只看该作者
与其花这么多时间找这些相对来说不是很重要的东西,
还不如花点时间认真读一下GRUB4DOS_README

相信会有帮助的。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-28 16:47

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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