精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>● 计算机光盘>>【光盘使用、刻录相关技术研究】>>可引导型光碟的制作

主题:可引导型光碟的制作
发信人: rance_p()
整理人: beelzebub.cx(2001-12-14 21:37:26), 站内信件
可引导型光碟的制作 

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

引导型光碟的观念己成型许久了,只是要如何在Dos的平台上有此能力相较於 
Mac及Unix平台是比较困难罢了。对Mac及Unix系统而言,制作引导型光碟一直 

都不是问题,只要将这两个系统的硬碟,做Byte-to-Byte的拷贝,再将它写入CD
, 
系统即会自动侦测并对此光碟进行开机的动作。但是如果你对Dos的硬碟做同 
样的动作,结果还是无法使CD开机的。 



在Dos下,你需要有两个要素才可以读取CD-ROM:第一是需要有驱动程式随系 
统载入以便使系统能侦测到光碟机的存在;第二便是需要有像MSCDEX的程式 
来分配一个磁碟机编号给光碟机以使Dos能从光碟机读取档案。所以要制作一 
个可以在Dos下开机的CD-ROM首先的困难便是开机的问题。一般Dos开机的程 
序是先要能将Dos的指令直译器COMMAND.COM载入,然後是驱动程式(Device 
Driver),再来便是MSCDEX可以分配磁碟机编号给光碟机,才可以读取CD-ROM 

的资料。但是如果要从光碟载入COMMAND.COM必需先载入MSCDEX才行,问题 
是如不先载入COMMAND.COM又如何能载入MSCDEX呢? 



要在载入COMMAND.COM之前就能侦测到CD-ROM存在的解决方案是透过修改电 
脑主机版上的BIOS(Basic Input /Output System)或是SCSI与IDE连接卡上的B
IOS。 
一旦光碟机被BIOS侦测到之後,CD-ROM必然有能力可以使得BIOS将 
COMMAND.COM载入。 



Phoenix Technologies与IBM共同发表了引导型光碟的规格书El Torito,规格书
 
中不但定义了开机映像资料(bootable image)该如何配置在CD-ROM中, 
还包含了有关引导型光碟制作与结构的一些低阶的详细说明。这些低阶的 
说明可能需要花些功夫来了解它,但好处是至少你可以运用现成的工具及 
CD-ROM的烧录程式即可完成引导型光碟的制作。此外,引导型光碟的规格 
仍不脱离ISO 9660的规范,意思就是说,如同其它正常的CD-ROM,Bootable 
CD-ROM是可以被正常复制或大量生产发行的,只是多了开机的能力罢了。 
使用者可以根据个人的需要,选择以CD-ROM开机或者将Bootable CD-ROM 
当做正常的CD-ROM来读取其中的档案,甚至於两者可以同时并存。 



制作一片Bootable CD-ROM的过程是非常冗长的,但是除非CD-ROM烧录程 
式的发展商能将程式发展成会自动将ISO 9660的Image File修改成Bootable的 

Image File,否则手动的方式还是最好的选择。事实上,Creative Digital 
Reserch的CD-R Publisher已经将制作引导型光碟的功能加入程式中,让使 
用者免去修改ISO 9660 Image的手续,只是程式注册的费用可不便宜,大约 
在四百多块美金左右。而另一方面,虽然手动的过程稍嫌繁复,但是弹性 
则比较大,至於为什麽,後文自会□述。使用者於制作Bootable CD-ROM所 
需的背景知识虽不致如规格书中所提的需要对於BIOS INT 13、ISO 9660、 
ATAPI等知识有一定程度的了解,但是如果对於ISO 9660的sector结构有概念, 

那麽制作Bootable CD-ROM就比较能事半功倍。


要能读取Bootable CD-ROM的资料,首先你的PC的BIOS要能符合El Torito 
的规格以便能读取CD-ROM上的开机磁区。大部份的BIOS制造商都已赋予 
其CD-ROM的开机能力,也就是说现在大部份的电脑也都有此功能。 
Adaptec这家公司便是首先将开机能力加注在其SCSI卡的BIOS中。 
以1542CF为例,只要BIOS的版本是2.10或以後的版本都可让你从CD-ROM 
开机。要确定你的Adaptec SCSI Card是否有支援CD-ROM开机的功能, 
只要在开机时按下CTRL-A进入设定SCSI Card的公共程式,再选择 
Advanced Configuration Options的选项,此时如果你的SCSI Card有支援开机 

