多重启动光盘制作全面解析

一、背景资料
我们都知道,Windows 98直到Windows XP系列的安装光盘都是可启动的,但Windows 95安装光盘却不能启动,你知道为什么吗?要想知道事情的原因,我们就必须要探寻一下可启动CD-ROM的起源。
可启动CD-ROM(或称可引导光盘)的概念早在1994年(辉煌的DOS年代)就被提出来了,当时CD-ROM还是PC机的一个昂贵的附属设备 (CD-ROM加声卡在当时被成为多媒体套件,带多媒体套件的电脑被成为多媒体电脑),而且在DOS平台下实现光盘引导还存在一些技术上的困难:要在载入 DOS之前就必须检测到CD-ROM,而这一点,当时从软件上是无法实现的,惟一的解决之道就是修改电脑主板上的BIOS(或是SCSI与IDE控制器上 的BIOS),使之在硬件级而不是软件级首先识别CD-ROM,并自动加载CD-ROM上的启动引导器(存放在CD-ROM上特定区域的一段特殊代码,用 以控制CD-ROM的启动)。
1995年1月25日,Phoenix Technologies与IBM联合发表了可启动CD-ROM格式规范(Bootable CD-ROM Format Specification)1.0——El Torito规范,该规范中定义了可启动CD-ROM的数据结构与映像数据的配置及光盘制作的一些详细说明。实际上,该规范也隐含地制定了能够读取可启动 CD-ROM光盘的BIOS的规范,使得符合El Torito规范的可启动CD-ROM在电脑上能够正常启动。如果可启动CD-ROM有了,但在电脑上无法读取,岂不还是白搭?!
随 后,Phoenix又独自或联合其他厂家相继发布了一系列支持可启动CD-ROM的规范和标准,其中值得一提的是1996年1月11日 COMPAQ、Phoenix与Intel联合发布的BIOS启动规范(BIOS Boot Specification)1.01,该规范为BIOS厂家提供了制造支持可启动CD-ROM的BIOS的标准。
El Torito规范原本参见http://www.phoenix.com/resources/specs-cdrom.pdf(英文)。
BIOS启动规范原本参见http://www.phoenix.com/resources/specs-bbs101.pdf(英文)。
如果你想了解更多有关El Torito的故事,比如为什么称为“El Torito”,都有谁参与了规范的起草,等等,你可以从下述文件中找到答案:
http://www.cdpage.com/Compact_Disc_Variations/danaboot.html(英文)
自从El Torito规范推出之后,采用单重启动映像的可启动CD-ROM大量涌现,El Torito规范也成为事实上的工业标准。
可启动CD-ROM仍遵循ISO 9660的规范,简单地说,普通CD-ROM+开机功能=可启动CD-ROM。
这也就是为什么Windows 95安装光盘不可启动的根本原因——Windows 95发布时El Torito规范还没有诞生。
El Torito规范定义了CD-ROM中启动映像(bootable image)的配置,还提供了有关可启动CD-ROM的制作与结构的一些详细说明。这些说明的技术性很强,要想弄得很明白需要花费一番大力气。但我们的目 的是制作出符合El Torito规范的可启动CD-ROM,所以没有必要在理论上了解那么多,很多现成的烧录软件以能够帮助我们制作出完美的单启动CD-ROM。
二、多重启动CD-ROM的工作原理
El Torito规范中不仅定义了单重启动映像(single boot image)的配置,而且非常富有远见地定义了多重启动映像(multiple boot images)的配置。

