bean对grub4dos作出的巨大贡献总结

bean对grub4dos作出的巨大贡献总结

===================================================================
bean对grub4dos作出的巨大贡献总结:
一、2005-12-3给grub4dos打上了WinME补丁,这个补丁修正了chainloader 不能启动WinME的IO.SYS的问题。 
   http://bbs.znpc.net/forum.php?mod=viewthread&tid=359&extra=page%3D10
   2005-12-10新版的WinME补丁
   http://bbs.znpc.net/forum.php?mod=viewthread&tid=359&page=1&fromuid=12697#pid2138
二、2007-2-6 grubinst更新:增长对NTFS文件系统的本地支持
   http://bbs.znpc.net/forum.php?mod=viewthread&tid=2249&highlight=%2Bbean
   2007-2-23grubinst更新:支持grub2和NTFS压缩文件
   http://bbs.znpc.net/forum.php?mod=viewthread&tid=2311&highlight=%2Bbean
   2007-8-8grubinst更新:能够跳过严格的mbr测试
   http://bbs.znpc.net/forum.php?mod=viewthread&tid=3885&highlight=%2Bbean
三、2007-2-15编写了通用引导程序grldr.mbr,支持安装到mbr,支持经过vista和win7中加载。
   http://bbs.znpc.net/forum.php?mod=viewthread&tid=2300&extra=page%3D10
   2007-3-18提出把GRLDR.MBR做为通用的引导程序的一些想法
   http://bbs.znpc.net/forum.php?mod=viewthread&tid=2461&extra=page%3D10
四、2007-3-4创建了GRUB4DOS项目空间@gna.org,https://gna.org/projects/grub4dos/
五、2007-3-9编写了GRUB4DOS中文文档@SF.net,增长grub4dos高级功能和grub4dos命令索引说明
   http://bbs.znpc.net/forum.php?mod=viewthread&tid=2369&extra=page%3D10
六、2007-4-7编写了修改内置菜单的命令行工具grubmenu
   http://bbs.znpc.net/forum.php?mod=viewthread&tid=2664&highlight=%2Bbean
七、2007-4-18日为GRUB4DOS增长了PXE网络启动功能
   http://bbs.znpc.net/forum.php?mod=viewthread&tid=2931&highlight=%2Bbean
八、2007-4-23提出了在GRUB4DOS中实现内存管理和动态模块的想法
   http://bbs.znpc.net/forum.php?mod=viewthread&tid=3117&extra=page%3D10
九、2007-7-8关于grub4dos中启动代码分离的想法
http://bbs.znpc.net/forum.php?mod=viewthread&tid=3736&highlight=%2Bbean
   2007-10-10提出GRUB4DOS中启动代码分离的具体构思,包括采用模块化的设计,建议把grub4dos分为启动模块、分区模块、文件系统模块、格式处理模块、扩展功能模块、通用函数模块、脚本解析模块
   http://bbs.znpc.net/forum.php?mod=viewthread&tid=3736&highlight=%2Bbean
十、2007-10-15 提出了新一代GRUB4DOS的想法,包括启动管理器分离、使用Unicode,不区分中英文版本、利用gettext实现多语言支持、内存管理器和动态模块、图形界面的改进
   http://bbs.znpc.net/forum.php?mod=viewthread&tid=4156&highlight=%2Bbean
十一、2007-12-6日编写了loadbin在不一样的启动管理器中启动grub,grub2,grub4dos 和 ntldr
   http://bbs.znpc.net/forum.php?mod=viewthread&tid=4273&extra=page%3D6
十二、2007-12-20日提出了关于迷你grub4dos的想法
   http://bbs.znpc.net/forum.php?mod=viewthread&tid=4311&highlight=%2Bbean
   并与2007-12-25日发布了迷你版grub4dos测试版
   http://bbs.znpc.net/forum.php?mod=viewthread&tid=4335&highlight=%2Bbean
1三、2007-12-21日使用makerom制做grub,grub4dos,grub2和grldr.mbr的启动bootrom
   http://bbs.znpc.net/forum.php?mod=viewthread&tid=4315&highlight=%2Bbean
1四、2008-3-28grub4dos新功能测试:在不一样时间段执行不一样的命令checktime。使用它,你能够使得某些命令只有在某一时间段内才执行。
   http://bbs.znpc.net/forum.php?mod=viewthread&tid=4591&highlight=%2Bbean
1五、2009-1-1为grub4dos增长gfxmenu支持
   http://bbs.znpc.net/forum.php?mod=viewthread&tid=5496&extra=page%3D7
1六、2009-5-4日提出关于万能启动U盘的想法
   http://bbs.znpc.net/forum.php?mod=viewthread&tid=5629&extra=page%3D1
   2009-5-6日万能启动u盘制做工具fbinst (最新稳定版本1.2)
   http://bbs.znpc.net/forum.php?mod=viewthread&tid=5631&extra=page%3D8
   2009-5-29日fbinst v1.4:增长文件管理功能
   http://bbs.znpc.net/forum.php?mod=viewthread&tid=5664&extra=page%3D8
   2009-6-7日fbinst v1.5:分离菜单文件,支持syslinux
   http://bbs.znpc.net/forum.php?mod=viewthread&tid=5669&extra=page%3D1&page=1
   fbinst启动问题专用贴
   http://bbs.znpc.net/forum.php?mod=viewthread&tid=5663&extra=page%3D1
   最新 fbinst 1.6 正式版,2010年8月10日更新,1楼有 FbinstTool 10601正式版
   http://bbs.wuyou.com/viewthread.php?tid=169595
==============================================================================================
bean对grub4dos所作的贡献
http://bbs.znpc.net/forum.php?mod=viewthread&tid=359&extra=page%3D10
bean发表于 2005-12-3 16:43
grub_for_dos 0.4.1 的 WinME 补丁php

这个补丁修正了chainloader 不能启动WinME的IO.SYS的问题。html

基本原理:
不一样于Win98以及之前的IO.SYS,WinME的IO.SYS是通过压缩的,所以在把IO.SYS复制到内存后,要通过解压后才能使用,其基本过程以下:linux

一、把IO.SYS从0x800开始的数据读入70:0。(此步同Win98)
二、把70:0的数据移到常规内存的最高处。
三、以块的形式把数据解压回70:0
四、把di设为解压后数据的长度
五、设置dx的值,而后转入70:0执行。(此步同Win98)ios

WinME 的IO.SYS的结构:web

0-0x7FF: 4个扇区的BOOT程序
0x800: word 0x4D43 ( 'CM' ) 压缩IO.SYS的标志。
从0x802开始是压缩块,每块以3个字节的属性字段开始。
字节0:
0 - 块是非压缩块
1 - 块是压缩块
对于压缩块,从块开始+5处是一个0x5344的字。
字节1-2:长度字段len
对于压缩块,下一个块的开始位置是本块位置+1+len
对于非压缩块,下一个块的开始位置是本块位置+1+2+len算法

若某一块的长度为0,则它标志着数据块的结束。spring

在数据块后紧接着的第一个段,是程序块,它的结构为:
字节0-1:标志字节 0x4D43 ( 'CM' )
字节2-3: 解压程序相对于本块开始的位移
字节4-结束:解压程序的代码和数据shell

我在附件中包含了此补丁的源程序grub-winme-1129,此补丁对应于grub_for_dos-2005-11-29.zip,而且应该在grub-0.97-patch4-emulation后使用。windows

附件中的grub.exe和grldr是编译后的版本,它应用了补丁patch1 - patch5, 以及grub-winme-1129。api

我所使用的IO.SYS也包含在附件中,它来自于英文版WinME, WinVer是 4.90.3000,你们能够测试一下其它的版本。
附件
 grub_winme_patch.tar.gz (265.54 KB)
2005-12-3 16:43, 下载次数: 237
使用源文件编译的朋友请注意一下,以上的补丁文件由于忘了使用条件编译,所以在编译Grub Shell时会出现变量chain_is_winme没有找到的错误,修正后的补丁文件以下。
附件
 grub-winme-1129 (5.18 KB)

http://bbs.znpc.net/forum.php?mod=viewthread&tid=359&page=1&fromuid=12697#pid2138
bean发表于 2005-12-10 08:09 
新版的WinME补丁

附件里包含了新版的WinME补丁,这个版本彻底用C语言编写,并且增长了解压的部分(原来版本是使

用IO.SYS里面的函数来解压)。

IO.SYS里面使用了滑动窗口的压缩(LZ77),而位移和长度字段均使用了变长字节编码:

位移:
00:后接6位数据,位移范围 0 - 0x3F
110: 后接8位数据,位移范围 0x40 - 0x13F
111: 后接12位数据,位移范围 0x140 - 0x113F
01/10: 后面7位是直接的数据,数据的最高位取0/1

当出现位移0x113F是,代表一个段的结束。解压后,除了最后一个段外,其余各个段的长度都应该是

512。

长度:
1:没有后接位,长度是2
01:后接1位数据,长度范围 3-1
001:后接2位数据,长度范围 5-8
0001:后接3位数据,长度范围 9-0x10
00001: 后接4位数据,长度范围 0x11-0x20
000001:后接5位数据,长度范围 0x21-0x40
0000001: 后接6位数据,长度范围 0x41-0x80
00000001: 后接7位数据,长度范围 0x81-0x100
000000001: 后接8位数据,长度范围 0x101-0x200
000000000: 做出错处理

附件里还包含一个独立的应用程序expios,它把关于IO.SYS的处理分离出来,能够用做测试。其使用

以下:

一、expios io.sys

若是没有输出信息,则基本的解压检测经过

二、expios io.sys io_out.sys

把解压后的io.sys写入io_out.sys中,若是用二进制编辑器打开io_out.sys,应该能够看到英文的字

符串。解压后的io_out.sys不能直接做为IO.SYS,不过能够使用grub来启动。

expios.exe是编译后的Win32命令行程序,其余系统的用户能够用gcc来编译:

gcc -D__unix -o expios expios.c

grub-winme-c-1129是补丁的源程序,它与前一版本的grub-winme-1129不兼容,请不要同时使用。
附件
 grub_winme_c.tar.gz (392.94 KB)
2005-12-10 08:09, 下载次数: 168

http://bbs.znpc.net/forum.php?mod=viewthread&tid=2249&highlight=%2Bbean
bean发表于 2007-2-6 
grubinst更新:增长对NTFS文件系统的本地支持

下载地址:

http://grub4dos.sourceforge.net/grubinst-1.1-beta5-bin-w32.tar.gz
http://grub4dos.sourceforge.net/grubinst-1.1-beta5-src.tar.gz

从grubinst 1.1 beta5 起,增长了对NTFS文件系统本地支持的代码,也就是说,如今在
NTFS上引导GRLDR的时候,再也不要求在分区上有微软的启动代码。把GRLDR.MBR安装到MBR
后,其启动代码能自动搜索和引导硬盘上全部FAT16/FAT32/NTFS/EXT2分区(包括主分区
和扩展分区)上根目录的GRLDR文件。

GRLDR的NTFS引导代码也能够安装到分区上,不过要注意不要安装到系统分区上,不然它
将会覆盖微软的启动代码。

另外,grubinst增长新参数--boot-file,利用它能够指定在NTFS分区上启动文件的名字,
缺省值是GRLDR。例如,利用

        grubinst --boot=file=grldr.new DEVICE_OR_FILE

安装后,在启动时将会在NTFS上引导grldr.new而不是grldr,当前该功能只有在NTFS分区
上实现,在其余FAT16/FAT32/EXT2分区上,依然只能引导GRLDR。要注意的是,启动文件
的名字长度最多只能是11个字符(包括 "." ),而且必须是英文。

利用该功能,你甚至可让GRLDR.MBR在NTFS分区上引导微软的启动管理器:

        grubinst --boot-file=ntldr DEVICE_OR_FILE

当前NTFS访问代码的限制:
一、不支持压缩或加密的GRLDR文件,分区的根目录也不能是压缩的。
二、不支持$ATTRIBUTE_LIST属性,也就是说,当根目录的文件很是多或在硬盘上的分配非
常散的时候,有可能找不到其中的GRLDR。

关于源代码:

NTFS的启动代码是在ntfsbs.S里,它能够独立编译,编译后会生成NTFS的启动扇区代码
ntfsbs.bin。