功能,你将会看到BIOS Support for Bootable CD-ROM的选项。 



在CD-ROM黄皮书(Yellow Book)中定义了一片CD-ROM包含了333,000 
个sectors,而每个sector又包含了2,352个Bytes。2,352 Bytes中的2,048 
Bytes是用来存放使用者资料(User Data)的,剩下的304 Bytes则分别 
是同步资讯(sync), 位址指标档头(header), 错误修正与错误侦测码 
(errorcorrection and error detection code),这些304 Bytes的资料都是在录
制 
CD-ROM时,由CD-R烧录器本身或录写的程式自动产生的。在标准的 
CD-ROM中,最前面的16个sector(编号0到15的sectors)是没有用到的, 
而sector 16(即第17个sector)则包含了主卷册描述(Primary Volume Descri
ptor), 
接下来是任意数目的次卷册描述(secondary volume descriptors), 
最後则是终结卷册描述(Set Terminator Volume Descriptor). 在符合 
ISO 9660规格的CD-ROM中,PVD永远位於第17个sector(sector 16)中, 
且此sector的开头字串一定是"CD001"。El Torito的规格加了两 
项资料记录於CD-ROM中,分别是开机记录(Boot Record)与开机目录 
Boot Catalog)。Boot Catalog则包含了五项资料记录分别是:验证输入资料 

the Validation Entry), 起始输入资料(the Initial/Default Entry),区段
指标 
(the Sector Header), 区段输入资料(the Section Entry)与区段延伸输入
资料 
(the Section Entry Extension)。 


图一: 第18个(sector 17)的内容 
OFFSET 34816, HEX 8800


00008800 00 43 44 30 30 31 01 45 - 4C 20 54 4F 52 49 54 4F .CD001.ELTO
RITO 
00008810 20 53 50 45 43 49 46 49 - 43 41 54 49 4F 4E 00 00 SPECIFICATI
ON.. 
00008820 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 
00008830 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 
00008840 00 00 00 00 00 00 00 14 - 


El Torito经由将一个开机记录卷册描述资料(Boot Record Volume Descriptor
) 
存放在第18个sector(sector 17),利用了ISO 9660的功能使得CD-ROM包含 
了多个Volume Descriptor,而Boot Record Volume Descriptor就相当於ISO 96
60 
CD-ROM中的Secondary Volume Descriptor。在Boot Record Volume Descriptor
 
前面的CD001字串代表了这片光碟是一片ISO 9660 CD-ROM;而EL TORITO 
SPECIFICATION的字串则代表了这片CD-ROM有可以开机的功能。至於Boot 
Catalog则没有硬性规定要存放在特定的sector中,第18个sector中会有指标 
指出boot catalog的位置,如图一,第4行的第8个(byte 7)byte值14,就是代表
 
boot catalog存放在第21个(十进位byte 20,十六进位byte 14)的位址。 
而事实上这个位置的指标值是可以被修改的。 


图二: 第21个(sector 20)的内容 
OFFSET 40960, HEX A000


0000A000 01 00 00 00 41 64 61 6D - 27 73 20 41 56 20 53 74 厎.Adam's A
V St 
0000A010 75 64 69 6F 00 00 00 00 - 00 00 00 00 3A 67 55 AA udio.......
.厎 
0000A020 88 02 C0 07 00 00 01 00 - 15 



在boot catalog存在的sector中有五个输入资料记录,就阳春的Bootable 
CD-ROM而言,只包含了前两个,也就是the Validation Entry及the Initial/De
fault 
Entry,The Validation Entry永远是boot catalog中的第一个记录,这个记录确
 
