无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 11118|回复: 32
打印 上一主题 下一主题

最近觉得 grub4dos 的文档需要系统整理了

[复制链接]
跳转到指定楼层
1#
发表于 2012-10-11 20:29:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单单一个 README 文件显得不够用,也太不容易阅读。

为此,我在考虑,有没有别的某个软件的文档,拿来先当作一个模板,参考一下,然后用它的模式来写 grub4dos 的文档。

请提供您认为特别优秀的一些文档,可以用来作为我们的原始模型,据此写出我们的文档。


以前看过这个 qemu 的文档,写得不错:

http://wiki.qemu.org/Manual

[ 本帖最后由 不点 于 2012-10-11 21:02 编辑 ]
2#
 楼主| 发表于 2012-10-11 21:47:25 | 只看该作者
首先,Grub4DOS 是什么?这个要给出概括。试试看......

Grub4DOS 是服务于 PC BIOS 平台的一个开源的引导管理器,是基于 GNU GRUB legacy 开发出来的,以 GPL2 授权协议发布。

这个引导管理器有什么特点?也要给以概括。试试看......

它可以用来启动 DOS、Windows、Linux 等多种操作系统,也可以用来启动其他引导管理器。它自己可以经由 MBR、PBR、CDROM、PXE 启动,也可以从 DOS、Win9x、Linux 等操作系统之下启动,或者被其他引导管理器如 fbinst、NTLDR、BOOTMGR、SYSLINUX、GNU GRUB、LILO 启动。它具有磁盘、光盘仿真功能(基于实模式 BIOS),可以用来启动软盘、硬盘、光盘映像。

不重要的(或者过时的)功能 “ 启动 CDROM ”(cdrom --init),此处可以不用提及,而可以在后续的文档内容中简单涉及。

另外,也不用提及 USB,因为虽然 USB 是一种新的介质,但却不是一种新的启动方式。比如说,我们只有仿真软盘、仿真硬盘、仿真光盘的说法,却不存在仿真 USB 的说法。在 PC BIOS 平台下,USB 的启动方式就是软盘、硬盘、光盘的启动方式(之一)。将来的新型介质,例如 TF 卡、CF 卡、1394 口,等等,都是类似的。由于 DOS 和实模式是一个很好的测试平台,有着大量的、丰富的软件资源,所以,新型介质的硬件开发者大概都会采用 DOS 和 BIOS 来进行启动测试。尽管某些商家希望通过强制性淘汰 BIOS 制造不兼容来获取利益,但制造不兼容的结果,首先使得硬件制造商自己受到损失,因为他们自己被迫丢弃熟悉的 BIOS 知识结构,被迫采用陌生的开发环境,面临着匮乏的可用软件资源。就算硬件制造商内部工程师大换血全面采用 EFI,它也面对着各个阶层 PC 用户的承受能力问题。它可能遭到一些阶层的用户的(不由自主的)抵制。只要有一个环节脱钩,EFI 就遇到障碍了。我个人根据网上透露的资料分析后认为,EFI 是一个恶意的规范,对用户而言是恶意的,它更方便了操作系统制造商对用户进行各种控制和限制,用户将失去原有的自由。另一方面,EFI 也有可能以失败而告终,硬件制造商有可能被迫长期兼容 BIOS。

[ 本帖最后由 不点 于 2012-10-13 21:29 编辑 ]
回复

使用道具 举报

3#
 楼主| 发表于 2012-10-12 16:17:38 | 只看该作者
在粗略介绍了 grub4dos 的主要特点之后,接下来就是分专题进行详细介绍。

grub4dos 有两个核心文件,grldr 和 grub.exe,分别用于不同的场合。核心文件是如何构成的呢?那些想深入了解 grub4dos 内幕的人,通常很关心这个问题。

所以,应该有一个专门的介绍。题目就叫做:

核心文件的结构

grub4dos 有两个核心文件,grldr 和 grub.exe,分别用于不同的场合。

在 grub4dos 发展的早期,只有 GRUB.EXE 这一个核心文件,没有 GRLDR 文件。GRUB.EXE 起初只是 DOS 可执行文件格式,它由两部分构成:

头部 + 主体

“ 头部 ” 是为 “ 主体 ” 的运行做准备的。“ 主体 ” 就是 GNU GRUB 的核心代码 pre_stage2。后来,grub.exe 也可以当作 DOS 设备驱动格式用 DEVICE=grub.exe 加载,甚至 grub.exe 也成为一个合法的 Linux 内核格式,可以被其他许多引导工具加载。不过,“ 头部+主体 ” 这个总体结构没有变化。

GRLDR 也是类似的,由 “ 头部 + 主体 ” 构成。与 “ GRUB.EXE 是为 DOS 而生 ” 的情况类似,GRLDR 就是为 NTLDR 而生的。它甚至曾经被称为 “ grub for ntldr ”。grub4dos 的核心文件都碰巧具有这样一个简单的、单一的总体结构,这使得它们容易被分析和掌握。