grldrstart.S是由不点的Grub4Dos 0.4.2的代码中修改而来,编译后会生成GRLDR.MBR。
修改的地方有:

一、用#include "ntfsbs.S" 把NTFS的代码加入到grldr.mbr中,编译后,NTFS的启动
代码的位置是0xA00,长度为3个扇区。最终的grldr.mbr为16个扇区。

二、当搜索到NTFS分区时,直接使用grldr.mbr内的代码引导,而再也不装载硬盘上可能
存在的微软启动代码。

三、出错返回的代码从0x7e00转到0x8200,这是因为如今NTFS启动扇区为3个扇区,装载
到内存后将占用0x7c00 - 0x8200的空间。

[ 本帖最后由 bean 于 2007-2-6 13:06 编辑 ]
http://bbs.znpc.net/forum.php?mod=viewthread&tid=2249&page=3&fromuid=12697#pid49513
不点发表于 2011-12-26
您使用的 grubinst,属于比较旧的版本了。bean 已经再也不开发 grubinst 了。因此,不建议采用 grubinst。若是您实在想用 grubinst,建议使用英国人 steve 改造后的版本,或者使用 chenall 改造的版本。

发现您是在 windows 下使用 grubinst,所以,建议用 BOOTICE 这个软件来代替。

请在搜索引擎里面找相关的资料和软件。

关键点:老版本的 grubinst 中的引导代码很旧,不少 bug 未修复。所以建议采用较晚开发的软件(或者版本)。

用 grub4dos 自带的 bootlace.com 也是能够安装的,您能够读一读 readme。


http://bbs.znpc.net/forum.php?mod=viewthread&tid=2311&highlight=%2Bbean
发表于 2007-2-23 17:32
grubinst更新:支持grub2和NTFS压缩文件

beta7:
* 增长对NTFS压缩文件的支持

beta6:
* 支持设置启动文件的名字和装载的段地址
* 支持导出grldr.mbr文件
* 支持引导grub2内核
* 修正了部分NTFS分区访问的bug

使用简介:

一、支持设置启动文件的名字和装载的段地址:

grubinst增长了参数--boot-file和--load-seg,能够用来设置启动文件的名字和装载的段地址,例如:

grubinst --boot-file=grldr_1 --load-seg=3000 DEVICE_OR_FILE

引导启动文件grldr1,装载的地址是 3000:0000

使用该参数,GRLDR.MBR的启动代码可用于装载ntldr:

grubinst --boot-file=ntldr DEVICE_OR_FILE

注意1:启动文件名字的最大长度是7,并且不能违反8.3的命名规则

注意2:--load-seg参数对于EXT2分区上的启动文件无效


二、导出grldr.mbr文件

可用--output参数导出grldr.mbr文件:

grubinst --output C:\grldr.mbr

你能够使用其它的参数,好比--boot-file等,参数的效果将会保留在导出的GRLDR.MBR文件中,例如:

grubinst --boot-file=grldr_1 --output C:\grldr.mbr

用该GRLDR.MBR启动时,将会搜索启动文件grldr_1而不是grldr

注意:某些参数将无效,例如--boot-prevmbr-first


三、支持引导grub2内核

可用参数--grub2指定引导grub2内核:

grubinst --grub2 DEVICE_OR_FILE

grub2内核的缺省名字是g2ldr,你也能够用--boot-file来改成其余的名字

要生成grub2内核,首先用mkimage(该程序在grub2源代码中)来生成core.img,而后加上头g2hdr.bin:

cat g2hdr.bin core.img > g2ldr

四、修正了部分NTFS分区访问的bug

修正了某些形成Large Structure的bug

从beta7开始,支持NTFS压缩文件和稀疏文件

http://bbs.znpc.net/forum.php?mod=viewthread&tid=2300&extra=page%3D10
bean发表于 2007-2-15 10:22 
利用NT的启动管理器引导GRLDR.MBR

通过适当的修改,GRLDR.MBR能够直接由NT的启动管理器来引导,

在2000/XP/2003下,在boot.ini的最后加上一行:
C:\GRLDR.MBR="Boot GRLDR.MBR"

在Vista下,能够使用bcdedit,方法在fujianabc的贴子里有介绍,摘录以下:

md a:\boot 建立a:\boot文件夹
bcdedit /createstore a:\boot\bcd  新建一个bcd文件
bcdedit /store a:\boot\bcd -create {bootmgr} /d "Boot Manager"  新建一个用bootmgr加载的启动项
bcdedit /store a:\boot\bcd /create /d "bootsect" /application bootsector 此项目用bootmgr加载一个bootsector项
执行上面命令后返回一个{ID},而后执行
bcdedit /store a:\boot\bcd /set {ID} device boot  设置启动设备
bcdedit /store a:\boot\bcd /set {ID} path \grldr.mbr  设置启动扇区路径和文件名
bcdedit /store a:\boot\bcd /displayorder {ID} /addlast  加入以上设置项目

固然,你还须要把附件中的grldr.mbr文件拷贝到C:\下。

若是引导正常,GRLDR.MBR运行,它会在硬盘上全部的FAT16/FAT32/NTFS/EXT2分区的根目录寻找并
装载GRLDR,其效果就和把GRLDR.MBR安装到MBR里同样。

原理:

我发现NTLDR引导启动文件的方式很是奇特:

若是文件大小<16扇区(8K),那么整个文件被装载到D00:0,不过只有第一个扇区的内容被拷贝
到0:7C00中,并且开始运行的地址是0:7C00。

若是文件大小=16扇区(8K), 那么整个文件被装载到D00:0,并且,开始运行的地址是D00:200

文件大小>16扇区(8K)的状况没有测试,不过应该和=的状况是相似的。

请你们在不一样的系统上测试一下。

更新:根据不点的提示改动了一下grldr.mbr,如今该版本应该能够适用于XP系统下

更新:修改了NTFS的代码,如今应该可以解决Large structure的问题

[ 本帖最后由 bean 于 2007-2-22 15:29 编辑 ]
附件
 grldr.mbr (8 KB)
2007-2-22 15:29, 下载次数: 1999

http://bbs.znpc.net/forum.php?mod=viewthread&tid=2335&extra=page%3D10
bean发表于 2007-3-4 13:51
GRUB4DOS项目空间@gna.org

在gna.org上的GRUB4DOS页面:

https://gna.org/projects/grub4dos/

用户使用的简单介绍:

一、用web界面浏览代码

直接使用如下的网址:

http://svn.gna.org/viewcvs/grub4dos/trunk/

下载空间:

http://download.gna.org/grub4dos/

之后GRUB4DOS编译版本可能会上传到这里。

二、匿名下载最新代码

svn co svn://svn.gna.org/svn/grub4dos/trunk grub4dos

svn co http://svn.gna.org/svn/grub4dos/trunk grub4dos

下载旧版本:

svn co svn://svn.gna.org/svn/grub4dos/tags/grub-0.97 grub4dos
这是原始版本grub-0.97

svn co svn://svn.gna.org/svn/grub4dos/tags/grub4dos-0.4.2 grub4dos
这是grub4dos 0.4.2正式版

3. 邮件列表

相应于svn有一个邮件列表,能够在如下网址订阅:

https://mail.gna.org/listinfo/grub4dos-commits/

填好你的邮箱地址,和任选一个密码后,即可按subscribe订阅

订阅了该邮件列表后,每当svn有新的版本commit时,都会以邮件的形式通知你。

开发者使用简单介绍:

gna.org上关于项目管理的文档在这里:

https://gna.org/cookbook/?group=grub4dos

一、开发者访问代码

1) 运行ssh-keygen -t rsa,生成私匙和公匙
该命令生成 ~/.ssh/id_rsa和~/.ssh/id_rsa.pub文件,前者私匙,后者是公匙
该命令还提示你输入密码pass phrase,在如下的svn中,在提示输入pass phrase时使用
假如你以为每次输入密码麻烦,能够不设密码,也能够使用ssh-agent:

ssh-agent $SHELL
ssh-add ~/.ssh/id_rsa

ssh-agent命令调用一个新的shell,在其中运行ssh的私匙由ssh agent控制。
ssh-add把私匙加入ssh agent,命令中要求输入pass phrase,正确输入后,之后的svn就再也不须要输入了

2) 登录到gna.org,在左边工具栏点"My Account Conf",而后点"Edit the 1 SSH Public Key
registered", 而后用编辑器打开~/.ssh/id_rsa.pub,把里面的内容(是很长的一行)拷贝到
Key #1里,而后点"Update"。注意:在修改了公匙后,须要必定的时间才能生效,在最坏的状况下,
等待时间是3个小时。

3) 用如下的命令得到代码:

svn checkout svn+ssh://<membername>@svn.gna.org/svn/grub4dos/trunk grub4dos

<membername>是你在gna.org的用户名

2. 上传文件到下载空间

rsync --delete  -avr --rsh="ssh" . <membername>@download.gna.org:/upload/grub4dos

或者

scp filename <membername>@download.gna.org:/upload/grub4dos/

ssh的配置和1中是同样的

三、svn使用简单介绍

详细使用手册在这里:
英文版:http://svnbook.red-bean.com/en/1.2/
中文版:http://svnbook.subversion.org.cn/1.2/index.html

你也可以使用

svn help commnd

来得到command命令的帮助信息

经常使用的命令简单介绍以下:

1) 导出/提交代码

导出代码用:

svn co svn+ssh://<membername>@svn.gna.org/svn/grub4dos/trunk grub4dos

该命令下载最新的GRUB4DOS代码到grub4dos目录下,grub4dos即是当前的工做目录。

修改代码后,用

svn commit

命令即可提交。

提交时须要为当前提交的代码写简单的介绍,有三种方法:

a)用--message 或 -m, 在命令行里直接指定,如:

svn commit -m "This is a new version"

b)用--file 或 -F, 介绍在外部文件中:

svn commit -F commit_text

c)若是不使用以上的参数,在提交前会调用编辑器,在里面可临时添加信息

2) 使本地文件和服务器上的同步

svn update

3) 察看工做目录的修改状态

svn status

该命令会显示当前的工做目录文件的状态。

? 该文件不在代码控制范围内
A 该文件是新加文件
M 该文件以修改

? 开始的文件是不在代码控制范围内的文件,它有多是程序运行中生成的中间文件(如*.o等),
也多是在本版本中新加的文件。对于第一种状况,不须要理会,由于它们在commit时不会被处理。
对于第二种状况,须要用svn add命令把它加入代码控制系统中。这时若是再运行svn status,会发现
该文件的状态从? 改成 A, 在下一次commit,该文件将会被添加到服务器上。

4) 察看修改纪录

svn log

该命令能够加一个参数--revision或-r,用来指定显示的版本:

svn log -r 5:8

显示版本5和版本8之间的修改纪录。

-r的参数除了使用数字外,还能够使用关键字:

HEAD: 系统最新的版本号
BASE: 目录/文件创建时的版本号
COMMITTED:目录/文件最新修改的版本号
PREV:目录/文件对上一次修改的版本号,即COMMITTED-1

也能够使用日期或时间做为版本号的参数,如

{2007-03-03} {15:30} {"2007-03-03 15:30"} {20070303T1530} 等等

例子:

svn log -r PREV:COMMITTED
显示最近一次修改的纪录

svn log -r "{2007-03-03}":"{2007-03-04}"

显示从 2007-03-03 到 2007-03-04 的修改纪录

5) 生成补丁

svn diff > patch.diff

生成当前工做目录代码自checkout以来所做的修改的补丁

svn diff -r 5 > patch.diff

生成当前工做目录代码相对于版本5的补丁,版本5其实就是grub-0.97

svn diff --old=svn://svn.gna.org/svn/grub4dos/tags/grub-0.97 --new=svn://svn.gna.org/svn/grub4dos/trunk > patch.diff

生成服务器上最新版本相对于grub-0.97的补丁


http://bbs.znpc.net/forum.php?mod=viewthread&tid=2369&extra=page%3D10
bean发表于 2007-3-9 18:04 
GRUB4DOS中文文档@SF.net
在SF.net上创建的wiki空间中增长了中文文档:
http://grub4dos.sourceforge.net/wiki/index.php/Main_Page
目前仅写了"相关资源"和"如何启动grub4dos" 这两章,近期会增长grub4dos和grubinst的使用介绍。
新增"grub4dos高级功能",里面介绍了利用map命令做磁盘映射,cdrom功能和脚本支持。
新增"grub4dos命令索引",里面列出了GRUB4DOS中全部命令的使用语法。