认了这片CD-ROM有一个开机目录,除此尚保留部份空间供作者记录身 
份资料之用。如图二,在这个sector的第一个Byte的值必然是01,01这个 
值代表了这片光碟开机目录的存在,第二个Byte则指出此片光碟意欲在何 
种平台上使用,举例而言,00代表80x86的平台,01代表Power PC的平台, 
02则代表Machintosh的平台。馀下的byte则可以让制作者用来存放身份ID之用,
 
但第二行的第14与15个byte除外,这两个byte必需分别永远是55与AA。 



The Initial/Default Entry则指出此光碟是否为可引导型式,或是模拟何种 
开机的媒体型式,再来就是有多少sectors是用来存放开机的映像档(bootable 

image)的,以及映像档的存放的起始位置。



在第三行的第一个byte 88指出此光碟片是否可开机。第二个byte如果是04 
则代表此开机光碟是模拟硬碟的开机,02则代表模拟1.44MB的软碟开机。 
就大部份的应用程式而言,07 C0代表了标准的载入区段load segment。 
至於15则意谓bootable的映像资料的起始位置是在sector 15h的地方, 
从十进位来讲,就是第22个sector(sector 21)的位址。另外Default Entry 

的用意是用来给作者参考用的辩识资料。 

多平台可开机选择的光碟片

如果要制作多重可开机选择的光碟片就需要the Section Header, Section 
Entry, 及Section Entry Extension三个记录资料。例如一片可开机光碟片 
可以同时模拟四种开机模式,当BIOS侦测到光碟片是可开机的时候, 
它会显示一个选单,让你选择以何种模式开机,如你可以选择以软碟 
或硬碟是模式开机。the Section Header Entry就是用来指出所有可开机 
模式的选择,也就是说BIOS并非只能选择由Initial/Default Entry所定义的 
可开机映像资料来开机。 



如是多重可开机选择的光碟片,其第1个sector中代表的91代表了这 
是最後的header,如果是90则表示以下还有header。而第二个byte 00 
就如同the Initial/Default Entry中所叙述一般,代表了本光碟是应用在 
PC的作业平台,01与02则分别代表Power PC与Machintosh的平台。 
第三个byte 02是说在这个header後有两个section entry,制作者可以输 
入一个ID字串01做为OS Type,当你选择了一种模式开机後,这个ID会 
帮你确认并将选择显示出来。 



第一个Section Entry的资料记录格式大致上是与the Initial/Default Entry 

相同的,只是多保留了几个byte做为定义选择的范围而已。例如第二个 
byte 02即指出软碟式的开机,其它的section entry的资料格式与第一个 
section entry大同小异,只有模拟不同模式开机的byte值不同罢了。 

单一PC软碟式可开机光碟片的实作 

任何人想要制作bootable CD-ROM,一定要先将用来模拟开机的媒体以 
bit-for-bit的方式做成一个映像档,如果要模拟的是硬碟,那麽映像档就 
必需存放在另一个硬碟上。下一步再用Norton Utility的Disk Editor或类似 
的软体来编辑这个映像档以使它变成可开机的映像档,最後就是用 
CD-ROM的烧录程式将此开机映像档烧入CD-ROM中。 

步骤一:模拟开机媒体的bit-for-bit拷贝


首先你需先用Disk Editor对软碟做bit-for-bit的拷贝。以下是所有的步骤: 


1. 执行Disk Editor并且选择OBJECT的下拉式选单。 
2. 选择第一个选项,DRIVE。 
3. 从TYPE中将Logical Disk改成Physical Disk。 
4. 选择你想bit-for-bit的Physical Disk,不管是硬碟或软碟。 选择好以後再
设定Cylinder 0, Side 0, Sector 1。 
5. 选择TOOLS的下拉式选单。 
6. 从选单中选择WRITE OBJECT TO的选项,对话盒会显示有多少的 sectors要拷
贝以及拷贝档的档名为何,至於档名及其存放的位置是可 以更改的。 
7. 将档名及其存放的目录位置输入後,一个经bit-for-bit拷贝後的映 像档就完
成了。 

注意如果您要以硬碟做开机档的话,那麽即使你的硬碟只有少许的档案, 
做好的映像档也会包含硬碟所有的剩馀空间。 