GRLDR 的头部占用 16 扇区,也就是 8K,即 8192 个字节,或者(用十六进制表示)0x2000 字节。GRLDR 的头部会被 NTLDR 加载。遗憾的是,NTLDR 不能够把 GRLDR 完整加载到内存,只能刚好加载 8K 大小的头部。这就是 “ 为什么 GRLDR 的头部正好是 8K ” 的原因。这样,当头部获得控制后,它就有一个首要的任务,即寻找 “ 主体 ” 部分在哪里,然后加载主体部分到内存。实际的执行步骤是,头部在各个硬盘各个分区的根目录寻找整个 GRLDR 文件(如果都失败,那么最后会尝试在第一软盘 fd0 的根目录寻找 GRLDR 文件),找到 GRLDR 之后就加载完整的 GRLDR 文件到内存,并递交控制权。

这里顺便提及 grldr.mbr 文件。它主要被用于安装到 MBR 上。它的长度是 18 个扇区(即 9K)。它的任务和功能是寻找并加载 GRLDR 文件。这有点类似于 GRLDR 头部的作用。但 GRLDR 头部是被 NTLDR 加载,而 grldr.mbr 是被 BIOS 加载,所以,这还是有差别的。grldr.mbr 末尾的两个扇区是用来探测和适应 BIOS 的磁盘几何参数的。所以,grldr.mbr 的长度是 18 个扇区,比 grldr 的头部(16 扇区)多了两个扇区。grldr.mbr 也能被 NTLDR 加载,但是,NTLDR 也只能加载 grldr.mbr 的开头的 16 扇区(8K),不能加载末尾的两个扇区。NTLDR 的升级版 —— BOOTMGR —— 却能够完整加载 grldr.mbr 到内存,这是因为 BOOTMGR 可以加载长达 64K 的文件。而 grldr.mbr 只有 9K,所以,它能够被 bootmgr 完整加载到内存。bootmgr 的 64K 加载能力还使得它可以被用来加载 wee63.mbr 文件。wee63.mbr 是另外一个启动软件 WEE 的核心文件。WEE 是一个基于 grub4dos 而开发出来的微型启动管理器。

从版本 0.4.5 开始,grub.exe 也能够被 ntldr 加载(在 boot.ini 的末尾添加 c:\grub.exe="grub.exe" 这样一行便可,完全类似于 grldr 的情况)。

grldr 并非只能被 ntldr 加载,它也可以被其它启动软件加载。例如,fbinst、syslinux 都可以加载 grldr。原则上讲,任何启动软件(经过改造以后)都可以加载 grldr,因为加载它是很容易的,只要把 grldr 放在 16 字节对齐的内存地址处便可递交控制权了。另外,凡是能够加载 ntldr 的引导管理器,也都能加载 grldr。这是因为 ntldr 总是被加载在固定地址 2000:0000 处,而如果 grldr 也被加载在此处,当然是可以正常运转的,因为 2000:0000 是一个 16 字节对齐的地址。

当网卡的 PXE BIOS 加载 grldr 时,它把 grldr 加载在 0000:7C00 处,这也是一个 16 字节对齐的地址。所谓 “16 字节对齐”,就是“可以被 16 整除”的意思。

无论 grldr(或 grub.exe)被什么东西加载(以及加载在何处),这个被加载了的 grldr(或 grub.exe)都会自动执行一个附加的步骤,即把主体部分(pre_stage2)放置在固定地址 0000:8200 处。这就是说,待到主体部分即将取得控制权的一刻,它总是位于 0000:8200 处。

前面已经交代了 grldr 和 grub.exe 的宏观结构都是 “头部+主体”。但是,“头部” 和 “主体” 都有更精细的结构。

[ 本帖最后由 不点 于 2012-10-13 00:32 编辑 ]
回复

使用道具 举报

4#
发表于 2012-10-12 18:24:08 | 只看该作者
我觉得0.4.5应该出正式版了,都测试了3年了。
回复

使用道具 举报

5#
发表于 2012-10-12 20:56:02 | 只看该作者
支持一下,grub更新快,但是文档没人更新。
回复

使用道具 举报

6#
发表于 2012-10-12 21:38:41 | 只看该作者
0.4.5c的确可以出正式版了,最好把文档也系统整理下,像不点大大搞的就很好。

点评

我欲封天 www.wbiquge.com/0_1/  发表于 2014-11-13 17:01
回复

使用道具 举报

7#
发表于 2012-10-12 23:30:37 | 只看该作者
主要是每个命令必须提供详细的说明及用法示例。
grub4dos中还有大量的“秘密武器”,即很多未公开的命令格式,这些尽量也收录一下,省得某年月日后连开发者都忘记有这回事了。
回复

使用道具 举报

8#
发表于 2012-10-14 22:11:03 | 只看该作者
这个确实值得做。不然很多东西就只是局限在经常关注的一些朋友之间。
很多人间接用了grub4dos也不知道。
回复

使用道具 举报

9#
发表于 2012-10-14 22:19:43 | 只看该作者
原帖由 不点 于 2012-10-12 16:17 发表
前面已经交代了 grldr 和 grub.exe 的宏观结构都是 “头部+主体”。但是,“头部” 和 “主体” 都有更精细的结构。


期待不点大师能给我们普及grldr更精细的结构的知识。
回复

使用道具 举报