http://bbs.znpc.net/forum.php?mod=viewthread&tid=2461&extra=page%3D10
bean发表于 2007-3-18 20:56 
GRLDR.MBR做为通用的引导程序的一些想法

很多的启动管理器或系统的启动部分,主要的功能是在一个启动文件里实现,而MBR或启动扇区的功能是把该文件读入内存并运行。这和GRLDR.MBR引导GRLDR的方式很是类似。不一样启动文件使用时的差异在于:

一、启动文件名字不一样
二、启动文件在内存里存放的地址不一样
三、启动文件运行的入口参数的差别

咱们能够用一个中间层的启动程序来处理这些差异,从而使GRLDR.MBR成为通用的引导程序。其启动的流程以下:

一、装载GRLDR.MBR
二、从GRLDR.MBR引导中间启动层启动程序
三、中间层启动程序选择最终的启动文件。其选择能够经过一个简单的选择菜单,或使用嵌入中间层启动程序中的值。
四、中间层启动程序把本身移动到较低的内存处,而且,把最终的启动文件的名字填入启动扇区适当的位置中。
五、中间层启动程序跳回7C00:0000,该地址是原来启动扇区的内容。
六、启动扇区第二次运行,它从分区中里装载新的启动文件(文件名字在中间层启动程序里填入的)。
七、装载成功后,启动扇区返回较低的内存处的中间层启动程序。
八、中间层启动程序把最终启动文件的内容复制到恰当的位置,而后设置入口参数,而且运行最终启动文件中的代码。

如今的GRLDR.MBR已经能够直接使用,只须要写一个处理不一样启动文件的中间层的启动程序就好了。

若是要更好地配合这一方案,GRLDR.MBR的代码能够做如下修改:

一、存取分区的代码分为初始化,搜索文件和装载文件三部分。在第二次运行时能够跳过初始化的代码。
二、中间层启动程序能够调用启动扇区里的搜索文件函数。这样中间层启动程序能够对于每种支持的启动文件都测试一下,而且显示能够启动系统的列表。

使用该方案的好处是可以在不一样的分区动态搜索启动文件。并且,GRLDR.MBR也能在Windows NT系列系统的启动管理器中引导。

该方案适用于GRLDR, GRUB2,NTLDR,io.sys, syslinux.bin, kernel.sys(FreeDOS)等启动文件。

你们能够说说,这一方案是否具备实用价值。


http://bbs.znpc.net/forum.php?mod=viewthread&tid=2300&page=7&fromuid=12697#pid16199
不点发表于 2007-4-13 15:44 
感谢你成为咱们中的一分子。应该说,你如今比前两年的许多人都幸运了,由于你来的时机,是在 2007 年。这一年的一开始,bean 就开始大手笔行动了,包括对 VISTA 的支持;对项目空间的创建;对中英文文档的编写,等等。今年还出现了另外几篇好的文章,能够阅读,这些都在不断完善。我能理解你的要求,由于我也是这样要求其余优秀软件的。感谢你的支持。

http://bbs.znpc.net/forum.php?mod=viewthread&tid=2931&highlight=%2Bbean
bean发表于 2007-4-18 03:34 
GRUB4DOS PXE网络启动版 (v3.2)

2该版本可用于PXE无盘启动。进入grub后,能够用设备(pd)来访问服务器上的文件。

v3.2更新:
* 在启动系统前卸载PXE的运行环境。

v3.1更新:
* 增长内置命令pxe,可用于设置pxe的参数。

v3更新:
* 优化PXE代码,文件下载速度大大增长
* 显示进度条。每下载1M的内容,在屏幕上显示一个"."。
* 修正使用map函数映射网络上的虚拟影像时出现的问题(主要对应于etherboot的PXE ROM,网卡上内置的ROM通常没有问题)

v2更新:
* 彻底重写pxe部分的代码。
* pxe和网络部分代码相互独立,pxe成为一个文件系统模块。
* 再也不须要pxegrub,grldr能够直接用于无盘启动。
* 采用相似于pxelinux结构的配置文件。

注意1:v2中,使用设备(pd)来访问pxe服务器上文件,它不一样于netboot生成的网络设备(nd)。netboot支持须要使用特殊的编译指令,而pxe支持是缺省的。

注意2:v2中,启动文件所在的目录成为文件访问的根目录。例如,启动文件是 tftp/grldr,那么全部的文件名都是相对于tftp目录的,好比说,(pd)/aa.img在服务器上相应的文件是 tftp/aa.img。

注意3:v2中,配置文件采用相似于pxelinux的结构,也就是,程序在开始前将会顺序搜索如下的文件:
        [/mybootdir]/menu.lst/01-88-99-AA-BB-CC-DD
        [/mybootdir]/menu.lst/C000025B
        [/mybootdir]/menu.lst/C000025
        [/mybootdir]/menu.lst/C00002
        [/mybootdir]/menu.lst/C0000
        [/mybootdir]/menu.lst/C000
        [/mybootdir]/menu.lst/C00
        [/mybootdir]/menu.lst/C0
        [/mybootdir]/menu.lst/C
        [/mybootdir]/menu.lst/default

(88:99:AA:BB:CCD是网卡MAC,C000025B是IP地址192.0.2.91)

若是以上的文件都不存在,那么grub会使用内置菜单。

注意4:从v3.1开始,增长内置命令pxe,用于在menu.lst中设置pxe的参数。

pxe
没有任何参数时,显示当前的blksize和basedir设置

pxe blksize N
设置包的大小。N最大值是1432,最小值是512,缺省值是1432。某些很旧的tftp服务器可能不支持大于512的包,这时须要手动把包的大小设置为512。

pxe basedir path
设置tftp的基础目录。好比说,使用命令

pxe basedir /tftp

后,(pd)设备中的文件名都是相对于/tftp目录的:(pd)/aa.img相对于服务器上的 /tftp/aa.img文件。

基础目录的初始值是启动文件所在的目录。好比说,启动的文件是/tftp/grldr,那么basedir的初始值就是/tftp/

注意5:从v3.2开始,增长两个pxe命令,用于管理PXE的运行环境

pxe keep
不卸载PXE的运行环境

pxe unload
马上卸载PXE的运行环境

程序缺省的处理方式是在boot的时候卸载PXE的运行环境。若是你须要保留PXE(例如须要经过startrom引导PE),能够使用pxe keep。若是须要在boot命令以前卸载PXE,则使用pxe unload。

使用介绍:
一、把grldr文件拷贝到服务器。
二、创建目录 /menu.lst/,在里面存放菜单文件。
三、设置dhcp和tftp服务器,把grldr做为启动文件。
四、启动客户端,PXE ROM会自动从服务器上下载grub并启动。

在Windows平台下,能够使用tftpd32,它同时提供了dhcp和tftp两种服务。网址:

http://tftpd32.jounin.net/

示范的menu.lst:

title Create ramdisk using map
map --mem (pd)/floppy.img (fd0)
map --hook
rootnoverify (fd0)
chainloader (fd0)+1

title Create ramdisk using memdisk
kernel (pd)/memdisk
initrd (pd)/floppy.img

[ 本帖最后由 bean 于 2007-5-26 17:33 编辑 ]

http://bbs.znpc.net/forum.php?mod=viewthread&tid=2664&highlight=%2Bbean
发表于 2007-4-7 03:02
修改内置菜单的命令行工具grubmenu

grubmenu是grubutil工程中的新增工具,利用它能够修改grldr/grub.exe/stage2中的内置菜单。

用法:

grubmenu info grldr
显示grldr的内置菜单相关的信息

grubmenu print grldr
打印grldr中的内置菜单

grubmenu export grldr menu.lst
把grldr中的内置菜单保存到外部文件 menu.lst

grubmenu import grldr menu.lst
之外部文件menu.lst的内容设置grldr的内置菜单。

grldr可分为两类,4-3前的版本是旧版本,以后的是新版本。旧版本的内置菜单的大小是固定的,新设置菜单的长度不能大于原来的菜单长度(能够少于,这时程序自动用空格来填充)。新版本的内置菜单的长度能够增长,但最大长度不能超过4K。

grubmenu能够在Windows,Linux和其余Unix平台下运行。(Linux和Unix版本须要利用源代码来编译)

更新:

* r10版本的grubmenu能够自动转换菜单文件。在导出时会把菜单转为本地系统格式的文本文件(Windows是\r\n,UNIX是\n),而在导入时会把文本文件转换为UNIX格式。在导入时还会去掉注释和空行,以及去掉每行结尾处多余的空格。这些转换不影响使用,但能够节省存储的空间,这对于旧版的grldr来讲比较重要。

[ 本帖最后由 bean 于 2007-4-22 16:05 编辑 ]

http://bbs.znpc.net/forum.php?mod=viewthread&tid=3117&extra=page%3D10
bean发表于 2007-4-23 21:29
在GRUB4DOS中实现内存管理和动态模块的想法

尽管GRUB4DOS使用的是GRUB Legacy的架构,但并不表明GRUB4DOS中不能实现内存管理和动态模块的功能。

对于内核来讲,因为受原来的结构的限制,要实现模块化比较困难,这里就暂且无论了。

内核使用最高内存到常规内存顶部,以及扩展内存,则统一使用内存管理器来进行管理。要使用内存时,必须向内存管理器申请,而不是随意使用。在使用完毕后要及时释放。

有了内存管理后,动态模块也能够实现。模块装载时须要向内存管理器申请一块常规内存的空间,而后把模块读入内存,在模块卸载后则能够释放所占的内存。

模块的结构能够有不少,如下是比较简单的一种,可供参考。

模块开始是某一标示,接着是函数表。如下是一些示范的函数

int init(struct *grub_api);

这是入口函数,模块在这里进行初始化的工做,若是由于某些缘由不能继续运行,函数返回出错代码,那么模块就自动被卸掉。

grub_api是grub主程序传递给模块的一个结构,里面包含一些重要的API的入口地址,以供模块使用。

grub_api中也能够包含扩展命令表,当模块须要添加新的内置命令或者取代原有的内置命令时,能够把相应的项目增长到该表里。

int unload(struct *grub_api);

模块在这里实现卸载前清理功能,若是由于某些缘由没法卸载,函数返回出错代码,该模块就不会被卸掉。

实现了内存管理和动态模块后,有如下的好处:

一、把一些比较大的数据结构放到扩展内存中
背景图片,字体等均可以利用内存管理器的功能在扩展内存中分配

二、网络驱动
这部分能够转为动态模块,在启动时只需装入适合本身网卡的驱动就能够了

三、其余的扩展
一些不太经常使用的功能能够作成模块的形式,在有须要时才调入内存。并且,把结构定下来之后,其余的用户也能够根据规范为grub4dos编写扩展。

http://bbs.znpc.net/forum.php?mod=viewthread&tid=3949&page=1&fromuid=12697#pid23381
不点发表于 2007-8-26 16:43
已经实现了,上载为 2007-08-26,是按照上述“照顾 Ago” 的方案来作的。

我身体不行,准备退出开发 grub4dos。

之后 bean 就全权代劳了。

真抱歉我曾经答应作的几个工做,未能“说话算数”。1. ISO 仿真。2. 嵌入 MBR 上的 GRUB。3. bootlace 的 --install-partition 参数实现。4. 把 grub4dos 同 linux kernel 进行密切配合(二次开发),使得 linux kernel 成为一个引导管理器。请多多包涵!

我对我在这段时间的工做也表示满意。只是,在将来的一段时间要把工做负担都压在 bean 一人身上,我感到遗憾。但愿尽快有新人和 bean 一块儿工做。

http://bbs.znpc.net/forum.php?mod=viewthread&tid=3751&extra=&page=1
bean发表于 2007-7-10 23:41
关于GRUB4DOS文档,不点请进

Jyothsna 终于有回复了,他说不在Wipro的办公室里,所以好久没有检查邮件了。看来他仍是有意思参与grub4dos的文档开发的。

