回复:XPE USB 2.0启动技术
在创建完操作系统后,我们需要在PC上面设置USB的启动。这是我机器上面USB启动设置,最主要的是要把USB设为最先启动的设备。另外,一般的BIOS都会把USB启动做成是模拟软盘或者模拟硬盘(其实就是中断号的不一样)。微软的USB BOOT 2.0的技术是需要大家把USB模拟成硬盘的,这一点需要注意。
虽然USB启动能带来许多的方便的地方,但是他对系统会有一定的要求。并且,运行在U盘里面的嵌入式XP系统也不是万能的,使用这个技术会有一些限制。下面我们就探讨一下这方面的问题。
首先是系统的要求,USB BOOT 2.0的技术要求BIOS必须支持USB 2.0通过0x13H中断启动,也就是硬盘模拟了。另外,要求启动的接口必须是USB 2.0,U盘也必须是USB 2.0,因为USB 1.1的速度太慢,会严重影响系统的稳定性。最后一个要求是U盘里面的FLASH必须满足最低的写入速度是不低于9M/s,这样才能保证系统正常运行。(现在的USB2.0的U盘大都满足这个要求)。
在使用USB BOOT 2.0的嵌入式XP系统里面,会有一些限制。首先,在目前的版本里面,不支持Standby和休眠的模式,因此不可以使用HORM的技术。不过我们在下一个版本的Feature Pack里面会加入对Standby的支持。另外,因为系统运行在闪存里面,所以我们不支持DUMP,也不会支持换页操作,所以没有Pagefile。因此,如果是一些大型的消耗内存的程序,必须控制其内存使用,或者增加系统的内存。
在嵌入式的XP里面,微软提供了一个Debug版本的NTDECT程序。NTDETEC.com是NTLDR启动的时候调用的一个硬盘检测程序。普通的NTDETECT在检测不到可启动硬盘的时候只会报一个invalid的错误。利用Debug版本的检测程序可以把系统检测出来的所有硬盘设备都列出来,以方便大家查错。Debug版本的检测程序就在系统安装光盘的ValueAdd目录下面,名字叫做USBNTD.CHK。只要把这个程序改名为NTDETECT.COM,然后放在U盘根目录下面替代掉原来的NTDETECT.COM就可以了。现在我们把定制好的U盘插入到目标机器上面启动。
下面是用Debug版本的NTDETECT输出结果。
下面是第一次启动时候运行FBA。FBA也是微软嵌入式XP的特性之一,最主要的作用是对定制化的操作系进行初始化。在初始化过程中,系统允许执行一些文件。这个特性最主要的目的是因为对于设备厂商而言,定植好的操作系统需要大量的复制到也许是成千上万台的目标机器上面。但是如果大家都是同样一个IMAGE,那么类似序列号,网卡地址等每台机器不一样的信息就不能够写到机器上面,需要人工更改。所以微软提供了一个FBA(全称叫做First Boot Agent)的程序,里面可以设定一些Script或者程序,从而产生序列号,MAC地址等每台机器特性化的信息。FBA的过程正如其名字一样,只会执行一次,因此在之后的启动就直接执行系统代码了。