10#
发表于 2012-10-16 10:04:00 | 只看该作者
我也来发表点建议:
grub4dos发展这么多年,一直没有较好的文档支持。这牵扯到很多原因,一方面开发者没有精力,另一方面使用者也写不全也写不好这样的文档。再者要考虑到国外友人,英文也是一个问题。
lianjiang及sratlf网友曾经做了很好的工作,但都是非网页游览的。从发展来看,做成网站的形式是必须的,这样有利于根据现实情况,与时俱进。而且这样也可以从关心GRUB4DOS的网友中挑选出几个人来及时维护(分配相应的修改权限)。
网站,就牵扯到管理了,无忧既然有自己的网站,我想开辟出一个栏目来做这个事情,也是情理之中。只要网管前期处理好,分配好各自需要做的事情,我想大家(至少我自己)都会愿意做这个事情。 可以通过邀请及申请的方式来分配需要做的事情。
回复

使用道具 举报

11#
 楼主| 发表于 2012-10-16 12:10:22 | 只看该作者
(续)

GRLDR 的头部固定占用 16 扇区(8K)。但是,GRUB.EXE 的头部很长,而且不是固定的长度。因此首先需要确定这个头部的长度。

在 grub.exe 的偏移 0x1F0 处的一个字节,就表示头部所占用的扇区数。

偏移 0 处当然是 DOS 可执行文件的 MZ 标志。偏移 0x02 处的两个字节本来应该是 DOS 的 “EXE file last sector in bytes”,但是已经被 GRUB4DOS 用 EB XX 这条 JMP 指令覆盖掉了。这样做其实破坏了 EXE 的格式,但破坏得不严重,仍然能够被 DOS 认可。接下来的 24 个字节当然是 DOS 的 EXE 头部所需要的其它一些固定域。

从偏移 0x20 开始,是 DOS 设备驱动程序文件的一些格式域。再接下来就是第一扇区的可执行代码了。这个代码模拟 GRLDR 的第一扇区。其实,grub.exe 的开头的 16 扇区(8K)也模仿 GRLDR 的头部(即开头的 8K),完成类似于 GRLDR 的功能,这就使得 grub.exe 可以像 GRLDR 那样被 NTLDR 加载,即,在 boot.ini 中用 C:\GRUB.EXE="GRUB.EXE" 的方式也可以启动 GRUB4DOS。

在第一扇区的末尾处,从偏移 0x1F1 至 0x1FF,是 Linux 内核格式的一些域。这使得 GRUB.EXE 可以被别的软件当作 Linux 的内核来加载和启动。这很重要,因为从某种意义上说,Linux 内核格式也具有事实工业标准地位。所以,把 GRUB.EXE 装扮成 Linux 内核,可以方便其它软件调用 GRUB4DOS。Linux 内核的格式域其实还延伸到第二扇区开头的 48 个字节(参见 Linux 技术文档)。紧接着 Linux 内核的格式域之后,有很多 0x90 字节,这是机器指令 NOP(空操作),目的是适应不同版本的 NTLDR。不同版本的 NTLDR 在加载 GRLDR/GRUB.EXE 时,会把控制转移到这个区域中的不同位置(而不是跳转到 GRLDR/GRUB.EXE 的偏移 0x00 处),所以,我们才需要用很多 NOP 来适应这种情况。这些 NOP 一直延伸到偏移 0x269 处,紧接着在偏移 0x26A 处,当然就是一条跳转指令了,跳转到 GRLDR 的处理代码去执行,开始 GRLDR 的启动过程。这就是 GRUB.EXE 模仿 GRLDR 被 NTLDR 加载时的大致情况。

知道了头部的长度就是 0x1F0 处的一个字节所表示的头部的扇区数,这就等于说,已经可以知道主体部分起始于何处了。

相对于 GNU GRUB legacy 而言,头部是 grub4dos 特有的。头部的唯一作用就是加载主体到内存。而主体就是 GNU GRUB legacy 的核心代码 pre_stage2。因此,当主体获得控制时,头部就没有必要存在了。头部就像三级运载火箭中的一个级,它的目的和作用就是把主体送上轨道,然后自己也就废弃了。当主体获得控制以后,此时再来找头部就找不到了,因为它已经从内存中消失了。

grub4dos 也改造了 GNU GRUB legacy 的核心文件 pre_stage2(它就成为了 grub4dos 的主体部分)。grub4dos 在主体的开头安排了很多核心变量,可以让用户读取或写入。有些变量是不可以写入的,一旦写入,就破坏了 grub4dos 的运行环境。而有些变量是可以写入的,用户通过写入这些变量,来控制 grub4dos 的行为方式。

主体部分在内存中的位置是固定的,它被头部加载在物理地址 0x8200 处,此处可以看作是主体的固有 “轨道”。因此,很多变量都在 0x8200 之后的一个较小的区域之内。当然,grub4dos 内核中的许多结构都属于用户可访问的信息,它们分散在全部内存空间中。例如,0x800 处的 4K 字节是未压缩的内置菜单;0x110000 处的 256K 字节是压缩的内置菜单;而内存虚拟盘的映像通常位于内存的顶部。grub4dos 内核对于内存的使用似乎有些“破碎”的感觉,但这是有一个发展过程的,我们不希望后续的 grub4dos 版本会给用户带来麻烦,因此要尽量保持兼容性。而兼容性的要求,就使得 grub4dos 对内存的使用有些古怪。

头部都是用 assembly 写成的。与 GRLDR 的头部相对应的源程序文件是 grldrstart.S。与 grub.exe 的头部相对应的源程序文件是 dosstart.S。主体也需要一些 assembly 代码。主体的 assembly 代码大多都是在 asm.S 中,也有一些是内嵌于 C 语言的源程序文件中的。

