forked from chenall/grub4dos
-
Notifications
You must be signed in to change notification settings - Fork 0
/
README_GRUB4DOS_CN.txt
4401 lines (3348 loc) · 193 KB
/
README_GRUB4DOS_CN.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
本文档来源:http://bbs.znpc.net/viewthread.php?tid=5587
感谢zw2312914提供
原版是中英文对照的版本,这里已经经过删改。
需要看原版的可以从上面的贴子下载.
一些旧的网址已经删除,只保留目前在用的.
注:本文仅供参考,可能有一些更新没有在这里说明.如果有发现错误可以到论坛发贴或email联系我([email protected])
其它命令用法请参考
http://chenall.net 或 http://grub4dos.chenall.net 处的 GRUB4DOS 有关文档。
外部命令的用法请参考
http://chenall.net/post/tag/grub4dos/
项目主页
https://github.com/chenall/grub4dos
下载网址:
http://grub4dos.chenall.net
工具和外部命令:
http://code.google.com/p/grubutils/downloads/list
获取最新源代码的方法:
git clone git://github.com/chenall/grub4dos.git
或
svn co https://github.com/chenall/grub4dos grub4dos-src
通过你的 web 浏览器在线查看源代码:
https://github.com/chenall/grub4dos
论坛(官方技术支持站点):
中文:
http://bbs.wuyou.com/forumdisplay.php?fid=60
http://bbs.znpc.net/forumdisplay.php?fid=4
英文:
http://reboot.pro/forum/66/
******************************************************************************
*** GCC 黑名单 ***
******************************************************************************
已知 gcc-4.6.x 所产生的程序在某些机器上无法正常运作。
来源: http://bbs.wuyou.net/viewthread.php?tid=274070
已知 gcc-4.7.x 所产生的程序无法运行 memtest86。
来源: http://bbs.wuyou.net/redirect.php?tid=180142&pid=2669810&goto=findpost#pid2669810
---------------------近期更新记录-----------------------------------------------
最新更新记录请查看,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
--------------------------------------------------------
这里用一些示例来演示磁盘仿真命令的用法:
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
boot
在“map --hook”命令之后,仿真立即生效,即使是在GRUB的命令行模式中。
Note that the (fd0) in "chainloader (fd0)+1" is the emulated virtual
floppy A:, not the real floppy diskette(because map is hooked now).
注意“chainloader (fd0)+1” 中的(fd0)是仿真后的虚拟软驱 A:,而不是真
实的软盘(因为映射现在已经被挂载了)。
3. 仿真镜像文件为软驱A:并从C:盘中启动win98:
map --read-only (hd0,0)/floppy.img (fd0)
chainloader (hd0,0)+1
rootnoverify (hd0)
map --floppies=1
map --harddrives=1
boot
4. 仿真硬盘分区为第一硬盘并从中启动DOS:
map --read-only (hd2,6)+1 (hd0)
map --hook
chainloader (hd0,0)+1
rootnoverify (hd0)
map --harddrives=1
boot
在这个示例中,(hd2,6)+1代表BIOS序号为3的(hd2)硬盘中的,扩展的DOS逻辑分区。
如果一个DOS分区被仿真为一个硬盘,GRUB for DOS将首先定位分区表,通常,
是在DOS分区的开头63个扇区中。如果那里没有分区表,GRUB for DOS将拒绝仿真。
5. 仿真一个镜像文件为第一硬盘然后从中启动DOS:
map --read-only (hd0,0)/harddisk.img (hd0)
chainloader --load-length=512 (hd0,0)/harddisk.img
rootnoverify (hd0)
map --harddrives=1
boot
如果一个镜像文件被仿真为硬盘,此镜像文件必须包含MBR。也就是说,
HARDDISK.IMG的第一扇区必须包含被仿真的虚拟硬盘的分区表。
注意: BIOS数据区中的软盘和硬盘的总数在映射期间没有被改变。当主板上没有配置真
实的软驱时,你通常应该专门使用诸如‘map --floppioes=’以及
map --harddrives=’来设置它们。如果不这样做,DOS可能会启动失败。
‘map --status’可以报告出一些有价值的东西。同时要注意‘map --floppies=’
和‘map --harddrives=’需要在没有执行映射前单独使用。
版本0.4.2引入了一个新参数,memdisk_raw,用以模拟和内存驱动器类似的原生模式。
如果BIOS不支持中断int15/87h,或者int18/87h的支持有缺陷,你应该在任何内
存盘被使用前设置这个变量。这里是一个示例:
map --memdisk-raw=1
map --mem (hd0,0)/floppy.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
boot
如果你碰到内存驱动器故障而又没有使用map --memdisk-raw=1时,你应当用
‘map --memdisk-raw=1’来尝试一次。
你一执行‘map --memdisk-raw=0’之后,就应该执行一次‘map --unhook’
(如果需要的话在这之后再执行‘map --hook’)。
更新:memdisk_raw 现在默认值为1 。如果你希望使用中断int15/87h来访问内存
驱动器,你应当令‘map --memdisk-raw=0 ’。
--------------------------------------------------------
任意大小的软盘或硬盘可以被 GRUB for DOS 0.2.0 版仿真。
镜像文件必须是连续的,否则GRUB for DOS 将拒绝执行。
‘blocklist’命令可以列举一个文件的碎片或者分块。
在GRUB提示符下输入“help map”可以获得简要的命令说明。
这样的形式
map ... (fd?)
是一个软盘仿真,而下面的形式
map ... (hd?)
是一个硬盘仿真。
使用硬盘仿真时,基于安全因素最好不要去启动Windows 。
Windows甚至可能会破坏掉所有的数据和你硬盘上的所有资料!!!!!!!!
关于--mem的更新 :当使用--mem时,甚至是在进入Windows的时候,它看
来都相当安全。Win98可以正常运行内存驱动器。
Windows NT/2000/XP不能识别仿真的驱动器,不管是否使用了--mem选项。
******************************************************************************
*** grldr可启动的软盘或硬盘分区的说明 ***
******************************************************************************
1. Ext2 引导扇区/引导记录的布局 (用于载入grldr)
------------------------------------------------------------------------------
一个EXT2/EXT3的卷可以是GRUB可启动的。复制grldr和可选的menu.lst文件到这个EXT2/EXT3
卷的根目录,并按照grldr的第五扇区建立它的引导扇区(一些需要更改的字段在下面的表
中做了详细注释)。那么,这个EXT2/EXT3的卷就是GRUB可启动的。
更新: bootlace.com是一个dos/linux下的工具,它可以把GRLDR的引导记录安装到一个
EXT2/EXT3卷的第一扇区。
偏移 长度 说明
====== ====== ==============================================================
00h 2 Machine code for short jump over the data.
近转移指令的机器码
02h 1 LBA indicator. Valid values are 0x02 for CHS mode, or 0x42 for
LBA mode.
LBA指示码。CHS模式时,有效值是0x02;LBA模式时有效值为0x42。
If the BIOS int13 supports LBA, this byte can be safely set to
0x42.
如果BIOS的int13支持LBA,此字节可以安全地设置为0x42。
Some USB BIOSes might have bugs when using CHS mode, so the
format program should set this byte to 0x42. It seems that
(generally) all USB BIOSes have LBA support.
某些 USB 设备的BIOS在使用CHS寻址模式时可能有缺陷,所以格式化程
序应当设置这个字节为0X42 。似乎所有(多数)的USB BIOS都能支持LBA 。
If the format program does not know whether the BIOS has LBA
support, it may operate this way:
如果格式化程序不知道BIOS是否具有LBA支持,它可以采用以下方法:
if (partition_start + total_sectors_in_partition) exceeds the
CHS addressing ability(especially when it is greater than
1024*256*63), the caller should set this byte to 0x42,
otherwise, set to 0x02.
如果(分区的起始地址加上分区的总扇区)超过了CHS的寻址能力。
(特别是当它大于1024*256*63时),调用程序应当设置此字节为0x42,
否则,要设为0x02。
Note that Windows98 uses the value 0x0e as the LBA indicator.
注意 Windows98 使用0x0e作为LBA指示码。
Update: this byte of LBA indicator is ignored. The boot
record can probe the LBA support of BIOS.
更新:LBA指示码这个字节已被忽略。引导记录能够探测BIOS的LBA支持。
03h 10 OEM name string (of OS which formatted the disk).
Update: this field is now used for error message of "I/O error"
OEM 名称字符串(对该磁盘进行格式化的操作系统的名字)。
更新:此字段现在被用于错误提示信息“I/O error”
0Dh 1 Sectors per block. Valid values are 2, 4, 8, 16 and 32.
每块扇区数。有效值是2, 4, 8, 16 和 32。
0Eh 2 Bytes per block. Valid values are 0x400, 0x800, 0x1000, 0x2000
and 0x4000.
每块字节数。有效值是0x400, 0x800, 0x1000, 0x2000 和 0x4000。
10h 4 Pointers in pointers-per-block blocks, that is, number of
blocks covered by a double-indirect block.
在pointers-per-block块中的指针数,即一个二级间接块包含的块数。
Valid values are 0x10000, 0x40000, 0x100000, 0x400000 and
0x1000000.
有效值是0x10000, 0x40000, 0x100000, 0x400000 和 0x1000000。
14h 4 Pointers per block, that is, number of blocks covered by an
indirect block.
每块指针数,即一个间接块包含的块数。
Valid values are 0x100, 0x200, 0x400, 0x800, 0x1000.
有效值是0x100, 0x200, 0x400, 0x800, 0x1000 。
18h 2 Sectors per track.
每磁道的扇区数。
1Ah 2 Number of heads/sides.
磁头数/面数
1Ch 4 Number of hidden sectors (those preceding the boot sector).
隐藏扇区数(它们位于引导扇区之前)
Also referred to as the starting sector of the partition.
也被成为是分区的起始扇区。
For floppies, it should be 0.
对于软盘,它应当为0 。
20h 4 Total number of sectors in the filesystem(or in the partition).
文件系统中的扇区总数(或者是分区的扇区总数)。
24h 1 BIOS drive number of the boot device.
启动设备的 BIOS 驱动器号码。
Actually this byte is ignored for read. The boot code will
write DL onto this byte. The BIOS or the caller should set
drive number in DL.
实际此字节在读入时被忽略。引导代码将把DL的值写入到此字节中。
BIOS或者调用程序应当在DL中设置磁盘号码。
We assume all BIOSes pass correct drive number in DL.
Buggy BIOSes are not supported!!
我们假定所有的BIOS在DL中能传递正确的磁盘号码。
糟糕的BIOS不被支持!!
25h 1 Partition number of this partition on the boot drive.
此分区在启动驱动器上的分区号
0, 1, 2, 3 are primary partitions.
4, 5, 6, ... are logical partitions in the extended partition.
0, 1, 2, 3 是主分区 。4, 5, 6, ... 等等是扩展分区中的逻辑分区。
0xff is for whole drive. So for floppies, it should be 0xff.
0xff代表整个磁盘。所以对于软盘,其分区号码应当是0xff 。
26h 2 inode size in bytes. (Notice! We use the formerly reserved
word here for inode size!)
字节计数的索引节点大小。(注意!我们在此处为索引节点大小使用
了以前被保留的一个字,即两个字节)
28h 4 Number of inodes per group.
每组的i节点数
Normally a 1.44M floppy has only one group, and the total
number of inodes is 184. So the value should be 184 or
greater.
通常,1.44M软盘只有一个组,并且总的i节点数是184。所以此值
应为184或者更大。
2Ch 4 The block number for group descriptors.
组描述符的块号码。
Valid values are 2 for 1024-byte blocks, and 1 otherwise.
对于1024字节的块有效值是2 ,否则是1 。
The value here is equal to (s_first_data_block + 1).
这里的值等于(s_first_data_block + 1)。
30h 1 code for "cld"(0xFC).
指令“cld”(即0xFC)。
31h 2 code for "xor ax,ax"(0x31, 0xC0).
指令“xor ax,ax”(即0x31,0xC0)
33h 1 code for "nop"(0x90) or "cwd"(0x99)
指令“nop”(即0x90)或“cwd”(即0x99)
34h 458 The rest of the machine code.
机器码部分。
1FEh 2 Boot Signature AA55h.
引导签名AA55h 。
2. FAT12/FAT16 Boot Sector/Boot Record Layout (for loading grldr)
2. FAT12/FAT16 引导扇区/引导记录的布局 (用于载入grldr)
------------------------------------------------------------------------------
A FAT12/16 volume can be GRUB-bootable. Copy grldr and an optional menu.lst to
the root dir of the FAT12/16 volume, and build the boot sector based on the
fourth sector of grldr(some fields need to be changed as detailed in the
following table). And then the FAT12/16 volume is GRUB-bootable.
一个FAT12/16的卷是GRUB可启动的。复制grldr和可选的menu.lst文件到这个FAT12/16 卷
的根目录,并按照grldr的第四扇区建立它的引导扇区(一些需要更改的字段在下面的表中
做了详细注释)。然后这个FAT12/16的卷就是GRUB可启动的。
Update: bootlace.com is a DOS/Linux utility that can install the GRLDR boot
record onto the boot sector of an FAT12/16 volume.
更新: bootlace.com 是一个dos/linux下的工具,而它能把GRLDR的引导记录安装到一个
FAT12/16卷的引导扇区。
Offset Length Description
偏移 长度 说明
====== ====== ==============================================================
00h 2 Machine code for short jump over the data.
近转移指令的机器码
02h 1 LBA indicator. Valid values are 0x90 for CHS mode, or 0x0e for
LBA mode.
LBA指示码。CHS模式时,有效值为0x90;LBA模式时,有效值为0x0e 。
If the BIOS int13 supports LBA, this byte can be safely set to
0x0e.
如果BIOS int13支持LBA,此字节可以安全地设置为0x0e 。
Some USB BIOSes might have bugs when using CHS mode, so the
format program should set this byte to 0x0e. It seems that
(generally) all USB BIOSes have LBA support.
某些USB设备的BIOS在使用CHS寻址模式时可能有缺陷,所以格式化程序
应当设置这个字节为0X0e 。似乎所有的(多数)USB BIOS都能支持 LBA 。
If the format program does not know whether the BIOS has LBA
support, it may operate this way:
如果格式化程序不知道BIOS是否具有LBA支持,它可以采用以下方法:
if (partition_start + total_sectors_in_partition) exceeds the
CHS addressing ability(especially when it is greater than
1024*256*63), the caller should set this byte to 0x0e,
otherwise, set to 0x90.
如果(分区的起始地址加上分区的总扇区)超过了CHS 的寻址能力。
(特别是当它大于1024*256*63),调用程序应当设置此字节为0x0e,
否则,要设为0x90。
Update: this byte of LBA indicator is ignored. The boot
record can probe the LBA support of BIOS.
更新:LBA 指示码这个字节已被忽略。引导记录能探测BIOS的LBA支持。
Update(2006-07-31): Though GRLDR won't use this LBA-indicator
byte, Windows 98 uses it. Usually this byte should be 0x90 for
CHS mode(especially for floppies). If this byte is not set
properly, Windows 98 will not recognize the floppy or
partition. This problem was reported by neiljoy. Many thanks!
更新 (2006-07-31):尽管GRLDR不再使用LBA指示码这个字节,
但Windows 98会使用它。通常这个字节在 CHS 模式中应当设置为0x90
(软盘尤其如此)。如果此字节未被正确设置,Windows 98将不能识别
软盘或分区。这一问题由neiljoy先生报告。非常感谢!
03h 8 OEM name string (of OS which formatted the disk).
OEM名称字符串 (对该磁盘进行格式化的操作系统的名称)
0Bh 2 Bytes per sector. Must be 512.
每扇区字节数。必须为512 。
0Dh 1 Sectors per cluster. Valid values are 1, 2, 4, 8, 16, 32, 64
and 128. But a cluster size larger than 32K should not occur.
每簇的扇区数。有效值是1, 2, 4, 8, 16, 32, 64和128 。但是簇大小
大于32K的情况不应发生。
0Eh 2 Reserved sectors(number of sectors before the first FAT,
including the boot sector), usually 1.
保留的扇区数(第一文件分配表之前的扇区数,包括引导扇区),通常是1。
10h 1 Number of FATs(nearly always 2).
文件分配表数(几乎总是2)。
11h 2 Maximum number of root directory entries.
根目录项的最大个数。
13h 2 Total number of sectors (for small disks only, if the disk is
too big this is set to 0 and offset 20h is used instead).
扇区总数(仅用于小磁盘,如果磁盘太大此处被设置为0,而偏移 20h 处
则替代它使用)。
15h 1 Media descriptor byte, pretty meaningless now (see below).
媒体描述符字节,现在该此节已经没有太大意义了(参见后面)。
16h 2 Sectors per FAT.
每个文件分配表的扇区数。
18h 2 Sectors per track.
每个磁道的扇区数
1Ah 2 Total number of heads/sides.
磁头或面的总数。
1Ch 4 Number of hidden sectors (those preceding the boot sector).
隐藏扇区数(位于引导扇区之前)。
Also referred to as the starting sector of the partition.
也被称为是分区的开始扇区。
For floppies, it should be 0.
对于软盘,它应当为0 。
20h 4 Total number of sectors for large disks.
大磁盘的扇区总数。
24h 1 BIOS drive number of the boot device.
引导设备的BIOS磁盘号。
Actually this byte is ignored for read. The boot code will
write DL onto this byte. The BIOS or the caller should set
drive number in DL.
实际此字节在读入时被忽略。引导代码将把DL中的值写入此字节。
BIOS或者调用程序应当在DL中设置磁盘号码。
We assume all BIOSes pass correct drive number in DL.
Buggy BIOSes are not supported!!
我们假定所有的BIOS在DL中能传递正确的磁盘号码。
糟糕的BIOS不被支持!!
25h 1 Partition number of this filesystem in the boot drive.
启动驱动器上此文件系统的分区号码。
This byte is ignored for read. The boot code will write
partition number onto this byte. See offset 41h below.
此字节在读入时被忽略。引导代码将分区号码写到此字节。
见下述偏移41h 。
26h 1 Signature (must be 28h or 29h to be recognised by NT).
签名(必须是28h或者29h以便能被 NT 识别)
27h 4 Volume serial number.
卷的序列号。
2Bh 11 Volume label.
卷标签。
36h 8 File system ID. "FAT12 ", "FAT16 " or "FAT ".
文件系统ID。“FAT12”, “FAT16”或 “FAT”。
3Eh 1 code for "cli".
指令“cli”。
3Fh 1 code for "cld".
指令“cld”。
40h 1 code for "mov dh, imm8".
指令“mov dh, imm8”。
41h 1 Partition number of this partition on the boot drive.
此分区在启动驱动器的分区号。
0, 1, 2, 3 are primary partitions.
4, 5, 6, ... are logical partitions in the extended partition.
0, 1, 2, 3 是主分区。4, 5, 6, ... 等等是扩展分区中的逻辑分区。
0xff is for whole drive. So for floppies, it should be 0xff.
0xff代表整个磁盘。所以对于软盘,其分区号码应当是0xff 。
42h 442 The rest of the machine code.
机器码部分。
1FCh 4 Boot Signature AA550000h. (Win9x uses 4 bytes as magic value)
引导签名AA550000h 。(Win9x 使用4字节作为魔数值。)
3. FAT32 Boot Sector/Boot Record Layout (for loading grldr)
3. FAT32 引导扇区/引导记录的布局 (用于载入grldr)
------------------------------------------------------------------------------
A FAT32 volume can be GRUB-bootable. Copy grldr and an optional menu.lst to
the root dir of the FAT32 volume, and build the boot sector based on the
third sector of grldr(some fields need to be changed as detailed in the
following table). And then the FAT32 volume is GRUB-bootable.
一个FAT32的卷是GRUB可启动的。复制grldr和可选的menu.lst文件到这个FAT32卷的根
目录,并按照grldr的第三扇区建立它的引导扇区(一些需要更改的字段在下面的表中
做了详细注释)。然后这个FAT32的卷就是GRUB可启动的。
Update: bootlace.com is a DOS/Linux utility that can install the GRLDR boot
record onto the boot sector of an FAT32 volume.
更新: bootlace.com 是一个dos及linux下的工具而它能把 GRLDR 的引导记录安装
到一个FAT32卷的引导扇区。
Offset Length Description
偏移 长度 说明
====== ====== ==============================================================
00h 2 Machine code for short jump over the data.
近转移指令的机器码。
02h 1 LBA indicator. Valid values are 0x90 for CHS mode, or 0x0e for
LBA mode.
LBA指示码。CHS模式时,有效值为0x90,而LBA模式时,有效值为0x0e。
If the BIOS int13 supports LBA, this byte can be safely set to
0x0e.
如果BIOS的int13支持LBA,此字节可以安全地设置为0x0e。
Some USB BIOSes might have bugs when using CHS mode, so the
format program should set this byte to 0x0e. It seems that
(generally) all USB BIOSes have LBA support.
某些USB设备的BIOS在使用CHS寻址模式时可能有缺陷,所以格式化程
序应当设置这个字节为0X0e。似乎所有(多数)的USB BIOS都能支持LBA 。
If the format program does not know whether the BIOS has LBA
support, it may operate this way:
如果格式化程序不知道BIOS是否具有LBA支持,它可以采用以下方法:
if (partition_start + total_sectors_in_partition) exceeds the
CHS addressing ability(especially when it is greater than
1024*256*63), the caller should set this byte to 0x0e,
otherwise, set to 0x90.
如果(分区的起始地址加上分区的总扇区)超过了CHS 的寻址能力。
(特别是当它大于1024*256*63),调用程序应当设置此字节为0x0e,
否则,要设为0x90。
Update: this byte of LBA indicator is ignored. The boot
record can probe the LBA support of BIOS.
更新: LBA 指示码这个字节已被忽略。引导记录能探测BIO的LBA支持。
Update(2006-07-31): Though GRLDR won't use this LBA-indicator
byte, Windows 98 uses it. Usually this byte should be 0x90 for
CHS mode(especially for floppies). If this byte is not set
properly, Windows 98 will not recognize the floppy or
partition. This problem was reported by neiljoy. Many thanks!
更新 (2006-07-31):尽管GRLDR不再使用 LBA 指示码这个字节,
但Windows 98会使用它。通常这个字节在 CHS 模式中应当设置为0x90
(软盘尤其如此)。如果此字节未被正确设置,Windows 98 将不能识别
软盘或分区。这一问题由neiljoy先生报告。非常感谢!
03h 8 OEM name string (of OS which formatted the disk).
OEM名称字符串 (对该磁盘进行格式化的操作系统的名称)
0Bh 2 Bytes per sector. Must be 512.
每扇区字节数。必须为512 。
0Dh 1 Sectors per cluster. Valid values are 1, 2, 4, 8, 16, 32, 64
and 128. But a cluster size larger than 32K should not occur.
每簇的扇区数。有效值是1, 2, 4, 8, 16, 32, 64 和 128 。
但是簇大小大于32K的情况不应发生。
0Eh 2 Reserved sectors(number of sectors before the first FAT,
including the boot sector), usually 1.
保留的扇区数(第一文件分配表之前的扇区数,包括引导扇区),
通常是1 。
10h 1 Number of FATs(nearly always 2).
文件分配表数(几乎总是2)。
11h 2 (Maximum number of root directory entries)Must be 0.
(根目录项的最大个数)必须为0 。
13h 2 (Total number of sectors for small disks only)Must be 0.
(仅用于小磁盘的扇区总数)必须为0 。
15h 1 Media descriptor byte, pretty meaningless now (see below).
媒体描述符字节,现在该此节已经没有太大意义了(参见后面)。
16h 2 (Sectors per FAT)Must be 0.
(每个文件分配表的扇区数)必须为0 。
18h 2 Sectors per track.
每个磁道的扇区数
1Ah 2 Total number of heads/sides.
磁头或面的总数。
1Ch 4 Number of hidden sectors (those preceding the boot sector).
隐藏扇区数(它们位于引导扇区之前)。
Also referred to as the starting sector of the partition.
也被称作是分区的起始扇区。
For floppies, it should be 0.
对于软盘,它应当为0 。
20h 4 Total number of sectors for large disks.
大磁盘的扇区总数。
24h 4 FAT32 sectors per FAT.
每个文件分配表的 FAT32 扇区数。
28h 2 If bit 7 is clear then all FATs are updated, otherwise bits
0-3 give the current active FAT, all other bits are reserved.
如果第7位被清零,所有文件分配表将被更新,否则0-3位给出当前活
动的文件分配表,所有其它位被保留。
2Ah 2 High byte is major revision number, low byte is minor revision
number, currently both are 0.
高字节是主修订号码,低字节是小修订号码,现在都是0 。
2Ch 4 Root directory starting cluster.
根目录起始簇。
30h 2 File system information sector.
文件系统信息扇区。
32h 2 If non-zero this gives the sector which holds a copy of the
boot record, usually 6.
如果非零它给出具有引导记录的备份扇区,通常是6。
34h 12 Reserved, set to 0.
保留,设为0 。
40h 1 BIOS drive number of the boot device.
启动设备的 BIOS 驱动器号码。
80h is first HDD, 00h is first FDD.
第一硬盘是80h,第一软盘是00h。
Actually this byte is ignored for read. The boot code will
write DL onto this byte. The BIOS or the caller should set
drive number in DL.
实际此字节在读入时被忽略。引导代码将把DL中的值写入此字节。
BIOS或者调用程序应当在DL中设置磁盘号码。
We assume all BIOSes pass correct drive number in DL.
Buggy BIOSes are not supported!!
我们假定所有的 BIOS 在DL中能传递正确的磁盘号码。
糟糕的BIOS不被支持!!
41h 1 Partition number of this filesystem in the boot drive.
启动驱动器上此文件系统的分区号码。
This byte is ignored for read. The boot code will write
partition number onto this byte. See offset 5Dh below.
此字节在读入时被忽略。引导代码将分区号码写到此字节。
见下述的偏移5Dh 。
42h 1 Signature (must be 28h or 29h to be recognised by NT).
签名(必须是 28h 或者 29h 以便能被 NT 识别)
43h 4 Volume serial number.
卷的序列号。
47h 11 Volume label.
卷标签。
52h 8 File system ID. "FAT32 ".
文件系统标识。“FAT32 ”。
5Ah 1 opcode for "cli".
指令 “cli”。
5Bh 1 opcode for "cld".
指令 “cld” 。
5Ch 1 opcode for "mov dh, imm8".
指令 “mov dh, imm8”。