但文档的编写究竟如何进行,你们讨论一下。
其实官方的grub文档对于grub legacy的命令介绍已经很详细了,只是缺少中文文档。而对于咱们的grub4dos,只须要按照官方的文档格式书写grub4dos有关的新功能便可。另外,我建议增长一个使用技巧部分,经过实例来演示如何使用grub4dos的新功能。
我以为文档这个工做量确实也不小。不知道 Jyothsna 有何打算?

我先来猜想一下。他多是要用 man page 的形式来作这个文档了。

无论他是什么打算,我都支持。由于我对此没有任何经验、看法。

我就擅长于,在别人创建好的基础之上,修修补补。

因此,这基础的工做,得大家两个商量着作才行。这时候,先不要考虑个人意见,由于我原本就没有主意。

等大家作好了,我有时间的话,会补充资料进去的。

我以为,我可能补充的地方,包括 map 的命令选项,新增的 root 命令语法,default 语法,以及 parttype 用法等细节部分。

另外,他彷佛应该在 gna 注册一个用户,以便管理 grub4dos,由于咱们的源代码已经在 GNA 了,而不是在 sarovar 了。在中国,咱们访问 sarovar 比较成问题,经常很不顺利。这一点,你也能够告诉他。若是他已经在 sarovar 有了帐户,或者他打算在 sarovar 注册帐户,那么我能够直接把他添加为 sarovar 上的管理者。
正式文档,最好使用texinfo格式。texinfo能够转换为多种格式,如info,txt, 单页html,多页html,PDF等,grub legacy的官方在线文档:

http://www.gnu.org/software/grub/manual/

就是使用grub.texi自动生成的。

另外,关于交流平台的问题,英文论坛还能够,不过如今论坛的状态的确使人担心。我想或者能够使用邮件列表,你们认为如何。
邮件列表是一个群发地址,全部发向该地址的邮件会自动转发给订阅了该邮件列表的用户。新的邮件是一个thread,回复的邮件被添加到同一个thread里。邮件列表系统会保留全部邮件,可供查阅和搜索。

就拿GRUB Legacy的邮件列表做为例子。

订阅界面是

http://lists.gnu.org/mailman/listinfo/bug-grub

订阅了之后,能够向 bug-grub@gnu.org发邮件,该邮件会转发给全部订阅的用户。