asm.S (的编译结果)正好也就是主体部分从头部那里开始接管控制权的地方,它位于主体的最开头,即,它位于 pre_stage2 的最开头。asm.S 的第一条指令就是一个远跳转。asm.S 接管控制时,CPU 仍旧处于实模式。因此,接管控制后,asm.S 需要为保护模式的 C 语言代码建立运行环境,然后进入保护模式。
在 stage2.c 中有一个叫做 cmain 的函数,它就是保护模式的主程序。保护模式的程序访问硬件,通常是先切换到实模式调用 BIOS 功能接口,完成硬件访问的任务,然后又回到保护模式下,继续执行保护模式的程序代码。

pre_stage2 被头部加载在固定地址 0x8200 处。下面对它的结构进行简要的描述。

偏移 0x05 处是一个控制字节,可以被用户改变,用来控制 grub4dos 的行为。
偏移 0x06 处的两个字节是 GNU GRUB legacy 的内部版本号。
偏移 0x08 处的四个字节是表示启动盘的启动分区的分区号。这里的分区号并不是我们通常理解的分区号,而是稍有不同。四字节中的最高字节应该总是 0x00,最低两个字节通常都是 0xFF,而真正的分区号就记录在次高的字节中。grub4dos 启动的时候,会自动把启动盘的启动分区号填写在这里。启动分区的编号是:0,1,2,3 为主分区,4,5,6,……,0xFE 为逻辑分区。分区号如果是 0xFF,则表示启动盘不含分区表,例如,当启动盘是软盘或光盘的时候就是如此。

偏移 0x11 处的一个字节也是一个控制字节。它的最低位(位 0)用来控制 grub4dos 是否强制认为所有的设备都支持 LBA。用户可以写入它,但通常是不需要写入的,它的默认值是 0,即并不强制认为所有的设备都支持 LBA。它的次低位(位 1)用来指示当前正在运行的 grub4dos 是否被(某个启动软件)当作 Linux 的内核来启动的。启动时,grub4dos 自己会写入它,用户不应该写入它。其它位目前未定义。

偏移 0x6C 处的 4 字节指示内置菜单在什么地方。外部程序可以据此确定内置菜单的起始位置,然后就可以导入、导出内置菜单了。(具体如何计算内置菜单的起始位置,此处暂不涉及。)

偏移 0x80 处的四个字节记录了启动盘的盘号,00 是软盘,0x80 是硬盘。光盘通常是 0x81 - 0xFF 之间的某个值。不同的 BIOS 为启动光盘赋予的盘号也不同。只有最低的一个字节不是 00,其它三个字节应该总是 00。grub4dos 在启动时自动记录启动盘的盘号,用户不需要写入它。启动盘的盘号以及分区号是有可能被改变的。configfile 命令就能够改变它们。BIOS 只使用 00 - 0xFF 之间的盘号,但是,grub4dos 的盘号采用 4 字节的整数。grub4dos 的 (md) 设备所对应的盘号就是 0xFFFF,因此,(md) 设备也可以用 (0xFFFF) 来表示。

偏移 0x138 处的 4 字节表示 DOS 启动盘的信息。最低字节表示 DOS 启动盘的盘号。00 是软盘,0x80 是硬盘。次低字节表示 DOS 启动盘的最大磁头号(即,磁头数 - 1)。次高字节表示 DOS 启动盘的每道扇区数。最高字节目前没有定义。

偏移 0x13C 处的 4 字节表示 DOS 启动盘的启动分区的隐藏扇区数(或者等价地说,是启动分区的起始扇区号)。

当 grub4dos 是从 DOS 下启动的时候,grub4dos 会自动设置这些信息。但是,外部程序加载 GRLDR 或 GRUB.EXE 的时候也可以设置这些信息。如果偏移 0x138 处的四字节整数不等于 0,那么 grub4dos 将强制把 0x138 处的一个字节所表示的盘号当作启动盘,也强制把 0x13C 处的值当作启动分区的起始扇区号(前提条件是,启动分区必须是一个主分区,而不能是逻辑分区)。此时,当然也根据偏移 0x139 和偏移 0x13A 处的值来强制设置启动盘的几何参数。

如果 0x138 处的四字节整数值保持 0 不变,那么还有另外一种办法来强制设置启动盘的信息。首先把软盘分区或者某个主分区(注:它不可以是逻辑分区)的第一扇区(即含有 BPB 的引导扇区)加载到 0000:7C00,然后再把控制权交给 grub4dos,这样,grub4dos 也会检测到 0000:7C00 处的启动盘的信息,并据此强制设置启动盘的信息(尤其是几何参数)。这是模仿 NTLDR 的启动逻辑。NTLDR 就是根据 0000:7C00 处的 BPB 信息来决定启动盘的。

如果其它软件需要加载 grldr,可以把 grldr 放置在一个 16 字节对齐的地址处,设置 DL 寄存器为启动盘的盘号(00 是第一软盘,0x80 是第一硬盘),设置 DH 为 GRLDR 文件所在的分区号(0,1,2,3 是主分区,4,5,6,……,0xFE 是逻辑分区,0xFF 表示启动设备是不含分区表的软盘或光盘),然后递交控制权。(DL 和 DH 寄存器合在一起就是 DX 寄存器)。