步骤二:制作ISO 9660的映像档


一旦完成拷贝後,跳出Disk Editor。现在你需要将拷贝好的映像档及其 
它档案做成符合ISO 9660规格的映像档。这个步骤只要是任何CD-ROM的 
烧录程式都可以做得到,只是做好的ISO 9660映像档不可以马上写入CD-R, 
因为我们要对此ISO 9660映像档做一些修改以使它可以开机。 

步骤三:修改ISO 9660映像档


当CD-R烧录程式制作好ISO 9660的映像档後,你可以继续修改映像档 
的步骤。你可以使用Disk Editor来观看并编辑这个映像档,先进入Disk 
Editor并选择OBJECT的下拉式选单,再从此下拉式选单中选择FILE的 
选项,当选好之後,对话盒会出现,这时请选择刚做好的映像档, 
打开映像档後,从offset 0开始,你会看到一大堆十六进位的00, 
这些是这个CD-ROM映像档第一个sector的资料,接下来必须对这个映 
像档做一些修改: 

1. 将编辑的区段移到第18个sector(sector 17)的位址,也就是boot record 
所在的位址,在Disk Editor中,sector 17的offset值是34,816,相当於十六进
位的8800h。 
2. 在萤幕的右上方,你会看到CD001的字串。这字串确认此片光碟为CD-ROM, 而
为了使此CD-ROM变成bootable CD-ROM,必须在紧跟著CD001之後加上EL TORITO 
SPECIFICATION的字串,记住这个字串要大写。 
3. 要确定在CD001与EL TORITO SPECIFICATION中间的byte一定要是01而不是20,
 01是ASCII码的空格字元。 
4. 检查第一行的第一个字元。如果第一个字元不是00,而是其它任何数值, 都
要将它改成00。 
5. 当完成上述的修改後,按下ESC键并将修改过的结果储存进硬碟。 
步骤四:决定Boot Catalog的放置


现在要来决定Boot Catalog该从那个sector开始。理论上Boot Catalog可以 
从任何一个sector开始,举例而言,如果是从sector 20开始,20的十六进位 
码是14h,那麽在8840h这行的byte 7就必需输入14的数值。这个步骤完後, 
就没必要再修改sector 17了。 

步骤五:制作Boot Record


要制作boot record,必需移到sector 20的区段。Sector 20位於offset值40,96
0, 
A000h的地方,目前这个区段并无任何资料存在,而我们必需让boot record 
最起码需包含the Validation Entry与the Initial/Default Entry。 

1. 将图二A000h, A010h, A020h三行的资料一键入,并将结果储存起来。 
2. 确定硬碟开机映像资料从sector 21开始存放。在A020h这行byte 8的数值 是
15,这个数值是用来告诉BIOS有关开机映像资料的起始位置所在。 其实不管开机
映像资料存放在那里皆可,只要A020h这行byte 8的指标 指向那个位址即可。 

3. 检查sector 21的位址是否确实存放开机映像资料。本例的开机映像资料 位址
是在sector 21,这是笔者以CDR Publisher由程式自动将开机映像资料 放入并决
定它的起始位址。使用者如果不是以此种方式来制作的话,开机 映像资料的位址
不太可能在sector 21左右的位址。使用者假设是用EasyCD Pro 的话,可以将做
好的bootable image档,连同其他档案一起做ISO Formatting, 再透过程式了解
开机档的起始位址,换算向十六进位码,填入 boot catalog 的开机映像资料起
始位址的指标值中即可。 
步骤六:烧录CD-ROM


最後当boot catalog完成後,就是录写CD-R的时刻了。你可以用任何 
CD-R的录写程式以正常的方式来录写,不管是close the disc或是以多段 
式的写入皆可,只是要注意如果是多段式的写入要记得只要close the session 

就好而不要连close the disc都做了。接下来就是电脑重开机好好享受bootable
 
CD-ROM的乐趣了。 

 

--
能帮助你,是我莫大的荣幸;
你的笑容,是我前进的动力。

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.101.3.20]

[关闭][返回]