即便没有订阅,也能够到
http://lists.gnu.org/archive/html/bug-grub/
里查看保存的邮件,例如点2007-06,按照Thread浏览:

    * Where can I get the files stage1 and stage2?, Dallas Clement, 2007/06/30
          o Re: Where can I get the files stage1 and stage2?, Gregg Levine, 2007/06/30
                + Re: Where can I get the files stage1 and stage2?, Dallas Clement, 2007/06/30
                      # RE: Where can I get the files stage1 and stage2?, Gregg C Levine, 2007/06/30
                      # RE: Where can I get the files stage1 and stage2?, Dallas Clement, 2007/06/30
    * compile_error grub-1.95, harri brunk, 2007/06/25
    * Which device did I boot from?, Dallas Clement, 2007/06/22
          o RE: Which device did I boot from?, Gregg C Levine, 2007/06/22
                + RE: Which device did I boot from?, Dallas Clement, 2007/06/22
          o Re: Which device did I boot from?, Felix Miata, 2007/06/22
                + Re: Which device did I boot from?, Benoit Donnette, 2007/06/22
                      # Re: Which device did I boot from?, Dallas Clement, 2007/06/22
          o Message not available
                + Re: Which device did I boot from?, Dallas Clement, 2007/06/22
          o Re: Which device did I boot from?, Dallas Clement, 2007/06/23
                + Re: Which device did I boot from?, Gregg Levine, 2007/06/23
          o RE: Which device did I boot from?, Brown, Beverly, 2007/06/22
                + RE: Which device did I boot from?, Dallas Clement, 2007/06/22
                      # Re: Which device did I boot from?, adrian15, 2007/06/25
    * [bug #18619] default not saved with trailing white-space on "default saved" line in menu.lst, Ryan Stutsman, 2007/06/21
    * Grub and disk images, Eric S. Johansson, 2007/06/06
          o Re: Grub and disk images, adrian15, 2007/06/07
                + Re: Grub and disk images, Eric S. Johansson, 2007/06/07
    * Re: triple boot sys, adrian15, 2007/06/01
    * Re: Problems with Grub and booting to WinXP, adrian15, 2007/06/01

用起来和论坛差很少,邮件就至关于帖子,只是不能编辑。

如今不少GNU软件的支持都是经过邮件列表的。并且,邮件列表系统是gna/sf提供的,咱们不须要进行维护。
邮件列表已经开通,订阅页面:

https://mail.gna.org/listinfo/grub4dos-devel/
我在google groups也为grub4dos申请了一个邮件列表:

http://groups.google.com/group/grub4dos

邮件地址:grub4dos@googlegroups.com

并且,这个邮件列表能够自动接收gna.org上的邮件列表的内容。挺爽吧!
邮件系统使用的筛选规则:

一、附件中不能包含后序名为exe,bat,cmd,com,pif,scr,vbs,cpl的文件
二、邮件内容不能为空
三、邮件中MIME type中必须包含multipart/mixed,multipart/alternative,text/plain中的一个。纯文本邮件通常都符合这个要求。

不符合规则的邮件会被系统拒绝。
不点也试试发封邮件到grub4dos-devel@gna.org,看可否收到。

http://bbs.znpc.net/forum.php?mod=viewthread&tid=3736&highlight=%2Bbean
bean发表于 2007-7-8 13:39 
关于grub4dos中启动代码分离的想法

grub4dos能够当作由两部分组成,一部分是grub4dos的运行代码,grub4dos的功能在这里实现。另外一部分
是启动代码,它的任务是把以上所说的运行代码从启动介质上装载到内存里。这两部分实际上是相对独立的,
启动代码能够从grub4dos的主体中分离开来。

grub4dos的启动代码能够做为通用的引导程序,它不仅能够引导grub4dos,还能够引导其余的一些启动文
件,例如grub2, io.sys, ntldr 等。这些文件的共同点是只须要把它们装载到内存的某一个地方,而后
转到入口地址运行就能够了。其实,不少启动文件也采用相似的方法,不一样的只是装载地址,入口地址和
入口参数而已。把启动代码分离后,能够成为一个相似于syslinux的通用引导程序。

grub4dos的启动代码能够使用多种方法启动:

一、从MBR中启动
大部分的引导程序都支持从MBR中启动。

二、从NT启动管理中启动
目前彷佛没有引导程序支持从启动管理中启动。

三、从DOS里直接启动
在DOS里启动目前好像只有ldlin,但它只能引导linux内核格式的文件。

四、做为linux内核启动
这能够用于在其余的启动管理器中引导。

五、从光盘中启动
目前grub4dos的启动代码已经实现了这一功能。

六、从PXE中启动
目前grub4dos的启动代码还不支持这个功能,但须要增长的话也不是很复杂。

目前大部分的启动管理器只实现了1,就算是启动方式比较多的syslinux,也只是实现了1, 5 和6。而
grub4dos目前已经实现了1-5,在我看来,这就是grub4dos的精粹,它是其余软件所没有的。而grub4dos
的主体部分,尽管做了不少的改进,但它们不是独有的。这些改进基本上均可以在grub2中实现。

启动代码的分离也不是很复杂:

一、MBR和从NT启动管理中启动的代码,其实如今已经分离了,就在grldr.mbr中。

二、从DOS里启动的grub.exe,能够把grub.exe后面紧贴的stage2代码去掉。启动文件能够利用INT 21从
硬盘中读取。

三、做为linux内核格式的grub.exe,能够利用initrd来传递启动文件,而不须要把它绑定在grub.exe中。

四、从光盘和PXE启动时,能够从启动介质中读取文件,就像syslinux同样。

另外,若是要做为通用的引导程序,须要使用配置文件来进行设置。命令行参数能够放到一个固定的内存
地址,启动文件能够自行到相应的地址中读取。

http://bbs.znpc.net/forum.php?mod=viewthread&tid=4146&highlight=%2Bbean
bean发表于 2007-10-10 13:00
GRUB4DOS中启动代码分离的构思

这个想法我之前也曾经提过,如今把它总结一下:

一、启动代码和GRUB4DOS分离

启动代码的主要功能是把pre_stage2的代码装载到内存的某一位置,而后进行调用。除此以外,启动代码和GRUB4DOS的交互是不多的。而把文件装载到内存这一功能,能够用于启动其余一些文件,如io.sys, ntldr, kernel.sys, grub2等等。所以,启动代码能够独立于GRUB4DOS而存在,做为一个通用的启动管理器。

二、采用模块化的设计

目前启动代码比较混乱,不适合于未来的扩展。主要体如今:

a、多功能集合致使代码复杂度提升

如今grub.exe和grldr都是集合了多个功能于一身。这看上去好像很方便,但其实使得代码的复杂度大大提升,增长了修改和调试的难度。我想应该对于每种不一样的启动环境使用不一样的启动文件,而代码的共用经过子模块来实现。

b、存在过分优化的现象

我看过一篇名为 Optimization: Your Worst Enemy 的文章:

http://www.codeproject.com/tips/optimizationenemy.asp?msg=2259746

我以为启动代码里也存在过分优化的现象。优化的确是须要的,可是它应该局限于子模块内,不一样模块间的交互应该是简单和明确的。

我想启动代码应该尽量细分为模块,每一个模块只实现单一的功能,最终把不一样的模块链接起来而成为最终的启动文件。模块能够粗略分为如下几类:

一、启动模块

这至关于启动文件的头部,不一样的启动方式对应于不一样的头部。启动模块还能够根据具体的启动方式,导出启动设备。例如,若是从光驱里启动,则可导出光驱设备(cd),从pxe启动,则可导出设备(nd)。而通用的设备(hdN)和(fdN)在独立的模块里实现,它们用于读取硬盘和软盘。

二、分区模块

这部分模块处理不一样的分区格式。它们经过读取底层的设备(hdN),分析里面存在的分区,从而生成新的设备(hdN,M)

三、文件系统模块

这部分模块处理不一样的文件系统。它们使用(hdN,M)来访问底层的设备,并导出文件读取的函数。特殊设备(cd)和(nd)跳过这一步骤,直接导出文件读取的函数。

四、格式处理模块

不一样的启动文件,其启动的方式略有不一样,这些差别在这些模块里进行处理。

五、扩展功能模块

这部分模块提供扩展的功能。它们相似于GRUB4DOS里的命令。每一个命令对应于一个模块。

六、通用函数模块

这部分模块提供公用的函数。好比说,开启/关闭A20的代码,访问扩展内存的代码,等等。

七、脚本解析模块

启动管理器能够使用配置文件的形式来设置启动选项,因而在启动时就须要解析执行。还有一个比较简单的方式,就是
利用外部程序把配置文件转化为容易使用的二进制形式,而后把它添加到启动文件中。

若是使用配置文件,其格式能够参照GRUB4DOS,例如:

timeout 10

title Windows XP
root (hd0,0)
ntldr /ntldr

title DOS
root (hd0,1)
msdos /io.sys

title Grub
root (hd0,0)
grub /boot/grub/stage2

title Grub 2
root (hd0,0)
grub2 /boot/grub2/core.img

在这里,不一样的启动文件使用不一样的格式处理模块进行处理。

至于这个启动管理器的名字,我原本想使用miniboot,但这名字好像已经有人使用了。我想是否是能够使用tinyboot,这和miniboot的意思差很少,并且和不点的名字有点像,呵呵。


http://bbs.znpc.net/forum.php?mod=viewthread&tid=3885&highlight=%2Bbean
bean发表于 2007-8-8 12:47  
grubinst更新:能够跳过严格的mbr测试

 

在缺省状况下,程序进行严格的测试,若是发现问题,会把mbr表的内容和分区列表显示出来。若是用户以为没有问题,能够使用--skip-mbr-test来跳过严格的测试,从而顺利
的进行安装。

另外,新版本在缺省状况下不会把第一个分区的bpb拷贝到mbr。若是想拷贝的话,须要使用--copy-bpb选项。

新版本调整了ntfs中启动文件的空间,如今能够支持全部符合8.3规则的文件名。
--copy-bpb 应该是默认选项。若是不想这样作,能够加入 --no-copy-bpb 选项。

--copy-bpb 不会带来反作用。
拷贝bpb不是只对某些有问题的U盘才使用的吗?正常的硬盘应该不须要的吧。

其实我只是怕它会有反作用。好比说,若是有多个分区的话,会不会只能认出第一个分区。并且还有一个隐藏的问题。若是用户的mbr表出了问题,不能正确的认出,那么因为mbr中有FAT的结构,这个硬盘会被认为是软盘映像。但若是用户使用--floppy来安装的话,就会覆盖了mbr表,那么只有第一个分区能用了。这是一个比较严重的问题。所以,我以为在没有必要的时候,最好不要复制bpb。
bootlace 是这么操做的:

当 MBR 上的分区表被确认是正确的时候,才进行如下操做,不然,拒绝操做。

只有当磁道 1 的第一扇区含有 FAT 格式的 BPB 时,才构造 MBR 上的 BPB。

所以,MBR 上有 BPB 的时候,分区表必定是正确的。

固然,也许后续的某个软件从新创建了分区表,致使分区表错误。

此时使用 --floppy 是危险的。

不过咱们能够这样改进,来增强安全性检查:当用户使用 --floppy 时,咱们就先按照宽松的条件来检查分区表的存在性,若是发现分区表,则拒绝操做。
grubinst如今是这样操做的:

先进行严格的测试,成功后做为MBR处理
再进行通常的测试,成功后做为有问题的MBR处理,若是有--skip-mbr-test,则顺利安装,不然出错退出
而后再进行FAT,NTFS和EXT2的测试

这样的话,误判的概率比较小,固然,也不是彻底不可能。个人想法是,若是没有必要的话,尽可能不要复制bpb,这样至少能够减小一种误判的情形。
我是这么想的:--floppy 是明确要毁掉分区表的,有经验的人是不会这么用的。

剩下的人多是误操做而用了 --floppy,不过,正如你所说,分区表的特征是比较容易发现的,因此,咱们的程序也很容易拒绝对分区表进行写入。能够说,只要有分区表,咱们老是能够检测出来的,一个都不会漏掉:

1. 四个表项的 boot indicator 要么是 80 要么是 00
2. CHS的扇区号不能是0, 分区起始扇区号和分区长度也不能是0

知足以上条件的,不必定都是分区表,但都被咱们拒绝了。这没关系。关键是全部的分区表,都在拒绝之列,无一遗漏。因此,--floppy 的安全性就绝对有保证了。

既然这里没问题了,那么默认时写入 BPB 就一样安全了。

一些用户每每不知道须要将 BPB 写入 U 盘的 MBR。若是咱们默认时不写入,他本身也不容易发现须要写入。这样,他一般会放弃使用 grub4dos 的。

U 盘和硬盘很难区分,因此,默认时,应该写 BPB,无论它是 U 盘,仍是硬盘。
用 bootlace --read-only 0x80 看看是否成功。

若是不成功,那么分区表必定是错误的。

假如分区表是错误的,用 fdisk /mbr 是无济于事的。这条 fdisk /mbr 的目的是用来修复主引导记录上的引导代码的,不是用来修复分区表的。这点请必定要注意了。

MBR 是硬盘的引导扇区,位于硬盘最开头,共 512 字节。开头的 446 字节是引导代码(是程序),结尾的 66 字节是分区表(是数据)。

FDISK /MBR 仅仅把 446 字节的引导代码强行变成了微软的引导代码,而结尾的 66 字节的分区表,根本不会改动。

因此,若是用 fdisk /mbr,那么原来正确的分区表,仍然正确,而原来是错误的分区表,仍旧是错误的。

http://bbs.znpc.net/forum.php?mod=viewthread&tid=4156&highlight=%2Bbean
bean发表于 2007-10-15 18:23 
关于新一代GRUB4DOS的想法

目前0.4.*系列GRUB4DOS已经基本上稳定,功能比较完善了,除了A20的兼容问题外,其他须要改动的地方不是不少了。但在结构上而言,GRUB4DOS仍是存在必定的问题,不容易进行扩展。我想在新一代的GRUB4DOS里能够做如下的改动:

一、启动管理器分离

把启动管理器的代码从GRUB4DOS里分离出去,造成软件tinyboot。而在GRUB4DOS里,生成单一的二进制代码文件stage2,在不一样环境里启动GRUB4DOS是经过tinyboot里实现。

二、使用Unicode,不区分中英文版本

摒弃如今打中文补丁的方法,采用统一的代码。配置文件里使用UTF-8的编码,这样能够兼容ascii的菜单,也能够在一个菜单里同时使用不一样的语言。

三、利用gettext实现多语言支持

如今显示中文帮助须要在源代码基础上进行补丁,这个方法使得修改变得困难,并且很难支持多种语言。一个较为简单的方法是使用gettext进行转换,把英文转为相应的语言。文本的映射从外部载入,这样能够节省内存空间,也使得语言的动态改变成为可能。

四、内存管理器和动态模块

使用内存管理器能够更好的利用内存空间,特别是扩展内存。动态模块是在GRUB4DOS启动后加载的模块,它们能够和GRUB4DOS的主体进行通讯,实现扩展的功能。模块的设计能够参考syslinux里的comboot api:

http://syslinux.zytor.com/comboot.php

五、图形界面的改进

修改目前图形显示的一些问题,实现可定制的图形界面,支持更多的图片格式。


固然,要彻底实现以上的功能是一个很漫长的过程,但不管如何,须要有一个起点。我想能够启动一个新的分支,0.5.*,来逐渐实现以上的功能。而目前的代码,则做为 0.4.* 分支,继续进行维护。不知道你们的意见如何。

http://bbs.znpc.net/forum.php?mod=viewthread&tid=4273&extra=page%3D6
bean发表于 2007-12-6 20:57  
利用loadbin在不一样的启动管理器中启动grub,grub2,grub4dos 和 ntldr

loadbin是grubutil里的一个新加工具,它能够把各类系统文件转化为Linux内核的格式,从而达到在多个启动管理器里启动的目的。

对于不一样的启动文件,loadbin提供相应的头文件,

能够用三种方式启动系统文件,以ntldr为例:

1,直接使用头文件ldntldr.bin。以头文件做为内核,ntldr做为initrd:

kernel ldntldr.bin
initrd ntldr
boot

2,利用mkimage工具把头文件和系统文件结合起来,生成单一的启动文件:

mkimage ldntldr.bin ntldr ntldr.bin

而后把ntldr.bin做为内核就好了:

kernel ntldr.bin
boot

因为很多的启动管理器在启动Linux内核时不会传递正确的DL值,所以须要在头文件里进行设置,你能够使用-x参数在生成单一的启动文件时指定DL值,例如:

mkimage -x 0x80 ldntldr.bin ntldr ntldr.bin

有些系统,例如grub2,还支持分区参数,你能够用如下方式来指定:

mkimage -x 0x80,0 ldgrub2.bin core.img grub2.bin

这样启动后grub2会自动把根设备设为第一只硬盘第一个主分区(hd0,1)。

若是是在CDROM里启动,能够使用设备号0xe0,好比

mkimage -x 0xe0 ldgrub.bin stage2 grub.bin

这样,grub启动后就能够利用(cd)设备来访问文件了。

3,同2同样,先生成单一的启动文件ntldr.bin,而后能够利用grldr.mbr启动:

安装到mbr:

grubinst -b=ntldr.bin DEVICE

生成相应的ntldr.mbr,在boot.ini里启动:

grubinst -o -b=ntldr.bin ntldr.mbr

目前支持的启动文件格式:

1,GRUB Legacy
头文件ldgrub.bin,对应的系统文件是stage2

2,GRUB2
头文件是ldgrub2.bin,对应的系统文件是core.img

3,GRUB4DOS和NTLDR
头文件是ldntldr.bin,对应的系统文件是ntldr和grldr

至于启动管理器,只要它支持Linux内核格式,就能够使用loadbin,这其中包括grub legacy, grub2, grub4dos, syslinux/isolinux/pxelinux, lilo等等。

下载地址:

http://download.gna.org/grubutil/

http://bbs.znpc.net/forum.php?mod=viewthread&tid=4311&highlight=%2Bbean
bean发表于 2007-12-20 22:09 
关于迷你grub4dos的想法

grub4dos中有很多的功能是不多会用到的。若是把它们去掉的话,就能够在很大程度上减小grub4dos的大小,从而能够包含在64K的boot rom里。如下是一些想法:

1,在configure里增长--mini选项,当使用该选项时,生成迷你grub4dos。
2,使用一个文件来存储迷你grub4dos使用的编译参数,这样修改起来比较容易。
3,grub4dos中最大的模块是builtins.c,我想能够对每一个命令定义一个宏,经过它来进行条件编译,好比说:

#ifndef DISABLE_CMD_CMP
static int
cmp_func ...

static struct builtin builtin_cmp = ...
#endif

我大概试了一下,使用如今svn上的版本,利用参数:
./configure --enable-preset-menu=../preset_menu.lst --disable-ffs --disable-ufs2 --disable-minix --disable-reiserfs --disable-vstabs --disable-jfs --disable-xfs --disable-graphics --disable-hercules --disable-serial

进行编译,生成的stage2是149K,若是使用lzma来压缩,获得的文件73K,这和64K的目标已经比较接近了。只要稍微精简一些,应该能够放到boot rom里了。

http://bbs.znpc.net/forum.php?mod=viewthread&tid=4311&page=1&fromuid=12697#pid25764
不点发表于 2007-12-21 10:24 
象征意义和实在乎义。

ffs, ufs2, vstabs, jfs, xfs,等等,这些文件系统的支持能力,被看做是 grub 的优势。可是,在我看来,它们的象征意义大于实在乎义。实际上,它们占用了 grub 内核的大量代码,而不多有人须要这些文件系统的支持。

是的,grub4dos 如今在咱们手上,咱们彻底能够按照本身的意愿去改造,而没有任何约束。

bean 能够大胆地改,改什么均可以,不怕改坏了,改坏了还能够再改回来。我已经删掉了 builtins.c 中的四条命令。稍候我把代码上载到 jot 上。

咱们能够吸取 grub2 里面的一些有价值的东西进来。可是,grub4dos 彷佛很难与 grub2 融合在一块儿,也只能各自独立发展了。

如下是我不成熟的考虑,关于内存的使用。

GRUB legacy 的内存使用,在常规内存部分,几乎都用光了,这个结构(即内存使用布局)咱们仍是保留它吧。GRUB legacy 对常规内存的使用彷佛不够经济,可是,咱们仍是能够忍受的,就认了吧。在 grub 中,经常要切换到实模式使用 BIOS 来访问硬件。常规内存只能给这些实模式程序保留。

对于 1M 以上的内存,咱们相对来讲有比较自由的发挥空间(使用空间)。有些已经被咱们使用了,好比 2M 处是保存 DOS 使用内存的地方。

如今内存很便宜,机器每每有不少内存。因此,16M 如下的内存,均可以被咱们的 grub4dos 内核保留,好比存放字体字模等。

为了确保 A20 不会发生问题,咱们还能够在 grub4dos 中尽可能不使用“奇数兆”的内存。 grub4dos 的内核中的程序代码,必定要放在“偶数兆”的地址空间。grub 要不停地在实模式和保护模式之间切换,当切换到实模式执行 BIOS 调用时,有些 BIOS (的有些功能调用)可能会自动把 A20 关闭。所以为了保险起见,咱们须要把 grub4dos 内核的代码(和数据)控制在“偶数兆”的地址空间范围。这样,16M中实际上只有8M可用。

在此基础上,咱们能够为 grub4dos 增添运行用户程序的功能(固然先得创建内存管理机制)。那些不常常用到的命令,均可以以用户程序的形式存在于磁盘上。这部分 bean 就考虑考虑吧(对我来讲这很复杂)。我只把那个 A20 问题解决了,就完成任务了。

对了,几何参数自适应功能已经所有完成。12月14日的就是此功能的完整版本。

最终咱们彷佛须要把代码都改为汇编。
不点,新版本的代码已经改了很多了,若是没有什么问题的话,能够上传到gna.org。
上传到 gna,你来作吧,diff 文件已经上传到 jot,你可先看看有无问题,再上载到 gna。我以为它仍然属于 0.4.3 的后续版。当开始测试新的 A20 功能时,才改变版本号。我在 unbuntu 论坛上曾经说,0.4.4pre 是 A20 新功能,人家看到以后,有可能参与 A20 的测试。因此,如今咱们还不能用 0.4.4 这个版本号。

补充:在 changelog 里面,能够写上被删除的四条命令。
试了一下新版的makerom来制做grub 0.97的bootrom,直接使用./configure,没有特殊指令。这样生成的stage2有98K,生成的grub.bin有53K,若是去掉3K的头和lzma解压程序,那么压缩后grub有50K,大约有50%的压缩率。
不点,jot上的grub4dos_r54.diff上的应该就是最新版本的补丁吧,若是没有问题的话我就传到gna上了。还有,上传时使用的标题,最好也写一写。

从这个版本开始,我打算另起一个分支,以进行mini grub的研究。由于改动的地方会比较多,中文补丁很难跟上,所以会暂时去掉中文支持。何况,mini grub里空间原本就很紧,中文看来没有什么用处。
好的,就照这么办吧。

grub4dos_r54.diff 就是最新的了,我这段时间很忙,不会再有更新了。

r55 的变动消息能够提两点:1. cdrom 仿真支持,2. bios 几何参数自适应,或者再加上 3. 其余一些调整、变通、修复。哦,也许还应该提到删除了 4 条命令这件事。

http://bbs.znpc.net/forum.php?mod=viewthread&tid=4315&highlight=%2Bbean
bean发表于 2007-12-21 18:50  
使用makerom制做grub,grub4dos,grub2和grldr.mbr的启动bootrom

makerom是grub-mkrom的改进版本,使用它能够很容易地制做bootrom:

下载:
http://download.gna.org/grubutil/

1. grub legacy/grub4dos
makrom rom_xxx.img stage2 grub.bin

2. grub2
makerom rom_xxx.img core.img grub2.bin

3. grldr.mbr
makerom -s 0 rom_xxx.img grldr.mbr grldr.bin

rom_xxx.img表明如下的其中一个映像:

rom_isa.img: isa rom
rom_pci.img: pci rom
rom_zisa.img:支持lzma压缩的isa rom
rom_zpci:支持lzma压缩的pci rom

当使用压缩时,须要加上-z参数,而且须要使用lzma兼容的rom,例如:

makerom -z rom_zisa.img stage2 grub.bin

另外,grubutil发布的版本里不包含lzma.exe,你能够到如下打包里找:
http://grub4dos.sourceforge.net/grub2/makerom.zip

makerom还支持如下的参数:

-m message
启动时显示的信息

-t timeout
倒计时,缺省值2秒

-k key
热键,缺省值是SPACE

-d edx
启动前设置的edx值,缺省值是0

-s skip
在输入文件开头里跳过必定数量的字节,缺省值是512,这适合于stage2和core.img,但当输入文件grldr.mbr时,须要把该值设为0。

-z
使用lzma压缩输入文件

-p parm
在调用lzma时,使用的扩展参数。在缺省状况下,程序使用

lzma e -si -so

来运行lzma,若是使用须要其余选项,能够在这里进行设置。

-v
显示详细信息

 
http://bbs.znpc.net/forum.php?mod=viewthread&tid=4335&highlight=%2Bbean
bean发表于 2007-12-25 22:35

测试:迷你版grub4dos

下载:
http://grub4dos.sourceforge.net/grub4dos/grub4dos-test-mini-2007-12-25.zip

新版的build脚本支持参数mini,使用它能够生成迷你grub4dos:

./build mini

mini版本使用mini.lst里的选项进行配置,你能够修改该文件,以增长或减小须要的功能。mini.lst里的选项说明以下:

--disable-ntfs-comp
去掉NTFS模块里对压缩文件的支持。

--disable-ffs
--disable-ufs2
--disable-minix
--disable-reiserfs
--disable-vstafs
--disable-jfs
--disable-xfs
--disable-pxe
去掉相应的文件系统模块。只保留了fat,ntfs,ext2fs和iso9660的支持。

--disable-md5-password
去掉md5密码的支持

--disable-graphics
去掉图形模式的支持

--disable-hercules
--disable-serial
这两个是用于终端模拟的,基本上不会用到

--disable-cmd-testload
--disable-cmd-testvbe
--disable-cmd-setkey
--disable-cmd-setup
--disable-cmd-module
这里去掉一些不经常使用的命令

--disable-boot-bsd
--disable-boot-multi
去掉启动bsd内核和multiboot内核的代码

--enable-preset-menu=../preset_menu.lst
这是缺省菜单

使用这些参数编译后,获得的stage2能够使用makerom生成bootrom:

makerom -z rom_zisa.img stage2 grub.bin

这里是制做好的版本:
http://grub4dos.sourceforge.net/grub4dos/grub.bin

http://bbs.znpc.net/forum.php?mod=viewthread&tid=4591&highlight=%2Bbean
bean发表于 2008-3-28 16:23
grub4dos新功能测试:在不一样时间段执行不一样的命令

这个补丁增长一个新的命令checktime。使用它,你能够使得某些命令只有在某一时间段内才执行。

命令格式以下:

checktime * * * * *

checktime后面的五个参数分别表示分钟,小时,日期,月份和星期几。*表示全范围,你也能够使用数字,用-表示某一范围,用/表示每隔必定数字取一个值,具体的用法能够查看一下crontab的语法。例子:

1-4
2,5-6
1-2,4-5,7
*/2

checktime自己只是一个测试函数,它判断当前时间是否符合参数的指定。但把它和&&相结合,你就能够使得某些命令只有在必定的条件下才会执行,例如:

上午使用第一项做为缺省项,下午使用第二项
checktime * 0-12 * * * && default 0
checktime * 13-23 * * * && default 1

四季使用不一样的背景图片
checktime * * * 1-3 * && splashimage /spring.xpm
checktime * * * 4-6 * && splashimage /summer.xpm
checktime * * * 7-9 * && splashimage /fall.xpm
checktime * * * 10-12 * && splashimage /winter.xpm

附件里包含补丁文件和英文版的grldr。

http://bbs.znpc.net/forum.php?mod=viewthread&tid=5496&extra=page%3D7
bean发表于 2009-1-1 01:57  
测试:grub4dos 的 gfxmenu 支持 (更新v3)

如下的补丁为grub4dos增长gfxmenu支持(对应于svn r63)。使用时,在menu.lst里加上这句(message文件在附件里):

gfxmenu (hd0,0)/message

注意这命令只能用在配置文件里,在命令行是无效的。

不过,使用gfxmenu须要的内存不少,须要定制grub4dos以去掉不须要的模块,附件里的grldr是使用如下的命令来设置的:

../configure --disable-ffs --disable-ufs2 --disable-minix --disable-reiserfs --disable-vstafs --disable-jfs --disable-xfs --disable-graphics --disable-hercules --disable--serial --disable-iso9660 --disable-ext2fs --disable-md5-password --disable-pxe --disable-gunzip --enable-preset-menu=../preset_menu.lst

文件系统只保留fat和ntfs,其余能禁止的选项都禁止了。

附件里的文件在linux下编译,在msys里编译的也能用,只是略为大一些,message文件也能装载。

其实,能够按照minigrub的作法,把一些不多使用的功能禁止掉,须要的话在configure里打开。这样能节省很多的空间,即可以支持更大的message文件。

v2更新:
新版的grldr基本解决了大小的限制,启动的问题也解决了。并且,grub4dos原有的功能全在,再也不须要简化。不过,我在configure.ac脚本里仍是把一些不多用的文件系统的缺省值改成禁止(ffs, ufs2, minix, vstafs, jfs 和 xfs)。编译参数:

./configure --enable-preset-menu=preset_menu.lst
make

v3更新:
支持新版3.3.x系列的message文件。旧版的也照旧能使用,程序会自动检测message的版本。

grub4dos的内容没有改动,原有的功能所有包含。

漂亮的gfxboot文件能够在如下网址找到:
http://gnome-look.org/content/search.php?xsortmode=new&search=1&type=0&name=gfxboot&user=&text=&sort=0&scorefilter=0&license=99&page=0
http://kde-look.org/content/search.php?xsortmode=new&search=1&type=0&name=gfxboot&user=&text=&sort=0&scorefilter=0&license=99&page=0

附件
 grub_gfxmenu_v2.zip (201.95 KB)
2009-1-1 23:23, 下载次数: 1786
 grub_gfxmenu_v3.zip (220.5 KB)
2009-1-4 23:46, 下载次数: 3339
 message-3.2.zip (115.8 KB)
2009-1-5 02:21, 下载次数: 1289
3.2 系列中文菜单,包含500个经常使用汉字
 message-3.3.zip (878.45 KB)
2009-1-5 02:21, 下载次数: 4088
3.3系列中文菜单,包含3500个经常使用汉字

http://bbs.znpc.net/forum.php?mod=viewthread&tid=5629&extra=page%3D1
bean发表于 2009-5-4 15:48
关于万能启动U盘的想法。

U盘启动的最大问题在于磁盘的参数,自动检测也不是万能的。其实,咱们能够在存储方面作些功夫,就能够迅速而正确地得到参数。

基本结构:
扇区0:MBR,第一个分区开始于16065扇区。
扇区1-16064:在固定的位置里保存标识和当前扇区序号。
扇区16065:第一个分区开始

读取磁道0,磁头1,扇区1,得到序号,便获得每磁道的扇区数
读取磁道1,磁头0,扇区1,若是没有序号,磁头数255,不然根据序号能够算出磁头数。

扇区1-16064里还有不少空间的,用来存放grub4dos或者grub2的payload。

这个方案的缺点是在u盘开始须要腾出大约8m的空间。不过这对于如今的u盘容量来讲根本不算什么。并且,从外部看来,u盘使用的是单分区mbr结构,应该不会和其余工具发生冲突。

http://bbs.znpc.net/forum.php?mod=viewthread&tid=5631&extra=page%3D8
bean发表于 2009-5-6 02:32 
分享:万能启动u盘制做工具fbinst (最新稳定版本1.2)
万能启动U盘的原理在如下帖子里有说明和讨论:
http://bbs.znpc.net/forum.php?mod=viewthread&tid=5629&extra=page%3D1
新人注意:
对于新加入测试fbinst技术的新人,咱们推荐你只下载和使用顶楼帖子(也就是本帖子)推荐的fbinst发布版本(其它版本都是有bug的或者是仅用于调试的版本)。同时,在使用fbisnt制做启动U盘时,咱们推荐你使用457# 的grldr(保持原样不要修改),测试时要尽可能简单化(从参数简单化入手),不复制文件到U盘,启动时能看到grub命令行就算成功了,若是成功了通常状况下就不须要汇报了。咱们更想看到启动不成功的状况(尤为是那些用其它技术能够成功但fbinst不成功的状况),反馈失败时请反馈尽可能详细的信息,例如你的启动U盘制做步骤及相应的命令行,失败时的现象等,同时,若是你以为没有能力及时按照bean的指示下载专门的测试版本并及时反馈状况,请事先注明,省得浪费你们尤为是bean的时间。

457#的grldr(英文)下载:http://bbs.znpc.net/attachment.php?aid=3281
注意:该grldr只能用于1.2版本,它和最新的1.3不兼容

目前写了一个测试版本,具备基本的引导功能,有兴趣的能够测试一下。
目前已经出了数十个测试版本,推荐你使用下面的最新稳定版进行测试:

最新的1.2版本能够在gna下载:
http://download.gna.org/grubutil/

#438:增长--nand和--raw选项。下载连接:http://bbs.znpc.net/attachment.php?aid=3279

#408(408楼):1.2稳定版本。下载这个附件也能够:
 fbinst_v1.2#408.zip (13.7 KB)

 

下面的内容由Climbing根据408# 1.2版本的fbinst功能进行了适当的补充和纠错,这些内容会用标蓝或者粗体的形式显示出来。2009.05.11 23:00
制做步骤:
1,插入u盘,并使用fbinst列出磁盘信息:

fbinst --list

fbinst -l

屏幕上会显示硬盘设备(hdN)和对应的大小,不要弄错了。

2,格式化

如下假定u盘在(hd1),用如下命令格式化:
fbinst (hd1) format --force

它会自动创建mbr和一个fat分区,mbr里预留8m左右的空间,其他的都分到fat里。这一步会破坏u盘原来的信息,切记!你能够使用--fat16或者--fat32选项来设置fat分区的类型,若是没有指定的话,会根据u盘大小自动选择,512m如下的缺省使用fat16,512m以上的缺省使用fat32.另外,能够使用的参数为--unit-size N,用来设置U盘分区的簇大小,其中N以扇区(512字节)为单位,例如,设置成N=32就是每簇16K,原理上讲,将U盘的簇设置的跟U盘写入页面大小接近时能够提升U盘的写入效率,还有一个--align参数,就是将簇与U盘内部页对齐,目的也是为了提升U盘的写入性能。还有一个--base参数,在1.2版本中该参数固定为63,通常不须要乞改动。格式化时还有一个--zip参数用于将U盘格式化成USB-ZIP格式。

格式化后,由于改动了mbr,最好把u盘弹出来再从新接入。

3,导入grldr

fbinst (hd1) load C:/grldr
上面命令是将c:盘根目录下的grldr文件导入U盘前面8M的隐藏空间内。

fbinst (hd1) load grldr
上面命令是导入当前目录下的grldr文件。


也能够导入ntldr。

4,还有一些其余命令:

fbinst (hd1) info
显示mbr里的信息

fbinst (hd1) clear
清除原来load的映像,因而能够使用load载入新的映像。也即,在load新的映像前,须要先使用clear清除原来的映像。

fbinst (hd1) update
更新mbr代码,调试比较好用。只更新mbr代码,不改动映像和其余参数。


fbinst (hd1) format
更新mbr代码,同时兼有clear的功能。

fbinst (hd1) sync 
sync用于将第一分区的bpb参数同步到mbr中或者从中清除
--copy-bpb 用于将U盘第一个分区的bpb参数复制到mbr中。
--clear-bpb 用于清除mbr中的bpb参数
原则上,咱们不建议你复制bpb参数到mbr中。
复制内容到剪贴板
代码:
fbinst 命令语法:
D:\fbinst>fbinst -V
fbinst version : 1.2

D:\fbinst>fbinst -h
Usage:
        fbinst [OPTIONS] DEVICE_OR_FILE COMMANDS [PARAMETERS]

Global Options:
  --help,-h             Display this message and exit 帮助
  --version,-V          Print version information and exit 版本
  --list,-l             List all disks in system and exit
  --verbose,-v          Print verbose messages 更详细的输出信息

Commands:
  format                Format disk
    --raw               Format with normal layout (not bootable) (格式化为一般模式,能够用于回收8m空间,不过fbinst的代码就清空了)
    --force             Force the creation of data partition
    --zip               Format as USB-ZIP
    --align             Align to cluster boundary
    --fat16             Format data partition as FAT16
    --fat32             Format data partition as FAT32
    --unit-size NUM     Unit size for FAT16/FAT32 in 512 bytes block
    --base,-b NUM       Set base boot sector
    --size,-s NUM       Set size of data partition 指定数据分区的大小
  sync                  Synchronize disk information
    --copy-bpb          Copy bpb from the first partition
    --clear-bpb         Clear bpb in the boot sector
  info                  Show disk information
  update                Update boot code
  load FILE             Load image file
  clear                 Clear image file


常见问题:
1,USB-HDD/USB-ZIP模式
在缺省状况下,fbinst会把u盘格式为HDD模式,在format里加了--zip参数后,会格式为ZIP模式。不过,fbinst所作的只是在MBR里设置必定的数值以影响bios的判断,但不一样bios的检测算法有很大差异,所以很难保证必定能够检测为某个模式。

通常来讲,ZIP模式的兼容性更好一些。有些bios就不能识别格式为HDD的u盘。不过,ZIP模式启动后根设备是(fd0),数据分区为(fd0,0)。目前grub4dos里使用(fd0,0)的一些限制,所以没有(hd0,0)来的方便。并且,听说ntldr也不能处理(fd0,0)分区。不过,其实能够用grub4dos里的map命令把(fd0)映射为(hd0),这样使用起来就没有问题了。

有些bios是根据数据分区里的微软标志MSWIN4.1和文件系统标志FAT16/FAT32来识别ZIP的。若是把数据分区格式化为NTFS,就可能跳过这两个标志而变为HDD模式。不过,格式化为NTFS后,mbr里的文件系统id改变了。fbinst缺省状况下会在0-63扇区里都保存启动扇区。要把0扇区里的id更新到其余启动扇区里,能够使用如下命令:

fbinst (hd1) sync

sync命令还能够把第一个分区的bpb复制到mbr里,只要加上--copy-bpb选项:

fbinst (hd1) sync --copy-bpb

其实,复制bpb的效果和--zip基本上同样,都会使u盘被检测为ZIP模式。不过,我不太同意复制bpb,缘由有两个。一是bios里对于bpb的检测,通常是按照FAT16的方式来进行的,若是数据分区是FAT32或者NTFS,复制bpb反而可能有反作用。二是,--zip不依赖于数据分区,只要在format里指定就好了。而复制bpb依赖于数据分区,分区结构改变后都须要使用sync同步。所以,建议先试试--zip,真的不行时才试试复制bpb。

2,如何更新fbinst引导代码。
更新有两种方法,一是format而后从新装载grldr文件。二是使用update命令。update只更新代码,比较方便,不过有时候不太完全。format从新创建mbr里结构,就和初始化时同样。

另外,不带--force命令时,format命令只会改动mbr的结构,不会格式化数据分区,是比较安全的方法。建议只在第一次创建u盘结构时使用--force,之后用普通的format命令来格式化。

http://bbs.znpc.net/forum.php?mod=viewthread&tid=5664&extra=page%3D8
bean发表于 2009-5-29 19:50  
fbinst v1.4:增长文件管理功能

format命令增长选项--primary和--extended,能够用于设置主数据区和扩展数据区的大小。取消了--reserve选项,由于--reserve其实就是--primary和--extended的总和。例子:

fbinst (hd1) format --primary 10m --extended 20m --force

因为文件不能跨越主数据区和扩展数据区。若是映像比8m稍大的话,之前版本必须再预留一样大小的扩展空间,如今则能够经过调整主数据分区的大小来解决。

增长/更新文件:

fbinst (hd1) add c:/aa.img "aa.img"

另外,能够加上选项--extended,表示把文件保存在扩展数据区。--extended选项是对每一个文件而言的,取消了config里的--extended-data。

fbinst (hd1) add --extended c:/aa.img "aa.img"

导出文件:

fbinst (hd1) export "aa.img" c:/aa.img

删除文件:
fbinst (hd1) remove "aa.img"

#2更新:

info命令能够显示空闲空间。

增长命令rename,能够重命令文件。如何目标文件已经存在,则先删除目标文件再进行重命令。
fbinst (hd1) rename "aa_old.txt" "aa_new.txt"

增长命令pack,用于压缩空闲空间。删除文件后留下空块。新加的文件会自动寻找合适的空间。不过增长和删除操做比较多后,会形成碎片。这个命令压缩空间,把空块都链接起来。
fbinst (hd1) pack

#3更新:

保存文件建立时间,在info里能够看到。info里还显示文件是在主数据区或者扩展数据区(file后的数字0/1)。

增长命令resize,能够用于改变文件大小/建立新文件,例如:

fbinst (hd1) resize aa.txt 1024

有两个选项,一是--extended,意义同add命令。不过,它只有建立新文件时有效,旧文件维持在原来的区域。另外一个是--fill,当建立新文件/扩大文件时,缺省用0填充,用--fill能够指定填充字符的ascii码。例如:

fbinst (hd1) resize --fill 32 aa.img 1024

32就是空格。

增长命令copy,能够复制文件。

fbinst (hd1) copy aa_old.txt aa_new.txt

复制的文件和原来文件在同一区域。

rename命令更名为move。

grub4dos也更新了,支持最新的fbinst,并且优化了(ud)设备,如今主数据区域里的文件也能够用write写入了。

#4更新:
clear命令增长选项--menu和--file,表示只清除菜单项(text, menu, boot)或者文件项。不带参数时所有清除。

增长check命令,用于检查主数据区的完整性。

#5更新:
正确检测u盘容量,自动调整lba读取的扇区数。

更新:
增长--max-sectors参数。1.4正式版,下载在:
http://download.gna.org/grubutil/
附件
 fbinst.zip (17.87 KB)
2009-5-29 19:50, 下载次数: 702
#1
 grldr.zip (114.68 KB)
2009-5-29 19:50, 下载次数: 627
#1对应的grldr
 fbinst.zip (18.31 KB)
2009-5-29 21:53, 下载次数: 298
#2
 fbinst.zip (19.12 KB)
2009-5-30 13:15, 下载次数: 356
#3
 grldr.zip (114.58 KB)
2009-5-30 11:10, 下载次数: 937
#3对应的grldr
 fbinst.zip (19.46 KB)
2009-5-30 22:29, 下载次数: 423
#4
 fbinst.zip (19.55 KB)
2009-6-2 23:04, 下载次数: 630
#5

http://bbs.znpc.net/forum.php?mod=viewthread&tid=5669&extra=page%3D1&page=1
bean发表于 2009-6-7 03:14
fbinst v1.5:分离菜单文件,支持syslinux

1.5版本里,菜单项在文件里指定。增长菜单文件的命令是:

fbinst (hd1) add-menu fb.cfg c:\fb.txt

该命令会解析菜单文件c:\fb.txt,生成二进制的菜单文件,并保存为ud设备的文件fb.cfg。

fb.cfg是缺省的菜单文件,启动时会自动调用fb.cfg里的菜单。

外部的菜单文本的命令有:

default N
设置缺省菜单项

timeout N
设置缺省等待时间

text TEXT
显示文本

menu KEY sub_sys ..
菜单项,key是热键,sub_sys是启动子系统,目前只支持grldr,能够启动grldr/g2ldr/ntldr。grldr后面的参数是文件名字。这里是指fb设备内部的文件,你须要用add命令把实际的文件加到ud设备里。

还有一点,新的add命令顺序改变了。第一个参数是内部文件名字,第二个参数是外部文件名,这样是为了和其余的文件管理命令更加统一:

fbinst (hd1) add grldr c:\grldr

这是一个完整的例子:

fbinst (hd1) format
fbinst (hd1) add grldr c:\grldr
fbinst (hd1) add ntldr c:\ntldr
fbinst (hd1) add-menu fb.cfg c:\fb.txt

fb.txt内容以下:
default 0
timeout 5
text "Please choose menu"
text "F1. grldr"
menu F1 grldr grldr
text "F2. ntldr"
menu F2 grldr ntldr

另外,新加命令cat,能够显示ud里的文本文件的内容:

fbinst (hd1) cat aa.txt

要显示菜单文件的内容,能够使用cat-menu:

fbinst (hd1) cat-menu fb.cfg

另外,新版本整合了通常版本和调试版本,使用--debug可选择调试版。update命令能够用于在通常版本和调试版本之间切换:

切换到调试版:
fbinst --debug (hd1) update

切换到通常版:
fbinst (hd1) update

更新#2
add-menu增长两个选项--append和--direct,--append用于向已有的菜单添加新项而不是从新建立。而--direct用于在命令行里传递参数而不是经过外部文件。例子:

fbinst (hd1) add-menu --append --direct fb.cfg "text grldr_2" "menu F2 grldr grldr_2"

支持syslinux。首先,下载syslinux代码包并解压里面的ldlinux.bin,把它加到ud设备,而后使用如下的菜单:

text "F2. syslinux"
menu F2 syslinux ldlinux.bin

ldlinux.bin必须放在扩展数据区,不然出错。并且,在导入菜单时会自动修改ud里的ldlinux.bin使得它能够正常启动。若是更新了ldlinux.bin文件,必须再次导入菜单。

我测试时利用syslinux-3.81,其余版本也应该能够。

更新#3
add命令增长--syslinux选项,在加入文件的同时就修改ldlinux.bin文件。在导入菜单时就再也不修改了。改进了一下syslinux的处理,不须要从新读取文件。

add-menu命令的--direct选项改成--string,短形式是-s。如今不少选项都有短形式,不须要输入不少字符了。

text命令能够支持多个参数,在参数间自动加入空格,好比,如下的命令是等价的:

text "aaa bbb ccc"
text "aaa bbb" ccc
text aaa bbb ccc

text命令还加了参数-n,表示在输出后不换行,例如:
text -n "aaa"
text "bbb"
输出是 aaabbb

fb.txt里增长color命令,以选择文字颜色,颜色名字和grub4dos里相同:black, blue, green, cyan, red, magenta, brown, light-gray, dark-gray, light-blue, light-green, light-cyan,
  light-red, light-magenta, yellow, white。前景和背景色间用/分割。背景色是黑色时能够省略。例如:

color red/blue

前景红色,背景蓝色。颜色还能够使用normal,表示正常颜色,至关于light-gray/black 前景白色,背景黑色。

如下是一个例子:
timeout 5
color red
text -n "F1. "
color normal
text syslinux
menu F1 syslinux ldlinux.bin

更新#4
能够保存/恢复存档文件。

创建存档文件利用save命令:

fbinst (hd1) save aa.fba

须要恢复时,使用load命令:
fbinst (hd1) load aa.fba

load命令不会删除原有的文件,不过有重名的状况下存档里的文件会覆盖原来的版本。若是想要(hd1)里的文件和aa.fba里如出一辙,能够在load前运行format或者clear。

保存时和恢复时,fb的结构不须要相同。主数据和扩展数据区的大小均可以不同,只要保证空间足够就好了。并且文件的建立参数将会被保留。好比说,原有文件使用了--syslinux的,在恢复时也会加上--syslinux参数。

fbinst里的大部分命令也能做用于存档文件,能够用它们来参看和编辑存档文件。如下命令是有效的:info,clear,add,add-menu,resize,remove,copy,move,export,cat,cat-menu,pack, save, load。例如:

fbinst aa.fda info
fbinst aa.fda cat-menu fb.cfg

另外,修改了菜单按键的处理过程,不相关的键将被忽略而不是出错结束。

删除了config命令。default和timeout参数须要在菜单里设置。

format里--menu-size改成--list-size,由于如今菜单的大小没有限制了,--list-size设置的是文件列表的大小。

更新#5
format命令增长参数--archive,使用存档文件里的数据来格式化,例如:

fbinst (hd1) format --archive aa.fba

注意,若是在新u的盘里创建mbr结构,须要加上--force,不过这样的话也会从新格式化数据分区,慎用!

格式化后主数据区和扩展数据区的大小和原来相同。

另外,新版存档文件格式有所改动,和使用#4制做的不兼容。

更新#6
支持装载linux内核,好比说,你能够使用memdisk来虚拟磁盘:

text "F3. memdisk"
menu F3 linux "memdisk" "floppy.img" ""

linux的三个参数分别是内核,initrd和命令行参数。

更新#7
增长msdos的支持。使用时,把io.sys加入ud设备,其余文件如CONFIG.SYS, COMMAND.COM 和 AUTOEXEC.BAT放在数据分区。菜单:

text "F4. msdos"
menu F4 msdos io.sys

更新#8
在装载linux内核时,显示装载进度。每隔512k打印一个点。


http://bbs.znpc.net/forum.php?mod=viewthread&tid=5663&extra=&page=1
发表于 2009-5-28
fbinst启动问题专用贴

目前1.5版本已经基本稳定,如何遇到还不能启动的主板,请用如下的方法进行测试。

1,下载附件里的fbinst.exe和test.fba,用如下命令能够制做u盘(该命令会删除原有u盘的内容,务必留意,并且,须要把(hd9)改成正确的设备名):

fbinst --debug (hd9) format --archive test.fba --force

2,启动成功的标准是能够进入grldr命令行,grub4dos使用以及PE相关的问题请不要在这里报告。

3,如何不能启动,能够试一下fat16 + copybpb的方式。

4,新版的format增长--max-sectors参数,用来设置最大读取的扇区数。数值为1时兼容性最高,不过速度也最慢。前面步骤都不成功建议试试用 --max-sectors 1 格式化:

fbinst --debug (hd9) format --archive test.fba --force --max-sectors 1

5,以上步骤都不能成功时,若是屏幕上没有任何显示,就是说u盘mbr彻底被跳过,那样也没有什么办法。不然的话,把屏幕上的信息抄下来。
附件
 test.zip (114.81 KB)
2009-6-19 23:28, 下载次数: 7800
存档文件
 fbinst.zip (24.31 KB)
2009-6-19 23:28, 下载次数: 7329
1.5

http://bbs.wuyou.com/viewthread.php?tid=169595&highlight=fbinst%2B1.6
最新 fbinst 1.6 正式版,8月10日更新,1楼有 FbinstTool 10601正式版
详细可看http://www.burgloader.com/bbs/index.php?topic=54.0   注册后反馈!

趁如今 bean 一直在关注 fbinst ,你们多多反馈,不然极可能又要等很久了!
请你们把握这个可贵的机会!
例如:成功率?兼容性?文件列表?启动速度?各类模式?。。。。。。。
也别光用了,不反馈!
请你们详细测试,及时反馈,以便于 bean 大师及时更新,制做成功的 fbinst 为你们使用!
我没有完整的测试环境,因此没法作更详细的报告!拜托你们..........................

fbinst 菜单:
1. menu HOTKEY SUBCOMMAND
启动内核的命令都以menu开始,HOTKEY是对应的热键,子命令有

  a) grldr FILENAME
  启动grldr/ntldr文件

  b) syslinux FILENAME
  启动ldlinux.bin文件
  
  c) msdos FILENAME
  启动io.sys文件
   
  d) freedos FILENAME
  启动kernel.sys文件

  e) chain FILENAME
  加载启动扇区文件

  f) linux KERNEL INITRD PARAM
  启动linux内核