如果其他软件需要加载 grub.exe(并且是把 grub.exe 当作 GRLDR 的格式来加载,而不是当作 Linux 内核格式来加载),那么,除了需要像刚才所说设置好 DX 寄存器之外,还需要把 DX 压入堆栈(push DX),然后才可以递交控制权(用 jmp 指令跳转到 grub.exe 的偏移 00 处,即 MZ 标志处。此时的 MZ 标志,也被当作代码来使用了,这是一个奇技淫巧)。启动 GRLDR 时,也可以把 DX 压入堆栈,但这不是必须的,因为 GRLDR 获得控制后不需要从先前的堆栈中找回数据。但 GRUB.EXE 获得控制后需要立即从堆栈中弹出 DX 寄存器的值。

通过 DX 寄存器来传入启动设备的信息,这属于正常的传入方式。而前面介绍的偏移 0x138 处的启动盘信息(以及位于内存 0000:7C00 处的 BPB 信息)则是作为特殊控制手段(即用来强制指定启动盘信息)。当偏移 0x138 处存在启动盘信息时,它就强制指定了启动盘的信息。偏移 0x138 处不存在启动盘信息(即此处的四字节整数为 0)时,grub4dos 就要检查内存 0000:7C00 处是否含有合法的 BPB 信息:如果
内存 0000:7C00 处有合法的 BPB,就用这个 BPB 来决定启动盘的信息;如果内存 0000:7C00 处没有合法的 BPB,就用 DX 寄存器来决定启动盘信息。




[ 本帖最后由 不点 于 2012-10-26 13:55 编辑 ]
回复

使用道具 举报

12#
发表于 2012-10-18 07:32:25 | 只看该作者
哪位能帮忙把GRUB4DOS里的“秘密武器”全部公布,方便整理文档
谢谢!

[ 本帖最后由 2011czmxbb52 于 2012-10-18 07:36 编辑 ]
回复

使用道具 举报

13#
发表于 2012-10-18 09:18:06 | 只看该作者
喜事。


回复

使用道具 举报

14#
发表于 2012-10-22 11:05:04 | 只看该作者
期待grub4dos 的系统文档早日面世!
回复

使用道具 举报

15#
发表于 2012-10-23 10:10:09 | 只看该作者
期待grub4dos 的系统文档早日面世...
回复

使用道具 举报

16#
发表于 2012-10-24 11:12:09 | 只看该作者
write 0x8274 0x2e01
这个是什么意思? 可以解释一下吗?
还有 write 0x600FF 0    write 0x600FE 0 什么的.
可以把这些特殊的命令都贴出来说明一下么?
回复

使用道具 举报

17#
发表于 2012-10-24 22:57:04 | 只看该作者
原帖由 2011phzhc 于 2012-10-22 11:05 发表
期待grub4dos 的系统文档早日面世!



这个是广大坛友共同的心声吧,自己比较菜,只能从精神上默默的支持了。

很早以前,北京科海出过一个MS-DOS的教程,个人觉得很不错,不过太久找不到了。
回复

使用道具 举报

18#
 楼主| 发表于 2012-10-26 16:40:52 | 只看该作者
如何编译 grub4dos


grub4dos 是基于 GNU GRUB legacy 而开发的,而 GNU GRUB legacy 的编译环境是 Linux,因此,grub4dos 也需要一个 Linux 的编译环境。

在 Windows 下也可以建立一个 Linux 编译环境,大致有三种方式:虚拟机方式、colinux 方式、msys 方式。至于说如何在 Windows 下建立 Linux 编译环境,在此不详细说明。

编译环境建好之后,下载 grub4dos 的源码。

可以用以下两条命令中的任意一条来下载 grub4dos 的源码:
  1. svn co http://grub4dos-chenall.googlecode.com/svn/trunk/ grub4dos
复制代码
  1. git clone git://github.com/chenall/grub4dos.git
复制代码
这些命令会把源代码下载到一个新建的文件夹中,以下我们假定这个文件夹是 grub4dos。

如果你不想编译,而仅仅是想看看源代码,这是完全可以的。用浏览器打开以下网址即可:

http://code.google.com/p/grub4dos-chenall/source/browse/
下载完源代码之后,进入 grub4dos 目录,敲入 make 命令就开始自动编译了。

如果编译过程中出错失败,那有可能是因为你的编译环境没有建立好,或者你的编译工具以及相关的 Linux 系统工具不存在,或者版本太旧。

需要说明的是,无论你的 Linux 是 32 位还是 64 位,都可以编译 grub4dos。


[ 本帖最后由 不点 于 2012-10-26 16:42 编辑 ]
回复

使用道具 举报

19#
 楼主| 发表于 2012-10-30 11:59:26 | 只看该作者
如何安装 grub4dos


