-
折腾了一下,加强U盘的启动能力
Posted on 三月 2nd, 2009 1 comment今天新买的群联芯片的 8G U盘启动方面遇到一点问题。过程中觉得很奇怪,当然事实上是不奇怪的,只是目前bios和千差万别导致如此了。
首先是发现我的笔记本与公司电脑不一样,调好一边另一边启不动。后来发现grub4dos的启动能力强点。
就用它了,搞定一个 case。然而又发现,在公司同样的dell 740版电脑,A机器进BIOS发现启动可选USB-HDD,而USB-ZIP旁边标示着not present.
B机器进BIOS,情况就反过来了,USB-ZIP可用,而USB-HDD则标为not present。
这两台机器,只有BIOS的版本不一样,其它硬件都一样。因为其中一台是刷过BIOS的。这两种不同的情况导致了严重的后果。USB-ZIP的那台机器无法启动。显示
Remove disks or other media.
Press any key to restart
经查,这句话位于活动活区的第一扇区。把它改为其它值后发现,提示信息跟着变化。这说明,bios直接启动了第一扇区的代码,未经过mbr.(mbr上装着grub4dos)
接下来就简单了,修改一下这个第一扇区的代码。还是老办法,0×40处的0×00一定要改为0×80,这是非软盘启动的基础。这个字节表示启动的介质类型。不是软盘就得填0×80。还有就是0xe6的四个字节跳转指令全部nop掉。强制用LBA方式(扩展int 13)读盘。这样不同BIOS的CHS参数不一样的问题 可以被绕过。此外0×170处的NTLDR改为GRLDR,强制启动grub4dos.
修改完成后,这个盘就可以在两台机器上都启动了。
-
真正的U盘启动安装XP系统,不需要PE
Posted on 二月 12th, 2009 17 commentsU盘启动安装XP,方法也有不少了。大约有以下几种:
1. 启动到dos,加载smartdrv, 用winnt安装。缺点:很慢。安装时无法给硬盘重新分区,不能格式化C盘。
2. 启动到WINPE,在WINPE里分区,格式化。可加载虚拟光驱,安装时选择高级,拷贝所有文件到硬盘。方法比较麻烦。
3. 某老外发明的,还做了一个大bat,把winxp先安装一半到U盘上,同用U盘装到系统上。兼容性差,不能从A电脑装一半再应用到B电脑。放弃。
4. 量产为USBCDROM, 受硬件条件限制,有的U盘量产的CDROM不能在某些主板上启动。不好。
我这里提出一种全新的方案,使得从U盘装XP就像U盘装vista一样,或者说像是从CDROM里装XP一样。首先,在WINXP/2003下用分区工具(如hpusbfw.exe)给U盘分区并格式化好(这样格式化的分区可直接启动ntldr)。然后,把光盘上的文件全拷到U盘根目录(其实只要拷I386目录和根目录下的win51开头的文件就行了)
很多人不会设置U盘启动ntldr,在这里说一下过程:
1. 用hpusbfw.exe格式化U盘。选fat32就行了。格完取下再插上。
2. 再次用winxp自己的工具格式化成fat32。
3. 放一个ntldr文件和boot.ini文件。boot.ini中至少有两个项目,timeout设为30秒,从U盘启动,看看有没有出现boot.ini中的选单,如果有,则成功。如果没有,那就用winhex把分区第一扇区的0×40偏移处的00改为80,然后再试。如果还是不能成功,那估计碰上死硬电脑了,请看这一篇: http://www.swigger.net/archives/56.html最后,下载这个文件: usb_inst_xp1.rar 解压密码:cygwin
把文件解开把U盘根目录。(注,解开后,ntldr/boot.ini/ntdetect.com在U盘根目录,i386下增加winnt.sif和instxp文件)
好了,现在从U盘启动,会出现启动菜单,第一次选install xp,就跟光盘安装一样了,安装时可以格式化硬盘和分区,跟光盘安装全一样。 安装过程后来要求重启时,都选 run xp ondisk1。最后安装成功后还是从这个菜单项进入windows。显示全部文件包括受系统保护的文件,去除c:\boot.ini的只读属性,把C:\boot.ini里的:
multi(0)disk(0)rdisk(1)partition(1)
改为:
multi(0)disk(0)rdisk(0)partition(1)
即把一个1改成0.
现在可以拔除U盘,从BIOS设置硬盘启动了。xp安装完毕。就跟从光盘装一样。
-
尝试把windows xp装到移动硬盘上,一些情况
Posted on 十二月 28th, 2008 1 comment首先这个windows xp绝对不是win pe,PE就不用说了,放到U盘或移动硬盘上很容易。
试了把原版XP装到移动硬盘上,快成功了,以下是一些有意思的问题或情况:
1. 有的驱动会出问题,比如我最初在x200上实现装到移动硬盘,后来移到T43再移到台机。 移到台机发现一个有意思的蓝屏,查了一下是intelppm.sys引起的。而这个.sys是 intel cpu的驱动程序。它里面调用了rdmsr读寄存器,换成amd cpu它这一读就异常了intel 又没处理这个异常,就蓝屏了。其实它完全可以在driverentry里调用cpuid判断
一下是不是自己的CPU,不是就return fail,这样就不会有问题了。这个驱动算是写得不好的。这个问题的解决方案就是把intelppm设为手动运行。(SYSTEM_START改为DEMAND_START)。还好CPU的驱动不重要,不装都没事。
2. 写得好点的驱动会判断设备存不存在或对不对,这就带来另一个问题,降低了win的启动速度。它很可能向设备发送一条命令,然后等待响应,可能要等到超时才发现没有设备。在移动硬盘上启动xp,启动画面可能要转9圈。比专为一套硬件安装的要慢一点。此外,在多台机器启动后安装了多个驱动,为了各处启动本身驱动要装得多,也导致变慢。不过还好,不是很慢。影响不大。3. 2导致的另一个结果是,很多驱动启动失败(ms的驱动跟win32 services一样是以服务形式安装在注册表)。这样启动完后进入windows一看事件查看器,一堆的红叉叉。
4. 蓝屏是个很好的东西,内核发现什么不对就调用bugcheck蓝屏。这样我就可以根据它来查找和解决原因。这样蓝屏了无数次后终于实现了可在三台机器都启动。最难查的问题就是没有错误提示的东西。比如我在台机上启动后发现xp的主题出不来,窗口发白。手动在桌面右键那里修改一下就出主题了。这个问题就查不了,没有地方报错,估计只能每次这样手动调了。
5. windows好像还挺聪明的,我的移动硬盘的第一分区只剩下2G左右空间,它启动后很智能的把pagefile放到机器自带硬盘的主分区去了(即平时的C盘)。
-
winpe进程启动顺序
Posted on 十二月 27th, 2008 No comments想用WINPE来做点事情,深山红叶里有个很好的迷你PE盘。只有一点点文件,才几十M。
用windbg调了一下进程启动顺序,发现如下:
首先内核创建第一个用户进程 smss.exe
后来smss.exe创建 csrss.exe
再后 csrss.exe创建winlogon.exe
winlogon创建services.exe, lsass.exe , pelogon.exe等。
如下图:
smss -> csrss.exe
-> winlogon.exe -> services.exe -setup
-> X:\WXPE\system32\lsass.exe -setup
-> PELOGON.EXE PECMD.EXE LOAD %SystemRoot%\SYSTEM32\PECMD.INI => pecmd.exe => showdrive.exe因为smss和csrss是native应用程序,而winlogon开始是win32子系统程序,因此,如果想要做点事的话,还是替换winlogon.exe比较好。这样编程方便。
-
U盘启动小结
Posted on 十一月 24th, 2008 1 comment现在的U盘都比较大了,所以ZIP模式和HDD模式已经不太重要了,可以忽略了。
本文只说 USB-CD模式和USB-HDD模式。
USB-CD 模式是比较不错的一个方式,可惜对硬件有一定要求。现在我们去买U盘的时候,能买到一些U盘带有一些特殊的功能,比如杀毒功能。这种U盘插入电脑后,会多出两个盘符,一个是光盘,里面放的是实现这些特殊功能的软件,还有一个就是移动盘符,也就是给用户使用的U盘存储了。
那么,这个光盘是怎么出来的呢?实际上,每个U盘都可以这样造出光盘来,用量产工具就可以了,量产工具可以在这里找到:
http://bbs.mydigit.cn/read.php?tid=20620
不过,这样生产出来的光盘,不一定能用来启动。这跟BIOS有关系,一个U盘上同时有光盘和移动存储时,可能有两种情况。情况A:光盘在前面,移动存储在后面。情况B:移动存储在前,光盘在后。
如果碰到情况B,问题不太好办。有的主板只认第一个东西。比如IBM笔记本,我的T43和刚买的X200,BIOS都不支持这种状况。碰到情况A就比较好了。遗憾的是,这个A和B不是自己能选的,量产工具并不支持调整,所以,只能买不同芯片的U盘来达到这一目的。目前我用过的,只有iCreate的芯片的量产工具是支持情况A的。有了这样的U盘后,量产一下,只要主板支持USB-CD,就什么ISO都能拿来启动了。
小结一下步骤:
- 确定U盘的量产工具
- 量产放入一个支持启动的ISO。
- 改BIOS从USB-CD启动,实验。如果主板支持情况B,则什么U盘都能启动。
- 如果主板不支持情况B,就只能去找个别的芯片的U盘了,比如找个iCreate芯片的。然后重新从2试。
另一模式是USB-HDD模式。对于U盘,如果量产时设置成移动型,那么windows在格式化时,不会生成分区表,不会有MBR,这样主板是不认识也不能启动的。可以在linux下fdisk,可以生成MBR和分区表。当然,不用linux的话,下载一个HPUSBFW.exe格式化一下,也有MBR和分区表了。不过用hpusbfw格式化后,最好再用XP自己格一下,这样生成的分区就肯定支持启动微软自家的NTLDR了。启动了NTLDR其它都好办了。不过整完后,还需要用winhex改一下,把分区改为活动的,可以用winhex打开整个设备,改一下0×1be处,把00改为80。还需要改一下分区,用winhex打开格式化后的分区,把0×40处从00改为80。这样后,把C盘的NTLDR,NTDETECT.com,boot.ini放过去,就可以实验一下支持启动的感觉了。
小结一下步骤:
- 用HPUSBFW.exe格式化U盘为FAT32格式。假设完成后有M盘。
- 用XP自己格一下M盘,确保启动代码更适合微软的NTLDR。
- 用Winhex的打开磁盘功能,打开物理设备(physical media)下的U盘,改0×1be处,从00改为80。
- 用winhex的打开磁盘功能,打开逻辑驱动器M盘,把0×40处从00改为80。(注:如果不是FAT/FAT32这样做就损坏数据了)
- 此U盘已经能以USB-HDD形式启动,可以放入C盘下的ntldr,ntdetect.com,boot.ini去试验。试验时确保boot.ini具有多项,且等待时间较长,这样就能看到选择启动的画面,从而确定此U盘已经确实能支持启动。
-
将深山红叶放到U盘上的办法
Posted on 十一月 23rd, 2008 No comments这个网上有很多人说,有的人整出了非常复杂的办法,我也是很久之前研究的了,还是写下来,否则下次还要到处找。
方法超级简单,对于深山红叶,最终版似乎就是 V30正式版,也就是所谓的“嫦娥一号记念版”。
这个版本打开后目录结构如下:
I:.
│ WINNT.XPE
│ WINPE.IS_
│ 深山红叶系统工具箱.EXE
│
├─BOOT
│ │ CDMENU.BIN
│ │ CDMENU.EZB
│ │ DOS98.IMG
│ │ GRLDR
│ │ ISOGRUB.BIN
│ │ LOADER.BIN
│ │ MEMTEST.BIN
│ │ MENU.BM1
│ │ MENU.BMP
│ │ SETDOS.CMD
│ │ STAGE2
│ │ WINDIAG
│ │ WINPE.INI
│ │ WINS.BIN
│ │ XLYBIG.IMG
│ │
│ └─GRUB
│ CDBOOT.BS
│ FAT_STAGE1_5
│ HD_MENU.LST
│ MEMDISK.GZ
│ MENU.LST
│ NTFS_STAGE1_5
│ STAGE1
│ STAGE2
│
├─PROGRAMS (文件太多,此处省略)
│
└─WXPE
NTDETECT.COM
SETUPLDR.BIN先确保U盘可以启动NTLDR,
然后把所有文件copy到U盘上,把WXPE下的两个文件移到U盘根目录,将Setupldr.bin改名为NTLDR
BOOT目录下只留WINPE.ini,其它全删。
这样就完成了把深山红叶最终版的U盘化。汗,是不是太简单了,但在不知道方法去试的时候,还是很麻烦的。
最后的目录结构如下:
Z:.
│ NTLDR
│ WINPE.IS_
│ 深山红叶系统工具箱.EXE
│ NTDETECT.COM
│ WINNT.XPE
│
├─PROGRAMS (文件太多,此处省略)
│
└─BOOT
WINPE.INI说明:BOOT下本来有很多文件,可以完成很多的功能,用了这种办法来启动后,这些功能都做不到了(比如启动到DOS,微软内存检测等)。试过了用ezboot的那些东西在非光盘上是用不了的。所以这些文件就都删了。
当然这些功能要加回来,还是很简单的,在这个方法上添加就行了。可以用grub4dos来启动,添加这些功能。