2. text STR
显示一行文字

3. timeout NUM
设置自动启动的时间

4. default NUM
设置自动启动的menu项

5. color FG/BG
设置颜色,前景/背景的格式,颜色值有
暗色:black, blue, green, cyan, red, magenta, brown, light-gray, 
亮色:dark-gray, light-blue, light-green, light-cyan, light-red, light-magenta, yellow, white

背景只能使用暗色。也能够用normal来表示普通色,它至关于light-gray/black。

举例:

timeout 1
default 0
color red
text "                          fbinst v1.6 menu by bean"
text "                          ----------[01]----------"
color green
text "                          Press F1  > GRLDR"
menu F1 grldr "grldr"
color red
text "                          ----------[02]----------"
color green
text "                          Press F2  > WDC-SYSLINUX"
menu F2 syslinux "ibmlinux.bin"
color red
text "                          ----------[03]----------"
color green
text "                          Press F3  > MSDOS 7.1"
menu F3 msdos "io.sys"
color red
text "                          ----------[04]----------"
color green
text "                          Press F4  > SKTQB"
menu F4 grldr "SKTQB"
color red
text "                          ----------[05]----------"
color green
text "                          Press F5  > MaoTao WinPE"
menu F5 grldr "LDRXPE"
color red
text "                          ----------[06]----------"
color green
text "                          Press F6  > XORLDR"
menu F6 chain "XORLDR.MBR"
color red
text "                          ----------[07]----------"
color green
text "                          Press F7  > BULDR"
menu F7 grldr "BULDR"
color red
text "                          ----------[08]----------"
color green
text "                          Press F8  > CJJJP"
menu F8 grldr "CJJJP"
color red
text "                          ----------[09]----------"
color green
text "                          Press F9  > NTLDR"
menu F9 grldr "NTLDR"
color red
text "                          ----------[10]----------"
color green
text "                          Press F10 > BOOTMGR"
menu F10 grldr "BOOTMGR"
color red
text "                          ----------[11]----------"
color green
text "                          Press F11 > GMYghost.img"
menu F11 linux "memdisk" "GMYghost.img" "c=142 h=4 s=36 floppy"