grub4dos 可以被别的启动软件或者别的操作系统加载运行。此时,grub4dos 无需安装就能运行。DOS 下可以通过执行 grub.exe 而进入 grub4dos 的环境。其他软件(GRUB legacy,GRUB2,LILO,Loadlin,以及 Linux 的 kexec 等)可以把 grub.exe 当作 Linux 的内核来加载而进入 grub4dos 的环境。fbinst、NTLDR、BOOTMGR、WEE、syslinux(以及 grub4dos 本身)等引导管理器软件既可以加载 GRLDR,也可以加载 GRUB.EXE。顺便说,有些人使用未公开(或半公开)的启动方法,即,把 grldr 更名为 ntldr 或 bootmgr,而让微软的引导代码来引导 grub4dos(如果 GRLDR 位于 FAT32、NTFS 分区,这是没问题的,但如果 GRLDR 位于 FAT12、FAT16 分区,就会失败)。同样地,安装在 MBR 或 PBR 上的 grldr 引导代码也能加载微软的 NTLDR 和 BOOTMGR(支持 FAT12、FAT16、FAT32、NTFS 分区),只要把 NTLDR 和 BOOTMGR 改名为 GRLDR 便可(当然也可以通过把 MBR、PBR 中要搜索的 GRLDR 文件名更改为 NTLDR 或 BOOTMGR 来达到同一目的)。

以上这些启动方式不需要安装 grub4dos,最多只是需要配置一下。比如常见的 NTLDR、BOOTMGR 可以通过在 BOOT.INI 中添加

C:\GRLDR="GRLDR"
C:\GRLDR.MBR="GRLDR.MBR"
C:\GRUB.EXE="GRUB.EXE"

的方式来配置 grub4dos 的启动。再比如 DOS 下启动 grub.exe 可以通过修改 config.sys 以及 autoexec.bat 来实现。

下面谈谈需要安装的情况。如果要把 grub4dos 的启动代码部分放在 MBR 或者 PBR 上,这就需要安装了。MBR 是整个硬盘的最开头的一个扇区,但在 GRUB4DOS 中提到 MBR,则通常是指硬盘开头的一个连续区域,这个区域不被任何分区占据,通常有 63 个扇区之多,但它本质上是由磁盘管理软件(如 FDISK)在对硬盘进行分区的时候决定的,可大可小,而不是固定的。PBR 是分区的引导扇区,微软称之为 VBR(卷的引导记录
,微软把文件系统的一个实现叫做一个卷),在 DOS 时代,它还被称为 DBR(即 DOS 引导记录)。bootlace 中有个参数的名称中含有 osbr,它也是同样的意思。在开发 bootlace 之初,开发者不曾知道微软是用 VBR 来称呼这个概念的,否则,开发者可能会用 vbr 而不是创造一个新的 osbr 的概念。卷的引导扇区通常位于卷的最开头。所以,一个卷其实就是一个具体的、已经创建好了的文件系统。CDROM 采用 iso9660 文件系统,它的引导扇区不是位于卷的最开头。软盘没有 MBR,但它有 VBR。对于软盘来说,它不存在分区,所以,它的引导扇区不能称为 PBR,而只能称为 VBR。为了统一起见,以下都用 VBR 这个称呼。MBR 是含有分区表的,它是硬盘的概念。光盘没有 MBR 的概念(光盘与软盘和硬盘的不兼容程度增加了)。光盘的扇区大小是 2048 字节。但 BIOS 也使用 int13 来访问光盘,所以,光盘还可以算是磁盘的近亲。正因如此,我们可以把硬盘、软盘上的 ISO 文件仿真为光盘,也可以把光盘上的 IMG 文件仿真为硬盘、软盘。grub4dos 中还有另外一种设备,它就是 pxe 的设备 (pd)。它没有扇区的概念,只有文件的概念。因此,它不能有 MBR、VBR、PBR 这些概念。它不是一个 int13 设备。因此,它无法被直接仿真,只能把它的 ISO 或 IMG 文件加载在内存中进行间接仿真。PC BIOS 平台下的 USB 设备的启动都是采用软盘、硬盘、光盘的模式,即,都是以 int13 设备的方式来启动。

我们所说的安装,那就是针对软盘、硬盘模式而言的。光盘上的安装,其实不能称之为安装,而通常说成是“制作可启动光盘”。传统意义上的光盘是只读的,它不能写入。新型光盘可以写入,但它不像软盘、硬盘那样可以随意写入,而是一次性写入整个文件系统(操作系统之下可以随机写入单个文件,这与我们的启动软件无关,因此这里不涉及它)。光盘的 iso9660 文件系统有一个好处,即,文件都是连续的,没有碎块。

grub4dos 提供的安装工具是 bootlace.com。它是一个 DOS 可执行文件,同时也能运行于 Linux 32-bit。如果是 Linux 64-bit,则需要使用 bootlace64.com。如果只是运行于 DOS 下,则两者没有差别:无论 bootlace.com 还是 bootlace64.com 都行。以下就以 bootlace.com 为例来说明。

bootlace.com 只是一个命令行的工具,没有图形界面。它可以运行于 Win9x,但不能用于后来的 Windows 系统(如 XP)。它的用法是:

        bootlace.com  [OPTIONS]  DEVICE_OR_FILE

其详细介绍参见 README_GRUB4DOS.txt 文件。

Windows 下有个叫做 BOOTICE 的图形界面的工具可以安装 grub4dos 到 MBR 和 PBR。另外,grubinst 也可以安装 grub4dos。还有别的一些工具,如 WinSetupFromUSB,这里不再详述。



[ 本帖最后由 不点 于 2012-10-31 17:06 编辑 ]
回复

使用道具 举报

20#
 楼主| 发表于 2012-11-16 10:27:37 | 只看该作者
今天对某件事有所感触,所以想在这个帖子中插一段话。

作为 grub4dos 的开发者之一,我非常重视兼容性问题,总是竭尽全力去达到与各类相关软件的兼容。