图1
图1是El Torito规范中定义的普通CD-ROM、单重启动CD-ROM和多重启动CD-ROM的启动映像配置图(图片来源:http: //www.phoenix.com/resources/specs-cdrom.pdf)。从图中可以看出,可启动CD-ROM的工作原理如下:
BIOS首先检查光盘的第17个扇区(sector 17),查找其中的代码,若发现其中的启动记录卷描述表(Boot Record Volume Descripter),它就根据表中的地址继续查找启动目录(Booting Catalog),找到启动目录后,再根据其中描述的启动入口(Boot Entry)找到相应的启动磁盘映像(Bootable Disk Image)或启动引导文件,找到启动磁盘映像后,读取其中的数据,并执行相应的开机动作。
相对于单重启动CD-ROM而言,多重启动CD-ROM的启动目录中包含多个启动入口,指向多个启动磁盘映像。
图1所描述的多重启动配置是El Torito规范所描述的多重启动映像配置,但由于多重启动CD-ROM在实际工作中的应用较少,目前大多数主板的BIOS对此支持得不是很好。在这类主 板上,用遵循El Torito规范所制作的多重启动CD-ROM往往只能引导第1个(默认启动出口所指向的)启动映像,而其他的启动映像莫名其妙地消失了!
为 了解决这个问题,人们又相继研究出了一些办法来实现CD-ROM的多重启动,目前最流行的办法是“非模拟”(软盘、硬盘)式BIOS模拟法。其工作原理与 El Torito规范所描述的单重启动映像配置原理基本相同,只是默认启动的不是软盘映像,而是1个启动引导文件,该启动引导文件引导光盘启动,再由它去查找 其他的启动磁盘映像或引导文件,根据配置文件列出启动选项共用户选择。
目前采用这种方法的工具软件主要有3个:Diskemu、 ISOLINUX/MEMDISK和Boot Scriptor。实际上,Boot Scriptor是Michael K Ter Louw在ISOLINUX的基础上二次开发的产品,但它对ISOLINUX的功能和性能都进行了非常大的扩充,与ISOLINUX的差别较大,特别是从 1.2.3b版开始引入了Diskemu,使其兼容性大大提高,所以我们将其作为第3种方法加以介绍。
这3个软件的网址分列如下:
Diskemu:
http://www.nu2.nu/diskemu/
ISOLINUX:
http://syslinux.zytor.com/iso.php
Boot Scriptor:
http://www.bootscriptor.org/
三、BIOS模拟法多重启动CD-ROM的运行流程
“非模拟”式BIOS模拟法要求有1个引导器和1套启动映像/菜单管理器。引导器必须以非模拟方式加载,即启动后不能模拟为软盘或硬盘,这是制作 BIOS模拟法多重启动CD-ROM的关键。下面以Diskemu为例简述其运行流程,ISOLINUX与Boot Scriptor的运行流程与此基本类似。
Diskemu包含3个主要文件:
loader.bin:启动引导器;
diskem1x.bin:启动映像/菜单管理器;
diskemu.cmd:默认的启动菜单配置文件,纯文本文件,需要用户手工创建。
启动引导器loader.bin是启动目录中默认的启动入口,loader.bin将最先被加载到默认的加载地址0:7c00h。 loader.bin被加载后,首先将自己移至地址5000:0h,然后搜索光盘的根目录,查找文件diskem1x.bin。找到后, diskem1x.bin将被加载到地址0:7c00h,loader.bin的使命完成。diskem1x.bin被加载后,首先也将自己移至地址 5000:0h,然后搜索光盘根目录,查找默认的启动菜单配置文件diskemu.cmd,找到后,显示其中的菜单项,并根据用户按键运行相应的启动映 像。如果没有在光盘的根目录下找到diskemu.cmd,或者在diskem1x.bin的加载过程中用户按下了Shift键, diskem1x.bin将进入命令行模式(可以进行各种调试)。
从Diskemu的运行流程来看,其本质是单重启动, diskem1x.bin加载后,它与启动菜单配合,为用户提供多个启动入口,模拟El Torito规范中的多重启动的启动目录,并根据用户的选择,完成多重启动的动作。这也正式“BIOS 模拟法”名称的由来。
四、所需烧录软件
制作多重启动CD-ROM一般要经过三个步骤:
准备所需资料→制作光盘映像ISO文件→将ISO文件烧录到CD-ROM
烧录软件的作用就是完成后两步操作。
当然,不制作ISO文件而直接烧录出多重启动CD-ROM也是办得到的,但除非十分有把握,否则最好不要冒险。
能够制作多重启动CD-ROM映像文件的烧录软件很多。从BIOS模拟法的工作流程即可知道:只要是能够制作单重启动CD-ROM映像文件的烧录软件也 应该能够制作多重启动CD-ROM映像文件。但凡事总有例外:ISOLINUX就很特殊,不是所有的烧录软件都适用。后面我们会再讨论它。
我在这里推荐3个经典且常用的软件:Nero、CDImage和Mkisofs。其他一些软件如Easy CD Creator、CDRWIN等在功能上都与Nero类似,用户可自行试验。
CDImage和Mkisofs可以制作出标准的ISO文件,最新版本的Nero既能制作出其专有格式的NRG文件,也能制作出ISO文件。
Nero:是德国人开发的一款很经典的烧录软件,功能非常强大,支持中文文件名及长文件名,用它制作出来的单重启动CD-ROM很完美,隐藏掉了所有不必要的东西。但如何用它制作多重启动CD-ROM恐怕就没有多少人知道了。Nero的下载地址:
http://www.nero.com/en/index.html#download
Mkisofs:运行于Unix下的经典烧录软件,已经被人用cygwin移植到了Windows下。Mkisofs的功能非常强大,提供了丰富的命令 行选项如果你对其使用十分熟悉,可以直接使用命令行命令。Windows下的Mkisofs已经被Bart用WBAT改造成了DOS下的菜单驱动程序包, 使用很方便。Mkisofs的下载地址:
http://www.nu2.nu/nu2files/cdrpack13.zip(Bart改造过的Mkisofs)
http://www.fokus.gmd.de/research/cc/glone/employees/joerg.schilling/private/cdrecord.html(官方网址)
CDImage:微软开发的小工具。CDImage也是个命令行程序,提供众多的参数,现在有不少人为其开发了多种图形界面版本。CDImage的最大 特点就是能够剔除光盘上的相同文件(只保留1个),从而大大节约光盘空间,这是目前为止制作Windows n合1光盘的惟一工具。CDImage的下载地址:
http://www.tech-hints.com/prog/cdimage.zip
http://www.tech-hints.com/prog/cdimagegui.zip(图形界面版)
下表列出了上面介绍的3中烧录软件与多重启动CD-ROM引导程序的兼容性列表,Mkisofs是最通用的。

Diskemu ISOLINUX Boot Scriptor
Nero 适用 不适用 适用
Mkisofs 适用 适用 适用
CDImage 适用 不适用 适用

五、启动磁盘映像文件的制作
这里我们制作3个启动软盘映像文件:1.img、2.img和3.img,各映像文件的内容分述如下。
1. 1.img:MS-DOS 98SE & Tools,DOS启动盘和工具集,2.88 MB。
制作方法:首先制作Windows 98SE的启动盘,用WinImage将其制作为1.44 MB的映像文件,在WinImage中,执行“Image-Change format”命令,将其格式改为2.88 MB,并进行适当修改,增减文件,做成自己的工具盘。
2. PowerQuest PartitionMagic 7,硬盘分区软件,2.88 MB。
制作方法:同上,加入DOS版的PowerQuest PartitionMagic 7,在CONFIG.SYS文件中配置2 MB的虚拟磁盘,将PowerQuest PartitionMagic 7调入虚拟磁盘运行,否则在光盘上无法运行。
3. DocMemory RAM Diagnostic-ver V2.0,内存诊断工具,1.44 MB。现在的内存质量良莠不齐,装机时如果出现莫名其妙的错误,可以用该软件检查一下系统内存,说不定能发现点问题。
软件下载地址:
http://www.simmtester.com/software_updates/docmemory/DocMem1_45a.exe
http://www.simmtester.com/software_updates/docmemory/DocMem20.exe
运行程序,按照提示制作1张启动软盘,将此软盘用WinImage制作成软盘映像文件。
六、Diskemu
1. 下载地址与技术文档
下载地址:http://www.nu2.nu/nu2files/diskem1x.zip
技术文档:http://www.nu2.nu/diskemu/(英文)
2. 软件主要特点
可以毫不夸张地说,Diskemu是个划时代的经典之作。在Diskemu被开发出来之前,人们要制作1张多重启动CD-ROM真的需要花费九牛二虎之 力:按照El Torito规范需要进行繁琐的地址计算,找到地址后再去修改ISO文件,最后辛辛苦苦制作出来的多重启动CD-ROM还不能保证兼容所有的BIOS!真 是费力不讨好。后来,Gary Tong为了解决可启动CD-ROM无法浏览CD-ROM上文件的问题而开发了Diskemu(支持单重启动CD-ROM),BIOS模拟法这时才真正诞 生。Bart Lagerweij继续这项工作,使Diskemu能够最多支持20个启动磁盘映像!但非常可惜,2001年11月,Bart在写完 Diskem1x.bin v1.1 BETA后便停止了对Diskemu的继续开发(参见http://www.nu2.nu/diskemu,英文)。但不可否认,知道现在, Diskemu仍然是非常优秀的,其兼容性最好。下面是Diskemu的主要特点:
(1)支持ISO 9660文件系统。
(2)使用一种简单的类似批处理形式的脚本语言来执行一定的动作,例如:清屏,显示提示信息,等待按键,运行特定磁盘映像,等等。
(3)可以快速地编写自己定制的启动菜单,并启动相应的磁盘映像。
(4)为专业人员提供一个命令行调试模式,手工执行一些操作。
(5)自动检查软盘映像类型。支持多种软盘映像:160 KB,180 KB,320 KB,360 KB,1.2 MB,720 KB,820 KB,1.44 MB,1.68 MB,1.72 MB,2.88 MB。
(6)使用1张可启动的Diskemu CD-Rom,你甚至可以从另外不能启动的CD-ROM上启动磁盘映像文件。当然需要首先用可启动的Diskemu CD-Rom启动,然后进入命令行模式,再更换光盘,键入“cd "”,再运行光盘上的映像文件(在实际工作中这项功能应用得并不多)。
(7)它使用一个单独的引导器(loader.bin),将能够正确地加载diskem1x.bin,甚至在BIOS不完全兼容El-Torito规范的主板上,也能保证正确引导。
Bart还有几个计划没有完成,当然也是Diskemu的主要不足:
(1)检测第1快硬盘是否看似能够启动。
(2)让diskem1x直接将信息写入屏幕缓存。
(3)增加颜色功能。
(4)键盘映射(以支持其他国家的键盘)。
(5)增加软盘映像热交换功能。
(6)加载COM文件(COM文件一定不能用DOS功能)。
3. 软件使用方法
Diskemu的兼容性非常好,适用于Nero,Cdimage和Mkisofs。这里我们分别讲解利用这三种软件制作ISO映像文件的方法。
(1)目录结构
假定xcd"root"为多重启动CD-ROM的根目录,建立如下目录结构,将下载到的文件diskem1x.zip展开,将展开后的loader.bin、diskem1x.bin及我们制作的软盘映像文件1.img、2.img、3.img分别复制到相应位置:
xcd"loader.bin
xcd"root"diskem1x.bin
xcd"root"diskemu.cmd
xcd"root"1.img
xcd"root"2.img
xcd"root"3.img
如果还希望增加其他文件和子目录,只需将其复制到,xcd"root"目录下,这是光盘的根目录。
(2)编写启动菜单配置文件diskemu.cmd
;
:start
cls
print
print  BOOT MENU
print  ===================================================
print  [ 1 ] MS-DOS 98SE & Tools
print  [ 2 ] PowerQuest PartitionMagic 7
print  [ 3 ] DocMemory RAM Diagnostic-ver V2.0
print
print  [ Q ] Quit to command prompt
print  [ R ] Reboot
print  [Esc] Boot first Hard Disk
print  ===================================================
print  Press the HOTKEY for your choice.
:mainkey
getkey
onkey 1 goto dos98
onkey 2 goto pq7
onkey 3 goto docmem
onkey q quit
onkey Q quit
onkey r reboot
onkey R reboot
onkey esc boot 80
;When no key found...
goto mainkey
;
:dos98
cls
print Starting MS-DOS 98SE...
run 1.img
;when run has failed
print
print Failed to run "1.img", press any key to return to the boot menu.
getkey
goto start
;
:pq7
cls
print Loading PowerQuest PartitionMagic...
run 2.img
;when run has failed
print
print Failed to run "2.img", press any key to return to the boot menu.
getkey
goto start
;
:docmem
cls
print Loading DocMemory RAM Diagnostic...
run 3.img
;when run has failed
print
print Failed to run "3.img", press any key to return to the boot menu.
getkey
goto start
;
;EOF
配置菜单中不要包含制表符(ASCII 9),可以使用空格符。
(3)用CDImage制作ISO文件
将cdimage.exe文件复制到xcd"目录下,打开DOS窗口,在xcd目录下运行如下命令:
cdimage -lMultiBootCD -n -m -bloader.bin root xcd.iso
运行完毕后,将生成多重启动ISO映像文件xcd"xcd.iso,我们可利用VMware Workstation(http://www.vmware.com/)或Virtual PC(http://www.connectix.com)测试其效果。正确无误后,可将xcd.iso烧录到光盘。
(4)用Nero制作ISO/NRG文件
运行Nero 5.5.9.0,选择菜单“档案—开新档案”,选择“CD-ROM(开机)”,在“可开机的映像文件位置”中选择loader.bin,“模拟类型”选择“不模拟”,“加载扇区”选择默认的“07C0”,“已加载扇区数”必须为“4”,如图2所示。

图2
随后将文件diskem1x.bin、diskemu.cmd、1.img、2.img、3.img拖放到光盘根目录下。
这样,最基本的文件就准备齐了,你还可以再适当添加文件和目录。最后,制作映像文件,可以选择NRG格式,也可以选择标准的ISO格式。利用VMware Workstation或Virtual PC测试其效果。
(5)用Mkisofs制作ISO文件
如果你对Mkisofs的用法十分熟悉,可以使用cdrpack13.zip中的命令行程序mkisofs.exe(必须包含cygwin1.dll),否则还是使用Bart为我们制作好的程序包吧。
首先下载cdrpack13.zip,然后再下载配合cdrpack13.zip的diskemu插件(http: //www.nu2.nu/nu2files/diskemu_addon.zip),将下载到的cdrpack13.zip连同子目录一起展开,假定释 放到目录cdrpack13,再将diskemu_addon.zip连同子目录展开到同一目录下。这样,目录cdrpack13中将包含如下子目录和文 件:
cdrpack13"cdrpack.txt
cdrpack13"gnugpl.txt
cdrpack13"main.bat
cdrpack13"run.bat
cdrpack13"bin
cdrpack13"cds
cdrpack13"lib
其中,cdrpack13"cds和cdrpack13"lib是包含在diskemu_addon.zip中的,其他的文件和子目录包含在cdrpack13.zip中。
将文件diskemu.cmd、1.img 、2.img、3.img复制到子目录cdrpack13"cds"diskemu"disk1中。如果有其他需要添加的文件,也要复制到该目录,这是光盘的根目录。
修改文件cdrpack13"cds"diskemu"build.mak,将其中的“volumeid:="Diskem1x"”(卷标)和“preparer:="Bart Lagerweij"”(制作人)改为用户定义的方式。
执行批处理程序cdrpack13"run.bat,从“Main menu”中选择“Build & Burn”,按4次回车,如果不出问题,又会回到“Main menu”,生成的ISO文件存放在cdrpack13"tmp目录下,文件名为mycd.iso,利用VMware Workstation或Virtual PC测试其效果。
如果你想将默认文件名mycd.iso修改为其他名称,只需打开并编辑文件cdrpack13"bin"global.mak中的相应内容。
七、ISOLINUX
安装过Linux的朋友应该知道SYSLINUX这个软件,它是安装Linux光盘的启动引导器,著名的Redhat 7.3使用的是SYSLINUX 1.52,Mandrake Linux 8.2使用的则是SYSLINUX 1.67。而ISOLINUX(还有一个PXELINUX)正是SYSLINUX的孪生兄弟。所以其本质上是个小型的Linux。
ISOLINUX只能配合Mkisofs制作ISO映像文件。为什么?因为ISOLINUX需要在ISO文件中插入一段特殊的代码:El Torito启动信息表(El Torito Boot Information Table),目前只有Mkisofs能够自动完成这项工作,而Nero和CDImage则不行。
1. 下载地址与技术文档
下载地址:
cdrpack13.zip:
http://www.nu2.nu/nu2files/cdrpack13.zip
multi_memdisk_addon.zip:
http://www.nu2.nu/nu2files/multi_memdisk_addon.zip
syslinux-1.75.zip:
http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-1.75.zip
技术文档:http://syslinux.zytor.com/iso.php(英文)
2. 软件主要特点
ISOLINUX是Linux/i386的一个启动引导器,其核心是Linux,如果用户配置过LILO,你将发现ISOLINUX的配置文件 isolinux.cfg与LILO的配置lilo.conf有点相似。ISOLINUX本身以非模拟方式运行于ISO 9660/El Torito CD-ROMs,这避开了软盘模拟的磁盘空间容量问题和硬盘模拟会产生的一些兼容性问题。
注意:ISOLINUX 只使用标准的ISO 9660文件名格式,例如,它不支持Rock Ridge 或Joliet文件名。当然,它也可以用在使用Rock Ridge和/或Joliet扩展的磁盘上。
ISOLINUX也支持“长”(level 2)ISO 9660文件名,所以,如果短格式操作系统(如MS-DOS)的兼容性不是一个问题,你可以使用“-l”或“-iso-level 2”参数控制mkisofs来生成标准长文件名(扩展至31个字符)。
ISOLINUX默认地内建两个版本:标准版和诊断版,诊断版带有额外的诊断信息。如果你使用ISOLINUX遇到了问题,建议你使用诊断版本(isolinux-debug.bin)。
从1.65版开始,ISOLINUX支持其他操作系统的引导磁盘映像。当然,这一特性依赖于BIOS的功能,现在的大部分BIOS都支持该功能,但仍有可能在一些特殊的系统中不能正常工作。
ISOLINUX仅支持下列软盘映像:
1,222,800 bytes:1 200 KB软盘(标准5.25英寸软盘)
1,474,560 bytes:1 440 KB软盘(标准3.5英寸软盘)
2,949,120 bytes:2 880 KB软盘(增强3.5英寸软盘)
其他的尺寸将被认为是硬盘映像。为了尽可能地在更多的操作系统上正常工作,硬盘映像必须要包含一个已经激活的分区。尽管如此,还是有很多BIOS不能正常支持硬盘映像。
与Diskemu相比,ISOLINUX在显示菜单上做得相当出色:不仅支持彩色文本菜单,而且还支持图像!不过它支持的图像格式太特殊 了:LSS16。syslinux-1.75.zip里提供了一个Perl的处理程序,可以用它将需要的图像转换为LSS16格式。syslinux- 1.75.zip里面同时也包含了一个图像菜单的例子。
ISOLINUX的菜单配置文件和映像配置文件是分开的:菜单配置文件中只包含显示的 文本和颜色及图像控制命令,是一个文本文件,映像配置文件是一个对应于菜单配置文件的映像启动命令文件。这种安排多少有些不方便。另外,颜色和图像等的控 制命令是用不可打印ASCII码控制的,你必须要找到一个适当的 DOS下的编辑软件以输入这些特殊的ASCII码,或用Ultraedit的“查看—ASCII字符表—插入字符”输入,但在中文Windows下的显示 却乱得一团糟。
ISOLINUX本身是无法启动软盘映像文件的,它是靠MEMDISK实现的。简单地说,MEMDISK是1个常驻内存的 Linux下的磁盘映像启动器,它拦截BIOS中断INT 13和INT 15的一切操作。有关MEMDISK的详细资料请参考http://syslinux.zytor.com/memdisk.php。
MEMDISK对于大部分映像的工作都是正常的,但有些特殊软盘的映像,MEMDISK支持得不尽人意,如DocMemory,因此,在使用时需要反复试验。
3. 软件使用方法
ISOLINUX只能用Mkisofs制作。这里我们讲解制作ISO映像文件的方法。
(1)文件与目录结构
下载cdrpack13.zip,再下载multi_memdisk_addon.zip插件,将下载到的cdrpack13.zip连同子目录一起展 开,将其释放到目录cdrpack13,再将multi_memdisk_addon.zip连同子目录展开到同一目录下。这样,目录 cdrpack13中将包含如下子目录和文件:
cdrpack13"cdrpack.txt
cdrpack13"gnugpl.txt
cdrpack13"main.bat
cdrpack13"run.bat
cdrpack13"bin
cdrpack13"cds
其中,cdrpack13"cds是包含在multi_memdisk_addon.zip中的,其他的文件和子目录包含在cdrpack13.zip中。
再下载ISOLINUX的最新版本syslinux-1.75.zip,将其展开,将其中的文件isolinux.bin、memdisk复制到目录cdrpack13"cds"multi_memdisk"disk1"isolinux。
将文件1.img、2.img、3.img复制到cdrpack13"cds"multi_memdisk"disk1"isolinux中。如果还有 其他需要添加的文件,只需复制到目录cdrpack13"cds"multi_memdisk"disk1",这是光盘的根目录。
修改文件cdrpack13"cds"multi_memdisk,将其中“volumeid”和“preparer”的内容改为用户定义的方式。
注意:ISOLINUX必须放在光盘根目录下的"isolinux目录中。
(2)编写菜单配置文件bootmsg.txt(默认文件名)
[插入ASCII 12:清屏]
BOOT MENU
===================================================
[ 1 ] MS-DOS 98SE & Tools
[ 2 ] PowerQuest PartitionMagic 7
[ 3 ] DocMemory RAM Diagnostic-ver V2.0
[ H ] Boot from first Hard Disk
[ F ] Boot from first Floppy Drive
===================================================
Select the HOTKEY and then Press Enter.
(3)编写映像配置文件isolinux.cfg(默认文件名)
default 0
display bootmsg.txt
prompt 1
label h
localboot 0x80
label H
localboot 0x80
label f
localboot 0x00
label F
localboot 0x00
label 1
kernel memdisk
append initrd=1.img
label 2
kernel memdisk
append initrd=2.img
label 3
kernel 3.img
注意label 3,为了能够使用DocMemory,这里没有使用memdisk。
(3)制作ISO文件
执行批处理程序cdrpack13"run.bat,从“Main menu”中选择“Build & Burn”,按4次回车,如果不出问题,又会回到“Main menu”,生成的ISO文件存放在cdrpack13"tmp目录下,文件名为mycd.iso,利用VMware Workstation或Virtual PC测试其效果。
八、Boot Scriptor
Boot Scriptor是运行在ISOLINUX之上的一个小程序,它允许编写特殊的高度交互的光盘启动控制脚本。它提供了一系列的预设命令,允许用户用多种方法启动系统,即通过定制的启动菜单,允许用户选择启动哪个选项。
1. 下载地址与技术文档
下载地址:
Boot Scriptor 1.2.3b:
http://tigger.cc.uic.edu/~mterlo1/bscript/distro/Boot%20Scriptor%20(1.2.3b).zip
技术文档:
http://tigger.cc.uic.edu/~mterlo1/bscript/doc.html(英文)
http://tigger.cc.uic.edu/~mterlo1/bscript/cmdref.html(英文)
2. 软件主要特点
应当明确指出的是,Boot Scriptor是一个特殊的代码模块,也称为集成启动映像(Comboot Image),它运行在Isolinux一个特殊版本的最顶层。
同样地,它可以扮演ISOLINUX的一个前端,并能够利用ISOLINUX所提供的所有性能。它同时扩充了ISOLINUX的一系列特性以允许更复杂的启动脚本,且支持一种简单的脚本语言,该脚本语言允许多重启动CD-ROM设计者执行定制的启动办法。
Boot Scriptor是在ISOLINUX之上二次开发的产品,所以ISOLINUX能够完成的工作Boot Scriptor也能完成。但是,经过作者的不懈努力,最终与Bart达成协议,引入了Diskemu这一伟大的模块,不仅加载映像文件的速度大大加快, 而且最最重要的是,几乎彻底解决了映像文件的兼容性问题。
Boot Scriptor具有如下主要优点:
(1)囊括了Diskemu与ISOLINUX的所有优点,可以使用多种方法加载软盘映像文件。
(2)将菜单配置文件与映像配置文件合并,更利于相互照应,可以编写更加复杂、更加庞大的脚本。
(3)提供了更方便的颜色控制代码,使用可显示字符作为颜色控制符。
(4)提供了屏幕显示信息的自动对齐控制,例如非常有用的自动居中功能。
(5)提供了模块化的功能选项,更利于用户光盘的定制。
(6)在Boot Scriptor的命令行模式,命令是可编辑的。
(7)提供了与ISOLINUX不同的引导程序,包含El Torito启动信息表,所以除了可用Mkisofs制作映像文件外,还可以方便地用CDImage、Nero等刻录软件制作ISO映像文件。
(8)与CDImage配合使用,可以制作复杂的Windows 系列 n合1光盘。
Boot Scriptor的主要缺点如下:
(1)没有提供ISOLINUX提供的图形界面,启动菜单只能使用纯文本。
(2)对ISOLINUX特殊版本的依赖太严重,你无法在最新的ISOLINUX上运行Boot Scriptor。实际上,从1.2版开始,ISOLINUX已经作为一个单独的模块了。
(3)版本发展速度太快,以致于技术文档的更新速度跟不上。
3. 软件使用方法
Boot Scriptor提供了与ISOLINUX不同的引导程序,修正了包含El Torito启动信息表问题,适用于Nero、Cdimage和Mkisofs。这里分别讲解利用这三种软件制作ISO映像文件的方法。
(1)目录结构
假定xcd"root"为多重启动CD-ROM的根目录,建立如下目录结构,将下载到的文件Boot Scriptor (1.2.3b).zip展开,将展开后的文件及1.img、2.img、3.img分别复制到相应位置:
xcd"loader.bin
xcd"root"bscript"1.img
xcd"root"bscript"2.img
xcd"root"bscript"3.img
xcd"root"bscript"bscript.bin
xcd"root"bscript"modules"basic.bsm
xcd"root"bscript"modules"boot.bsm
xcd"root"bscript"modules"diskemu.bsm
xcd"root"bscript"modules"extend.bsm
xcd"root"bscript"modules"history.bsm
xcd"root"bscript"modules"hotkey.bsm
xcd"root"bscript"modules"isolinux.bsm
xcd"root"bscript"modules"memdisk
xcd"root"bscript"modules"part.exe
xcd"root"bscript"modules"rpm.bsm
xcd"root"bscript"modules"script.bsm
Boot Scriptor的文件必须放在光盘根目录下的bscript子目录中,这与ISOLINUX类似。
如果还希望增加有其他文件和子目录,将其复制到,xcd"root"目录下,这是光盘的光盘根目录。
(2)编写菜单配置文件xcd"root"bscript"bscript.ini(默认文件名)
start:
clear
print c ""n"n"c17==================================================="n"
print c ""c17  "c1fBOOT MENU"c17  "n"
print c ""c17==================================================="n"
print c ""c17  "n"
print c ""c17  "c1f1"c17 MS-DOS 98SE & Tools  "n"
print c ""c17  "c1f2"c17 PowerQuest PartitionMagic 7  "n"
print c ""c17  "c1f3"c17 DocMemory RAM Diagnostic-ver V2.0  "n"
print c ""c17  "n"
print c ""c17  "c1fR"c17 Reboot  "n"
print c ""c17  "c1fF"c17 Boot from first Floppy Drive  "n"
print c ""c17 "c1f Esc"c17 Boot from first Hard Disk  "n"
print c ""c17  "n"
print c ""c17---------------------------------------------------"n"
print c ""c17  Select the item and then press Enter  "n"
print c ""c17  or press the HotKey  "n"
print c ""c17==================================================="n"
;
start1:
call drawscrn
setpos 1 7
print c ""c3f  1"c31 MS-DOS 98SE & Tools  "
key1:
getkey
call mainkey
onkey space goto item_1
onkey enter goto item_1
onkey up goto start6
onkey down goto start2
goto key1
;
start2:
call drawscrn
setpos 1 8
print c ""c3f  2"c31 PowerQuest PartitionMagic 7  "
key2:
getkey
call mainkey
onkey space goto item_2
onkey enter goto item_2
onkey up goto start1
onkey down goto start3
goto key2
;
start3:
call drawscrn
setpos 1 9
print c ""c3f  3"c31 DocMemory RAM Diagnostic-ver V2.0  "
key3:
getkey
call mainkey
onkey space goto item_3
onkey enter goto item_3
onkey up goto start2
onkey down goto start4
goto key3
;
start4:
call drawscrn
setpos 1 11
print c ""c3f  R"c31 Reboot  "
key4:
getkey
call mainkey
onkey space reboot cold
onkey enter reboot cold
onkey up goto start3
onkey down goto start5
goto key4
;
start5:
call drawscrn
setpos 1 12
print c ""c3f  F"c31 Boot from first Floppy Drive  "
key5:
getkey
call mainkey
onkey space boot 0x00
onkey enter boot 0x00
onkey up goto start4
onkey down goto start6
goto key5
;
start6:
call drawscrn
setpos 1 13
print c ""c3f  Esc"c31 Boot from first Hard Disk  "
key6:
getkey
call mainkey
onkey space boot 0x80
onkey enter boot 0x80
onkey up goto start5
onkey down goto start1
goto key6
;
mainkey:
onkey 1 goto item_1
onkey 2 goto item_2
onkey 3 goto item_3
onkey r reboot cold
onkey R reboot cold
onkey f boot 0x00
onkey F boot 0x00
onkey esc boot 0x80
return
;
item_1:
cls
print "Starting MS-DOS 98 & Tools"n"
diskemu 1.img
goto start1
;
item_2:
cls
print "PowerQuest PartitionMagic 5/7"n"
diskemu 2.img
goto start2
;
item_3:
cls
print "Starting DocMemory RAM Diagnostic-ver V2.0"n"
diskemu 3.img
goto start3
;
drawscrn:
setpos 1 7
print c ""c17  "c1f1"c17 MS-DOS 98SE & Tools  "n"
print c ""c17  "c1f2"c17 PowerQuest PartitionMagic 7  "n"
print c ""c17  "c1f3"c17 DocMemory RAM Diagnostic-ver V2.0  "n"
print c ""c17  "n"
print c ""c17  "c1fR"c17 Reboot  "n"
print c ""c17  "c1fF"c17 Boot from first Floppy Drive  "n"
print c ""c17 "c1f Esc"c17 Boot from first Hard Disk  "n"
return
;
eof:
;
上述脚本非常复杂,除了界面略有简陋外,几乎体现了Boot Scriptor的所有精华。其中大量的代码是为了实现移动光标键,如果不需要使用光标键,则脚本能够大大简化。
(3)用CDImage制作ISO文件
将cdimage.exe文件复制到xcd"目录下,打开DOS窗口,在xcd目录下运行如下命令:
cdimage -lMultiBootCD -n -m -bloader.bin root xcd.iso
运行完毕后,将生成多重启动ISO映像文件xcd"xcd.iso,可利用VMware Workstation或Virtual PC对其进行测试。正确无误后,可将xcd.iso烧录到光盘。
(4)用Nero制作ISO/NRG文件
运行Nero 5.5.9.0,选择菜单“档案—开新档案”,选择“CD-ROM(开机)”,在“可开机的映像文件位置”中选择loader.bin,“模拟类型”选择“不模拟”,“加载扇区”选择默认的“07C0”,“已加载扇区数”必须为“4”。
随后将xcd"root"bscript及其下面的全部文件拖放到光盘根目录下。
这样,最基本的文件就准备齐了,你还可以再适当添加文件和目录。最后,烧录映像文件,可以选择NRG格式,也可以选择标准的ISO格式。利用VMware Workstation或Virtual PC对其进行测试。正确无误后,可将xcd.iso烧录到光盘。
(5)用Mkisofs制作ISO文件
用Mkisofs制作Boot Scriptor的ISO映像文件的方法与制作ISOLINUX的方法很类似,所以我们只需对制作ISOLINUX的ISO映像的方法进行适当的改造。
下载cdrpack13.zip,再下载ISOLINUX插件multi_memdisk_addon.zip,将下载到的 cdrpack13.zip连同子目录一起展开,将定释放到目录cdrpack13,再将multi_memdisk_addon.zip连同子目录展开 到同一目录下。这样,目录cdrpack13中将包含如下子目录和文件:
cdrpack13"cdrpack.txt
cdrpack13"gnugpl.txt
cdrpack13"main.bat
cdrpack13"run.bat
cdrpack13"bin
cdrpack13"cds
其中,cdrpack13"cds包含在multi_memdisk_addon.zip中,其他的文件和子目录包含在cdrpack13.zip中。
删除子目录cdrpack13"cds"multi_memdisk"disk1"isolinux,将xcd"root下面的子目录bscript (连同其中的bscript.ini及软盘映像文件)复制到cdrpack13"cds"multi_memdisk"disk1下面。
修改文件cdrpack13"cds"diskemu"build.mak中的“boot”选项为:
boot:=-b bscript/loader.bin "
-no-emul-boot -boot-load-size 4 "
-hide loader.bin -hide-joliet loader.bin "
-hide boot.catalog -hide-joliet boot.catalog
一定要删除“-boot-info-table”。
将“volumeid”和“preparer”的内容改为用户定义的方式。
执行批处理程序cdrpack13"run.bat,从“Main menu”中选择“Build & Burn”,按4次回车,如果不出问题,又会回到“Main menu”,生成的ISO文件存放在cdrpack13"tmp目录下,文件名为mycd.iso,利用VMware Workstation或Virtual PC对其进行测试。正确无误后,可将xcd.iso烧录到光盘。
九、版权声明
Diskemu的版权属于Gary Tong和Bart Lagerweij,1999-2002。
ISOLINUX和MEMDISK的版权属于H. Peter Anvin,1994-2002。
Boot Scriptor的版权属于Michael K Ter Louw和Bart Lagerweij,2002。

posted on 2008-12-17 23:28  大熊猫  阅读(1384)  评论(0编辑  收藏  举报