U盘制做fbinst启动方法请见:
http://bbs.wuyou.com/viewthread.php?tid=142426&extra=page%3D1
http://bbs.wuyou.com/viewthread.php?tid=175985&extra=page%3D1
http://bbs.wuyou.com/viewthread.php?tid=170034&extra=page%3D2

更新历史:
v11d:
bean 大师测试此版没什么问题,就将此版定为正式版。
【8月10日更新】
* format命令增长参数--nalign,能够指定数据分区开始扇区的对齐,例如:
fbinst DISK format --nalign 512

* 增长命令create,能够用于建立空的存档文件,例如:
fbinst ARFILE create
v11c:【7月26日更新】
* 在-l列表里,用*来表示fb设备
v11b  :【7月16日更新】
* 当数据大于20m时, add, export, save, load, format等命令显示进度。每一个点表明5%。
* 修正了进度条的一个bug
* 在XP下强制格式化后更新u盘内容。
v11:   【7月13日更新】
* 当数据大于20m时, add, export, save, load, format等命令显示进度。每一个点表明5%。
v10b  【7月9日更新】
* 调整了一下chs检测了代码。之前须要--chs选项才能启动的用户能够测试一下这个版本,看在没有--chs的状况下是否正常。
v10:
* 修改了一下chs模式的测试
* initrd装载地址改成32m
v9b:
* sync命令增长选项--reset-bpb
* info命令显示bpb的三种状态,copy, init和zero
* 在搜索文件时忽略大小写
v9:
* sync命令增长选项--reset-bpb
* info命令显示bpb的三种状态,copy, init和zero
v8:
* 修正了linux命令的问题
* 支持最新的syslinux 4
* 增长菜单命令chain,能够启动mbr文件,例如:
text "F4. chainload MBR"
menu F4 chain mbr.bin
v7:
* 修正了菜单文件fb.cfg超过512时出问题的bug
* export和add命令里的FILE参数能够省略,这时,将从标准输入和输出读取数据,例如:
cat aa | fbinst DISK add aa
fbinst DISK export aa > aa
* sync命令增长--max-sectors, --chs和--zip参数,不须要format命令就能够修改这些参数。
* export命令会自动建立输出文件的父层目录
* info命令增长debug version和copy bpb的信息
* 修正了FAT32格式化的bug,如今最大能够支持2T
v5:
* 在没有--force时不锁定磁盘
v4:
* 能够读取编辑过的fba文件
* 增长fba文件的format option输出
* 根据fb mbr没有初始化和被覆盖显示不一样的信息:fb mbr not initialized, fb mbr corrupted。后者能够用restore命令恢复。
v3:
* 缺省列表使用最大值456960。
* format命令增长参数--chs,强制使用chs模式。这能够用于某些不能自动检测模式的bios。
* info命令新增输出format options,显示格式化参数。
格式化参数只有-p,-e,-l,--zip, --chs, --max-sectors的值,没有数据分区格式化的参数(它们没法自动检测)。并且,若是某一数值和缺省值相同时,将不会显示。-l里显示的数值将上调到510的倍数(实际保存的数值是以扇区为单位的)。
chenall :新的GRUB4DOS已经上传,有条件的朋友请测试一下。
下载地址:
http://grub4dos-chenall.googlecode.com/files/grub4dos-0.4.5b-2010-06-21.zip
2010-06-21 applied bean's patch(supported new (ud) device created with fbinst1.6). 
V2:    
  (2010年6月19日更新)