文档没写好,这确实是个欠缺。但这决不是故意的,而是因为没有时间、没有精力去写。

我本人从未有过故意制造与别的软件不兼容的念头。grub4dos 的开发者们至今没有一个案例是故意制造不兼容性的,与任何软件都没有过。

我把兼容性问题看作头等大事,在力所能及的范围内,力图解决所有的不兼容问题。

而故意制造不兼容,则被我视为有某种阴暗心理,是不健康的,是一种病态,是人格的一种缺失,甚至也不符合我的道德标准。

我认为,我的心理还算健康。如果不怕人家说我自夸,那我可以说,我的心理是十分健康的。

-------------------------

假如有人怀疑并询问我 “为何说这段话?” 对不起,恕不答复。你可以自己猜,依你的能力,你猜到多少,就是多少。
回复

使用道具 举报

21#
 楼主| 发表于 2012-11-16 14:01:26 | 只看该作者
有人抱怨 grub4dos 开发了无用的功能,或者用处不大的功能,造成不稳定。

这就好比厨师做菜,众口难调。

从开发者的角度,开发者们很重视兼容性,不会因为开发新功能而丧失兼容性。

开源软件的开发,需要用户给以测试,给以支持。不能够因为软件开发过程中存在的一些细小问题,而否定一大片,然后认为开发者这也不对,那也不对;这也要改进,那也得改变,忙乎开了,忙得不亦乐乎。为什么呢?你没有平和之心,缺乏耐心,缺乏理解力。你的建议可能很“正确”,但正确是加引号的,不是绝对的正确。正确性总是相对的。当你提出的建议,开发者无法给以满足,或者没有能力满足,或者是不方便予以满足的时候,这种正确性就是无效的正确性,就是“假正确”。提建议是应该受到欢迎的,但有少数一些建议,跟 “吹毛求疵” 差不多,这样的建议,开发者通常是予以忽略的。开发者既要广泛接受建议,接受批评,有海纳百川的胸怀,又要有敏锐的观察力,识别出那些不切实际的建议,而予以拒绝,这是哲学上的对立统一,是不矛盾的。不能够由于受到不良建议的影响,而找不到北、乱了阵脚。不要让那些不良建议或者不成熟建议,把开发者自己 “指挥” 得像无头苍蝇、 “迷三倒四”、“晕头转向”。

---------------

开发者投入精力来开发,是做贡献。你是用户,你也可以做点贡献。你测试时遇到问题,前来详细报告,这就是最好的贡献。

如果你是发行版的开发者,你自然愿意选定一个稳定的 grub4dos 版本。不要抱怨开发者开发了无用的功能,让软件不稳定。要理解到,这种不稳定是不可避免的,如果测试者少,那就容易出问题。世上哪有绝对的完美?出问题是正常的。出了问题,只要有人报告,通常开发者马上就给解决了。如果你要求绝对完美,绝对不出问题,那要求太高了,很难做到的。微软也做不到。有人说微软做到了,那是看微软很多年才发布一个版本的发布周期中的那个成熟版。而我们的开发可是完全不同的状况,我们一秒钟就把编译结果上传了,用户使用新软件的速度甚至比开发者本人还要超前。这就像赌博,赌对了的话,没有毛病,超级好。也有赌错的时候,那样,用户就成了小白鼠,成了试验品。作为某发行版的制作者,您需要为您的用户选择一个您认为合适的版本。这需要您自己的判断力。太老的版本,bug 多。太新的版本,也许会引入新的 bug。所以这就需要您自己做出选择。
回复

使用道具 举报

22#
发表于 2012-11-18 14:41:26 | 只看该作者
不点辛苦了!

开发出这么强大、灵活、完善的软件,是一件很累的工作。
需要长时间、坚持不懈的努力,向您敬礼!

能否介绍一下外部程序部分。
回复

使用道具 举报

23#
发表于 2012-11-23 18:52:22 | 只看该作者
不点老师,能不能说说grub4dos和grub的区别,还有编写grub4dos的初衷啊~
谢谢~
回复

使用道具 举报

24#
 楼主| 发表于 2012-11-23 19:56:44 | 只看该作者

回复 #22 2011hubeilcsun 的帖子

外部程序目前主要就是 chenall 所开发的几个程序,我个人开发的也有,比如 memcheck 是我开发的,但它不常用。很抱歉,虽然我知道开发 grub4dos 外部程序的人不止一个,但究竟有多少个人在开发,我也不知道,甚至就连 chenall 所做的工作,我也并不熟悉。我觉得由 chenall 来介绍外部程序,比较合适。
回复

使用道具 举报

25#
 楼主| 发表于 2012-11-23 20:08:24 | 只看该作者

回复 #23 2012yumihu 的帖子

谢谢您对 grub4dos 的支持与关心。

grub4dos 是基于 grub 而开发的。grub 是 GNU 的,或者说它是由自由软件基金会开发的。

GRUB 开发团队目前把注意力放在 GRUB2 上了,而把先前的旧的 GRUB 称为 grub legacy,通俗的意思就是,那是老掉牙的、过时的 grub 版本了。但偏偏 grub4dos 就是在 grub legacy 的基础上开发的。那时候,还不存在 GRUB2。GRUB2 原来叫做 PUPA,那时候,它还不属于 GRUB。后来,PUPA 发展成了 GRUB2。

