哎呀,标题似乎写的好乱,以后心情静下来在整理吧。乱七八糟的。~~~ ——大头爸爸2010-12-9注
怎么说呢,为了突出这篇文章目的,废话少说,直接将今天一天的调试情况记录一下。
我的目的就是在“晨枫U盘维护工具2.0”的基础上增加一个USB-ROM引导,方便在dos下安装系统。
想法来源:N年前经常拿着win98第二版光盘和光驱安装系统,那个菜单太熟悉。以至于现在仍没有其它解决方案的情况下,仍采用这个方案。
由于“晨枫U盘维护工具2.0”封装光盘时,只能以“ISOLINUX模式”封装(至少我测试是这样,网上没有解决方案,另外,我也不知道为什么)
利用win98第二版光盘可引导文件为基础,做成了目前自以为满意的可引导程序和菜单。在测试的时候发现如下问题:(以下问题的解决也是本人花了一天的时间的经验积累)
当然了,还要多说几句前提。由于制作“兼容性”高的引导程序方案,我逛了几个非常出名的论坛,那个资料真是让人眼花缭乱,我的收藏夹收藏的网页,我估计不下100个了吧。
涉及本篇相关的,我就列一个网站:http://xiaocikof.blog.163.com/blog/static/161889979201051792059636/
关于这个网站,我看了很多遍。也就是关于我自己做出的两个版本。目前认为,不在config.sys中加载驱动,在autoexec.bat中通过devload动态加载,这个兼容性要高些。
所以我就花了点时间做了一个这个版本。并将ghost8.2,ghost8.3,ghost11.02,ghost11.5和diskgen3.2 2010-6份的版本集成进去。做成的映像大概在9M多左右。一切都感觉很完美,无懈可击。
在虚拟机中测试的时候,悲剧发生了。那就是安装系统复制文件非常的慢。换了一个smartdrv.exe,以前是44.3KB,现在换个13KB的,情况有些好转,但仍无法接受。
大概为了这个问题,搞了很长时间。
如果在config.sys中加载驱动,情况要好的多,可以接受了。
换驱动,换参数,改虚拟存大小,找资料.....一无所获!
因为具体不知道到底在config.sys加载驱动好还是动态加载好(没有量产到U盘中CDROM实验),想用config.sys中加载吧,又担心兼容;动态加载吧,又无法忍受这个速度。但可以确定,肯定是哪出了问题。我感觉不是动态加载驱动导致的。
最后我就换个思路了。采用两种方案,config.sys加载和动态加载(手工加载)都要。去掉ghost和diskgen等工具软件。因为要是成功加载USB驱动后,可以直接访问U盘区访问,也方便以后软件更新。
代码很快写好。即程序默认在config.sys中加载驱动的。如果有的机子主板自带USB驱动,加载USB驱动死机的话,就进入纯DOS模式,调用相关批处理代码。或动态的,有取舍的加载驱动。
这样,1.44M的容量足已容纳了。于是新建个磁盘映像。大小为1.44M。结果为无法加载img映像。
根据原来的9M多的可引导的映像,删除内容,换上新内容。可引导。
根据原来的9M多的可引导映像格式,做一个1.44M的映像,添加新内容,无法引导。
最后,将9M多的可引导映像格式的扇区总数20160,改为:2016,其它不变。成功引导。
测试一下安装系统,动态加载,安装速度飞快。具体的测试结果如下:
文件内容及结构如图:
config.sys内容
[COMMON] shell=command.com /P /F /E:800 device=himem.sys /testmem:off files=15 buffers=30 dos=high,umb stacks=9,512 lastdrive=z
autoexec.bat内容
@ECHO OFF set EXPAND=YES SET DIRCMD=/O:N xmsdsk 10240 x: /y >nul copy command.com x:\ >nul set comspec=x:\command.com a:\smartdrv.exe echo This may take a few minutes. Please wait... a:\pkzip.com -O tools.zip x:\ >NUL echo The diagnostic tools were successfully loaded to drive X: echo. menu.bat :QUIT
menu.bat内容
@echo off PATH=a:\;x:\ x: cd\ :_menu cls echo. echo + IDE/USB/SATA CDROM And USB 2.0 Support Menu + echo =================================================== echo 1. Start Computer Without CD-ROM Support. echo 2. Start Computer With USB 2.0 Support. echo 3. Start Computer With USB 2.0 CDROM Support. echo 4. Start Computer With IDE OR SATA CDROM Support. echo 5. Reboot Computer. echo 6. Shutdown Computer. echo. choice /C:123456 "Please enter selection:" if errorlevel 6 goto _shutdown if errorlevel 5 goto _reboot if errorlevel 4 goto _cd if errorlevel 3 goto _usbcd if errorlevel 2 goto _usb if errorlevel 1 goto _ext :_shutdown s.com goto _ext :_reboot r.com goto _ext :_cd devload UIDE.SYS /s127 /D:CDROM SHCDX33c /D:CDROM,Y echo The IDE/SATA/CD/DVD CDROM loads in completion. goto _find :_usbcd devload USBASPI.SYS /v /e /norst devload USBCD.SYS /D:USBCD SHCDX33c /D:USBCD,Y echo The USB CDROM loads in completion. loaded to drive Y:\. goto _find :_usb mem /c|find /i "USBASPI" >nul If Errorlevel 1 devload USBASPI.SYS /v /e /norst mem /c|find /i "ASPIDISK" >nul If Errorlevel 1 devload ASPIDISK.SYS echo The USB Driver loads in completion. Now USB disk is: Y:\. goto _ext :_find findcdx /s>nul :_ext
tools.zip大小:8.03M,内包含ghost的各个版本和diskgen工具
思路就是动态加载驱动。
测试结果,安装系统极慢。更换smartdrv.exe为13k的,效果要好点,不过总体速度难以忍受。
去掉tools.zip中的ghost和diskgen工具,tools.zip为261KB。磁盘映像文件不变,并将autoexec.bat中xmsdsk 10240 x: /y >nul的10240改为1024,即减小虚拟磁盘空间。测试结果同上。
将磁盘映像改为0.98M(最后成功的,正是这个大小),即将扇区总数由:20160改为2016
测试结果同上。
将最后解决的结构放上来:
我采用的是直接copy了。因为tools里的文件一花加起来不到300多K。这样就省掉了pkzip.com
autuexec.bat内容如下
@ECHO OFF set EXPAND=YES SET DIRCMD=/O:N set LglDrv=27 * 26 Z 25 Y 24 X 23 W 22 V 21 U 20 T 19 S 18 R 17 Q 16 P 15 set LglDrv=%LglDrv% O 14 N 13 M 12 L 11 K 10 J 9 I 8 H 7 G 6 F 5 E 4 D 3 C cls call setramd.bat %LglDrv% set temp=c:\ set tmp=c:\ path=%RAMD%:\;a:\;%CDROM%:\ copy command.com %RAMD%:\ > NUL set comspec=%RAMD%:\command.com copy a:\tools\*.* %RAMD%:\ > NUL %RAMD%: echo The diagnostic tools were successfully loaded to drive %RAMD%. echo. IF "%config%"=="NOCD" GOTO QUIT IF "%config%"=="REBOOT" GOTO REBOOT IF "%config%"=="SHUTDOWN" GOTO SHUTDOWN IF "%config%"=="USBCD" goto USBCD IF "%config%"=="CDROM" goto CDROM GOTO QUIT :USBCD SHCDX33c /D:USBCD,Y GOTO QUIT :CDROM SHCDX33c /D:MYCDROM,%CDROM% %CDROM%: GOTO QUIT :REBOOT R.COM GOTO QUIT :SHUTDOWN S.COM GOTO QUIT :QUIT
config.sys内容如下
[menu] menuitem=NOCD, Start Computer Without CD-ROM Support. menuitem=USB, Start Computer With USB 2.0 Support. menuitem=USBCD, Start Computer With USB 2.0 CDROM Support. menuitem=CDROM, Start Computer With IDE OR SATA CDROM Support. menuitem=REBOOT, Reboot Computer. menuitem=SHUTDOWN, Shutdown Computer. menudefault=NOCD,30 menucolor=7,0 [NOCD] device=himem.sys /testmem:off [USB] device=himem.sys /testmem:off devicehigh=A:\tools\USBASPI.SYS /v /e /norst devicehigh=A:\tools\ASPIDISK.SYS [USBCD] device=himem.sys /testmem:off devicehigh=A:\tools\USBASPI.SYS /v /e /norst devicehigh=A:\tools\USBCD.SYS /D:USBCD [CDROM] device=himem.sys /testmem:off devicehigh=A:\tools\UIDE.SYS /s127 /D:MYCDROM [REBOOT] device=himem.sys /testmem:off [SHUTDOWN] device=himem.sys /testmem:off [COMMON] FILES=10 BUFFERS=30 dos=high,umb stacks=9,256 devicehigh=ramdrive.sys /E 2048 lastdrive=z
磁盘映像格式如下
先这样吧。
昨天测试了,ISOLINUX模式无法引导1.44M标准的磁盘映像。所以根据原来的大小,缩小10倍加以解决。但今天,在config.sys中加载ramfd.sys驱动时,无法加载。
又做了N次的调试。哎,自己摸索就是痛苦。还好,问题解决了。总结一下:
在测试调试过程中,逐步发现,并不是标准1.44M磁盘映像的问题,因为通过“Win98原始启动镜像_[DOS98]_英文版.IMG”和“Win98原始启动镜像_[98Boot]_英文版.IMG”等,都无法引导。引导的结果如下图所示:
在看到“晨枫U盘维护工具”中对hddreg15.img的调用——因为hddreg15.img的大小正是1.44的标准磁盘映像。
发现ISOLINUX.CFG和SYSLINUX.CFG中的加载信息没有标明CHS三项。内容如下:
LABEL HDDREG 1.51
MENU LABEL [^7] HDDREG 1.51
kernel /Boot/syslinux/memdisk
append initrd=/Boot/imgs/hddreg15.img
一般的调用如下:
LABEL MaxDOS
MENU LABEL [^2] MaxDOS V7.0
kernel /Boot/syslinux/memdisk c=80 h=4 s=36 floppy
append initrd=/Boot/imgs/maxdos.img
注意上面的红色部分。所以我按他的写法,调用成功!
-------------------------
后来又不知怎的,测试一下加CHS值的调用,居然可以了。又搞的我分不清方向,再重新测试一次。结果如下:
加上CHS参数是可以引导的。上面说不能引导,估计是CHS参数值不正确导致的。现在看来,有两种方案。
一、按下面写法,即加CHS参数
LABEL All WIN98
MENU LABEL [^2] BootCD / USB 2.0 Support / GHOST / DiskGen
kernel /Boot/isolinux/memdisk c=20 h=4 s=36 floppy
append initrd=/Boot/imgs/win98.img
CHS的值必须正确。
二、不加CHS参数
LABEL All WIN98
MENU LABEL [^2] BootCD / USB 2.0 Support / GHOST / DiskGen
kernel /Boot/isolinux/memdisk
append initrd=/Boot/imgs/win98.img
以上两种方法测试通过。
又回忆一下,为什么我的CHS值写错了呢?我正是近照上次文章讲解的方法计算的呀。上次文章请参照:如何用WinImage制作任意大容量的ima或img磁盘文件
我的操作方法如下:
winimage8.5,新建,默认格式为:1.44M,直接点确定。并将我完成的文件加入。通过“映像—更改格式”,选择最后一项:“选择自定义映像格式”,点确定后,弹出:编辑 FAT 映像大小。如下图所示:
根据这上面内容,我确定的CHS值为:C:80 H:2 S:18。但在配置文件中仍按以前可引导的CHS的配置:
LABEL All WIN98
MENU LABEL [^2] BootCD / USB 2.0 Support / GHOST / DiskGen
kernel /Boot/isolinux/memdisk c=20 h=4 s=36 floppy
append initrd=/Boot/imgs/win98.img
导致引导失败。
刚才又测试一下,仅按上面的步骤,仍是无法引导。又经过一番研究和测试。终于搞定。在上面的基础上解决办法如下:
1、在WinImage软件中,选择“映像”,“引导扇区属性...”,根据需要点击右边的类型,我这里点击“windows95/98”,完成后,可成功引导了。