* 支持大的文件列表。当前缺省值是32640,最大可支持456960。
  (天涯海角1216注:这个对与UD区放入多个文件颇有效,防止出现文件列表不够)
* 增长缺省启动文件。若是fb里没有配置菜单fb.cfg,则自动启动buldr。
* 支持使用盘符来表示设备,好比:
fbinst F: info
fbinst F: format
(hdx)的形式依然支持,不过使用盘符更加直观。
这个版本里磁盘存储结构有较大改变,之前的grldr和buldr都用不了。测试时请用附件里文件。
bean 用最新版本的fbinst制做了一个burg的fba,里面包含了全部的风格:
http://grub4dos.sourceforge.net/burg_fba_v2.zipfbinst编译脚本说明:首先,须要下载burg的编译包,而后把附件grubutil_scripts.zip解压到msys的bin目录里。grubutil_dirs这个文件设置路径。SRCDIR是源码的存放目录,OBJDIR是编译文件目录。grubutil_update下载最新代码grubutil_compile编译代码V1:(2010年6月17日更新)支持windows vista/7(须要提高至管理员权限),如今格式化后会remount分区,不须要弹出u盘。将新版 fbinst.exe 与 FbinstTool 放在同一个目录下,再选外置FBINST便可。或例子:fbinst (hdx) format --force --primary 10m --extended 40m --menu-size 4096 --align --zip

相关文章
相关标签/搜索