由于 grub2 是从 PUPA 发展来的,所以,grub2 与 grub legacy 不兼容。我个人认为,grub2 应该仍旧叫做 PUPA 比较合适,PUPA 也没必要改名为 GRUB2。为什么呢?因为既然不兼容,就不应该把两样东西放在一起,而当作同一个软件的不同版本(我觉得这很牵强)。我在这里这么说只是表示我自己的看法而已,没有干涉 grub2 的开发者们的意思,开发者愿意取什么名字,那是开发者自己的事,由开发者自己做主。

在 2003 年的时候,我已经有了 Linux 的使用经验(我主要活动于 Linux 伊甸园),知道了 grub 比 LILO 更好。grub 的命令行很强大,这一点我很欣赏。Linux 下可以有一个叫做 grub 的可执行程序,因此我在想,应该也可以在 DOS 下弄一个吧?所以,我就研究了 grub 的代码。结果成功了,确实能够制作出一个 grub.exe 而运行于 DOS 下。在当时,有个叫做 Loadlin 的程序也是可以运行于 DOS 下的(Loadlin 能够从 DOS 下加载 Linux),因此,对于 Linuxer 们来说,制作出 grub.exe 并不存在迫切性,其意义不大,顶多也就是“锦上添花”而已。或者说,主要是由于其趣味性才开发它的,是用来玩的,而不是冲着它的“意义”来开发的,因为不知道它能有什么意义。然而,出人意料的是,grub.exe 竟然有人喜欢,立即就被人介绍到别的 Linux 网站上。发布它的时候,就随便取了个名字,叫做 grub for dos。很显然,这并非一个正规的名字。与其说这是它的名字,不如说它根本就没有名字。

grub for dos 确实被 Linux 社区的人重视了,但遗憾的是,重视的人数太少,形不成“群体效应”。原因正如前面所解释的,绝大多数 Linuxer 们不需要它,缺乏必需使用 grub.exe 的理由。

grub for dos 后来被 Wengier 发现了,这才是它获得新生的机会。Wengier 大力宣传 grub for dos,他甚至在英文网站上宣传。Wengier 是一个 DOS 开拓者,因此,他看问题的角度与一个纯粹的 Linuxer 不同。Loadlin.exe 只能加载 Linux,而 grub.exe 却可以加载各种操作系统(包括可以加载 DOS,我猜,这正是 Wengier 所看重的)。由此显现出 grub.exe 的优势,显示出其多重启动的优势。

这段历史说明了,grub4dos 为何至今仍然主要只是在 DOS、Windows 社区获得应用。那是因为,DOSer、Windowser 们需要它,而 Linuxer 们则缺乏必需使用它的理由,或者换句话说,不需要它。这是自然而然的,没有什么特别之处。

[ 本帖最后由 不点 于 2012-11-23 23:25 编辑 ]
回复

使用道具 举报

26#
发表于 2012-11-26 21:02:13 | 只看该作者
grub4dos旧版的文档有些地方写的很专业化了,不利于水平一般的人看。而且一个好的文档应该加入大量的示例。
回复

使用道具 举报

27#
发表于 2012-11-26 21:31:11 | 只看该作者

回复 #25 不点 的帖子

不点老师客气了~谢谢你对我的讲解~
我想GRUB2DOS能不能像变蛇龙那样有图形化的美化,在就是支持鼠标更好了~
可能是我不了解,望不点老师批评指正~
谢谢~
在加上支持MAC OS的的启动~
美美的~
呵呵~
回复

使用道具 举报

28#
发表于 2012-11-27 08:28:56 | 只看该作者
不点老师讲得太好,不过没全看懂,得仔细看,慢慢来,我非常喜欢grub4dos
回复

使用道具 举报

29#
 楼主| 发表于 2012-11-27 12:43:19 | 只看该作者
原帖由 拿铁不加糖 于 2012-11-26 21:02 发表
grub4dos旧版的文档有些地方写的很专业化了,不利于水平一般的人看。而且一个好的文档应该加入大量的示例。


这个建议非常切合实际。一个完善的文档,本来就应该如此。

有些软件的开发者素质高,一开始就有很完备的文档。比如,我最近正在研究的 ramooflax 这个软件,我就很佩服这个作者能够把文档写得那么好。

bean 曾经写了一个不错的文档,但网站被攻击,文档已经很难访问了。bean 由于工作忙,现在没有太多时间来照顾 grub4dos 了。我想,文档的事,也算是一个大事,将来的开发者们也应该投入精力做好这个工作。

[ 本帖最后由 不点 于 2012-11-27 12:56 编辑 ]
回复

使用道具 举报

30#
 楼主| 发表于 2012-11-27 12:55:12 | 只看该作者

回复 #27 2012yumihu 的帖子

grub4dos 支持彩色背景图片,但目前不支持鼠标。因此,grub4dos 要发展成图形界面的操作系统,那还有很长的路要走,因此,目前把它看成是不可能的。

grub4dos 支持任何操作系统的启动,因为任何操作系统都会有自己的引导扇区,而 grub4dos 就可以链式加载引导扇区的。

对于主流的操作系统,grub4dos 除了支持加载引导扇区以外,还支持加载其引导管理器,例如 NTLDR。但那些非主流的操作系统就没那么幸运了。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-9-22 14:43

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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