本文档来源:http://bbs.znpc.net/viewthread.php?tid=5587 感谢zw2312914提供 原版是中英文对照的版本,这里已经经过删改。 需要看原版的可以从上面的贴子下载. 一些旧的网址已经删除,只保留目前在用的. 注:本文仅供参考,可能有一些更新没有在这里说明.如果有发现错误可以到论坛发贴或email联系我(grub4dos@chenall.net) 其它命令用法请参考 http://grub4dos.sourceforge.net/wiki/ 处的 GRUB4DOS 有关文档。 外部命令的用法请参考 http://chenall.net/post/tag/grub4dos/ 项目主页 http://code.google.com/p/grub4dos-chenall/ 下载网址: http://code.google.com/p/grub4dos-chenall/downloads/list http://nufans.net/grub4dos/ 工具和外部命令: http://code.google.com/p/grubutils/downloads/list 通过匿名 svn 服务器获取最新源代码的方法: svn co http://grub4dos-chenall.googlecode.com/svn/trunk/ grub4dos 通过你的 web 浏览器在线查看源代码: http://code.google.com/p/grub4dos-chenall/source/browse/ GRUB4DOS 邮件列表(未用): grub4dos-devel@gna.org 订阅页面: https://mail.gna.org/listinfo/grub4dos-devel/ 论坛(官方技术支持站点): http://bbs.znpc.net/forumdisplay.php?fid=4 http://reboot.pro/forum/66/ ---------------------近期更新记录----------------------------------------------- 最新更新记录请查看,ChangeLog_chenall.txt 2011-01-03 添加了GRUB4DOS的变量用法及相关介绍。 2011-01-02 1.为了方便pause命令添加--test-key参数,显示按键扫描码. 2010-12-31 更新: 1.pause命令增强,增加了显示按键扫描码的功能。需要debug 为-1. 例子:显示一个按键扫描码 debug -1 && pause && debug 1 注:此功能已为被参数--test-key代替。 2.hiddenmenu命令增强。增加一个--chkpass参数 功能: 在隐藏菜单的时候按Esc键要输入正确的密码才可以显示菜单。 注意: 1.该功能启用之后,如果按了其它按键则直接启动默认菜单。 默认的Esc按键可以自由设置。使用--chkpass=KEY 2.菜单初始化有password命令时才需要输入密码。 3.按键代码如果不清楚可以使用上面的功能来获取。 例子: hiddenmenu --chkpass=0x8500 按F11键才可以显示菜单。 hiddenmenu --chkpass 按Esc键才可以显示菜单。 hiddenmenu --chkpass=0x2200 按Alt+G显示菜单。 ------------------------------------------------------------------------------ GRUB.EXE 用法: GRUB [--bypass] [--time-out=T] [--hot-key=K] [--config-file=FILE] 旁路 暂停时间 热键 配置文件 这里的 FILE ,例如,可以是 (hd0,0)/menu.lst 在 CONFIG.SYS 中,其配置行类似于: install=c:\some\where\grub.exe --config-file=FILE 如果没有使用选项,GRUB.EXE简单的使用(hd0,0)/menu.lst 来作为配置文件,只要它存在的话。(注意!我们最终将默认的配 置文件从 (hd0,0)/boot/grub/menu.lst 变更为 (hd0,0)/menu.lst) (更新于2006-12-23。参见更新3) 这里的分区(hd0,0)可以是一个Windows分区或者是一个linux分区, 或者是被 GRUB 支持的其他任意分区。 这里的FILE只接受GRUB风格的文件名。DOS风格的文件名不被调用 (很明显,我们应该使用GRUB风格的文件名,原因是比如在Linux ext2分区中不能使用DOS风格的文件名来访问文件 )。 (参见更新2) 更新:FILE 可以是菜单的内容。使用分号来分隔嵌入 FILE 中的命 令。FILE 可以被一对双引号括起来,示例: GRUB --config-file="root (hd0,0);chainloader +1" 这条命令将启动(hd0,0)上的系统。 另一个例子: GRUB --config-file="reboot" 这条命令将令机器重启。 再例如: GRUB --config-file="halt" 这条命令将令机器关闭。 如果选项--bypass 被指定,GRUB将在暂停时间截止后从DOS退出。 选项'--time-out=T' 指定了以秒计时的暂停值。如果指定了--bypass 则T的默认值为5 ,而--bypass选项没有被指定时默认值为0 。 默认的热键值是 0x3920 (即空格键)。如果此键被按下,GRUB将正常 启动。如果其他键被按下,GRUB 将立即终止并返回到DOS。参见下面 的“int16 键盘扫描码” 每个选项最多只能被指定一次。 更新 2:DOS风格的文件名已经被支持(由John Cobb先生提供此补丁)。 如果 FILE 的起始两个字符是“ #@ ”,那么 FILE 中其余的部分将被视 为一个DOS风格的文件名。例如: GRUB --config-file="#@c:\menu.lst" DOS风格的文件只有起始的4kB被使用。此文件应当是一个未被压缩的文 本文件。 注意:你也可以在SHELL或者在CONFIG.SYS的INSTALL配置行使用‘DOS 风格文件直接访问’。但不要在DEVICE 配置行使用它。DOS文档中表述 了DOS设备驱动不能使用'打开文件'的DOS调用。 更新 3(2006-12-23): 作为默认,GRUB.EXE将按以下顺序查找它的配置文件: (DOS风格文件) .\menu.lst, 当前目录下的MENU.LST。 (DOS风格文件) \menu.lst, 当前驱动器根目录下的MENU.LST (GRUB风格文件) /menu.lst, 启动设备根目录下的MENU.LST 默认的启动设备还是(hd0,0)。 -------------------------------------------------------- 更新 1 : 版本0.2.0 同时带来一个新的东西。GRUB for NTLDR ,它能够从 Windows NT/2000/XP的启动菜单启动到GRUB。复制GRLDR到Windows NT/2000/XP的C盘根目录,并在C:\BOOT.INI中加入这样一行: C:\GRLDR="Start GRUB" 这样就完成了安装。GRLDR应该与 BOOT.INI及NTLDR 位于相同的目录。 注意 BOOT.INI 通常是隐藏的因而你要看见它必须取消隐藏。如果GRLDR 在一个NTFS分区,应该将它复制到一个非NTFS分区的根目录(并且menu.lst 文件应当同样这样做)。假如GRLDR被压缩了,比如在NTFS分区中对它启 用了压缩的情况下,它将不能运行。 即使这个磁盘的驱动器号已经被Windows设备管理器改变为另外的不同 于 C 的盘号 ,你仍然需要在 BOOT.INI 中使用盘符 C ,否则,NTLDR 将查找不到 GRLDR 文件。 也就表示,如果你从一个软盘上启动NTLDR,你也需要把A:\BOOT.INI 中的 GRLDR 的所在行这样写: C:\GRLDR="Start GRUB" 而不能象下面这样使用盘符 A : A:\GRLDR="Start GRUB" (注意在 BOOT.INI 位于软盘 A 的这个例子中,标记“C:\GRLDR” 实际将访问 A:\GRLDR ) 更新 2: GRUB for linux 也一起被引入到版本0.2.0。 你可以使用使用linux的引导程序 KEXEC,LILO,SYSLINUX 或者别的 GRUB来启动它。(GRUB4LIN 已经合并到 GRUB.EXE 中) 从Linux中直接启动到GRUB ,使用这样一组命令: kexec -l grub.exe kexec -e 经由GRUB启动到GRUB,使用如下的命令: kernel (hd0,0)/grub.exe boot 经由LILO启动到GRUB,在lilo.conf中加入这样几行: image=/boot/grub.exe label=grub.exe 经由syslinux启动到GRUB,在syslinux.cfg中加入这样几行: label grub.exe kernel grub.exe LOADLIN在引导GRUB.EXE时可能会遇到问题,原因是grub.exe需要一些 未更改的原始的BIOS中断向量,但是DOS破坏了这些中断向量,而loadlin 在将控制权交给grub.exe前并没有恢复它们。 更新 3: 从版本0.4.0开始,DOS下的GRUB支持内存驱动器。示例: # boot into a floppy image map --mem (hd0,0)/floppy.img (fd0) map --hook chainloader (fd0)+1 rootnoverify (fd0) map --floppies=1 boot 由于镜像将被拷贝到一个内存区域,所以镜像本身可以是非连续的, 甚至可以是被gzip压缩过的。 另一个例子: map --mem=-2880 (hd0,0)/floppy.img (fd0) 这个内存驱动器(fd0)将占用至少1440 KB的内存。 这也对那些小于1440 KB的1.44M 软盘镜像有用。 再例如: map --mem --read-only (hd0,0)/hd.img (hd1) 这个内存驱动器成为了一个硬盘驱动器,并且只读。 这表示你不能向这个(hd1)中写入数据。 你可以同时使用多个内存驱动器和多个原来的基于磁盘虚拟的仿真驱动器。 如果BIOS不支持中断int15/EAX=e820h,你将不能使用任何内存驱动器。 更新 4: 对于内存驱动器仿真,一个单一的分区镜像可以被转换为整个硬盘镜像来 map --mem (hd0,7)/win98.img (hd0) map --hook chainloader (hd0)+1 rootnoverify (hd0) map --harddrives=1 boot 这里的win98.img是一个头部不含主引导记录和分区表的分区镜像。 GRUB for DOS 确实会为这个内存驱动器(hd0)建立一个MBR和分区表。 更新 5: 现在GRLDR可以作为一个非模拟模式的可启动光盘的启动映像文件来使 用。Linux用户使用示例: mkdir iso_root cp grldr iso_root mkisofs -R -b grldr -no-emul-boot -boot-load-seg 0x1000 -o bootable.iso iso_root 另一种选择是,grldr也可以用同样的方法作为stage2_eltorito来使用。 -boot-info-table选项是被允许使用的,但你可以省略它: mkdir iso_root cp grldr iso_root mkisofs -R -b grldr -no-emul-boot -boot-load-size 4 -o grldr.iso iso_root 也要注意上面的可启动iso镜像是使用-boot-load-seg 0xHHHH选项来建立的话, 就必须令HHHH大于或者等于1000(十六进制) 如果HHHH小于1000(十六进制),虚拟机 QEMU 会死机。这是QEMU的一个缺陷。一 个grldr.iso镜像可以使用也可以不使用-boot-load-seg 0xHHHH选项来创建。 menu.lst文件应该被放置在光盘的根目录。 更新 6: 中文专用版被建立在"chinese"子目录中。 ( 由Gandalf先生提供此补丁,2005-06-27) 中文专用版同时内附了scdrom 功能。 (更新:scdrom 从2006-07-20起已被删除) 更新 7: 增加了内存驱动器(md) 。就像(nd)代表网络驱动器 (cd) 代表光驱一样, 新的驱动器(md)实现了将整个内存作为一个磁盘驱动器来访问。 (md)只工作在支持BIOS中断int15/EAX=E820h的系统上。 现在,cat命令已经有了一个十六进制转储的新选项:--hex 以及通过--locate=STRING 在文件中找查找字符串。 典型示例: cat --hex (hd0)+1 这将用十六进制的表格显示 MBR 扇区。 cat --hex (md)+2 这将显示你内存起始处的1 KB内容(实际,这就是实模式的IDT表),也是 使用十六进制的转储表。 cat --hex (md)0x800+1 这将显示你的扩展内存的第一个扇区。 cat --hex (hd0,0)+1 这将显示(hd0,0)分区的第一扇区。通常这个扇区包含操作系统的引导记录。 更新 8: 增加了随机存贮驱动器 (rd) 。(md) 设备访问内存是从物理地址 0 开始,而 (rd) 可以访问起始于任何基地址的内存。随机存贮器的基 址与长度可以通过 map 命令指定。详情请使用 "help map" 命令。 你甚至能够为(rd)驱动器指定一个BIOS驱动器号。比如: map --ram-drive=0xf0。默认的 (rd) 驱动器号是使用0x7F的软驱号。 如果 (rd) 是硬盘驱动器镜像,你应该用大于或等于0x80的值来改变 它的驱动器号。(但应防止使用0xffff,因为0xffff是预留给(md)设 备的。) (rd)+1这个标志始终代表文件,它包含存储在(rd)中的所有字节。 更新 9: 直接启动 WinNT/2K/XP 的 NTLDR 和 Win9x/ME 的 IO.SYS, 以及 FreeDOS 的 KERNEL.SYS. 例如: chainloader --edx=0xPPYY (hd0,0)/ntldr boot chainloader --edx=0xYY (hd0,0)/io.sys boot chainloader --ebx=0xYY (hd0,0)/kernel.sys boot 十六进制的YY 指定了启动驱动器号,十六进制的PP指定了 NTLDR 的 启动分区号。如果启动驱动器是软驱,PP应该是一个十六进制的值ff, 即十进制的255. 对于 Freedos 的 KERNEL.SYS , 选项--edx不能执行,请使用--ebx 。 当文件位于它们平常的位置时,选项 --edx (--ebx)可以省略。但某些 情况下,这些选项是必需的。 例如,假设被调用的ntldr文件在ext2分区(hd2,8)中,而你又希望它认 为(hd0,7)的 windows 分区是启动分区,那么--edx就是必需的: chainloader --edx=0x0780 (hd2,8)/ntldr 对于DOS核心(即,IO.SYS和KERNEL.SYS),启动分区号是没有意义的, 因此你只需指定恰当的启动驱动器号YY(不过指定了启动分区号也是 无害的)。 上面的PPYY也可以在chainloader命令之后通过root和rootnoverify命 令来指定。例如: chainloader (hd2,6)/kernel.sys rootnoverify (hd0) <-------- YY=80 boot chainloader (hd0,0)/ntldr rootnoverify (hd0,5) <-------- YY=80, PP=05 boot 提示:CMLDR (the ComMan LoaDeR,它被用于加载Windows的故障 恢复控制台)可以像NTLDR一样被良好的加载。 Bean 成功地解压和启动了WinME的IO.SYS,感谢这个出色的工作。 更新 10: isolinux.bin (版本 3.73) 可以被自2009-02-09 起建立的版本加载。 chainloader (cd)/isolinux.bin isolinux.bin必须是存在于在真实或虚拟的光驱之中的。 更新 11: Grub 传统版的 stage2 文件可以通过下面的方法加载: chainloader --force --load-segment=0 --load-offset=0x8000 --boot-cs=0 --boot-ip=0x8200 (...)/.../stage2 更新 12: 增加了 exFAT 分区启动。 增加了从光盘根目录查找 grldr 的功能。可以把 grldr_cd.bin 作为 cdrom 的引导代码。 -------------------------------------------------------- 这里用一些示例来演示磁盘仿真命令的用法: 1. 仿真硬盘分区C:为软驱A:并从C:中启动win98: map --read-only (hd0,0)+1 (fd0) chainloader (hd0,0)+1 rootnoverify (hd0) boot 在上面的示例中,(hd0,0)是一个装有win98的C:盘 。当win98启动完成后,你会发 现A:中包含了C:的所有文件,而且如果你删除A:中的文件,C:上的相应文件也会消 失。 在map命令行中,(hdm,n)+1式的写法被解释成代表整个(hdm,n)分区,而不仅仅是 此分区的第一扇区。 2. 将硬盘分区C:仿真为软驱A:并从A:中启动win98: map --read-only (hd0,0)+1 (fd0) map --hook chainloader (fd0)+1 rootnoverify (fd0) map --floppies=1 bo...
div_454