无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 8927|回复: 16
打印 上一主题 下一主题

xp在安装过程中,SATA驱动的加载具体是怎么实现的

[复制链接]
跳转到指定楼层
1#
发表于 2008-4-9 16:33:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、序

(如果不想看,请直接看问题)

现在 各种各样的强大工具都有了,确实方便了大家,很多东西不用手动操作,只需要点击几下鼠标,就能实现原来需要手动的,并且是很麻烦的操作。但是随之而来的 是 入门的门槛降低了,你不需要懂很多知识,很多的原理,只需要会使用工具就行,具体的处理过程都交给了工具。在这种情况下,对创作者的自身的技术要求降低了,伴随来了的是大量的创作者涌现出来,同时他们自身的技术含量也少了许多!
但是,我想真正的技术爱好者,是不会这样就满足的,他们总是希望搞透原理,搞明白具体是怎么回事。很多人都这么说,真正的编程高手,都是用记事本来写源代码的。既然如此,我想我就开始引入正题了。

二、正文

虽说现在nlite 或者dps都可以轻松实现集成第三方驱动,包括SATA驱动,我们只需要点击 鼠标,就能集成轻松集成。可是我想具体的搞明白,他在安装过程中,驱动的加载,具体是怎么实现的。如果,我问的问题,各位技术高手都会,请不要吝惜你的那几句话,如果,不是很明白,可以和我一起交流探讨,共同提高进步。

下面 我们把xp安装时间分为2个阶段:

TX安装模式:
1. 载入驱动程序
2. 复制安装过程需要的文件到硬盘
3. 重启动电脑...


GUI安装模式:
1. T39之前的等待
2. 安装设备
3. 安装网络
4. 安装开始菜单项目
5. 注册组件
6. 保存设置
7. 删除临时文件并重启动...

问题:
1、在TX安装模式的载入驱动程序阶段,安装程序是通过那个控制文件,从哪里找到需要载入的驱动(包括系统本身和集成SATA等第三方驱动)?
2、在GUI安装模式时,在T39之前,应该还需要加载TX模式驱动,这时候安装程序,又是通过那个控制文件,从哪里找到那些TX模式驱动?(系统部署之前)
谢谢各位!

[ 本帖最后由 闪电鼠 于 2008-4-9 08:19 PM 编辑 ]
2#
发表于 2008-4-9 17:53:34 | 只看该作者
txt安装模式通过按F6从软驱加载驱动
回复

使用道具 举报

3#
发表于 2008-4-9 19:32:35 | 只看该作者
然后在安装过程中把SATA驱动放到Drivers里面,并根据txtsetup.oem修改注册表system。
到GUI时,NTLDR直接读取system里面的信息,根据这些把驱动装进来。
在NTLDR未装入驱动之前肯定是用IDE兼容模式(或SCSI兼容模式--硬盘控制器为SCSI的话)读取硬盘。
SCSI驱动则有些不一样,在插入软盘后,读取SCSI驱动,并改名为setupdd.sys放好。以后启动都是先SCSI兼容模式载入setupdd.sys,然后才访问其他的。
=============================
不过说实在的,这个问题值得研究。在LDR装入驱动之前,甚至是LDR装入之前,是如何访问硬盘的?应该是各有一个兼容模式。

[ 本帖最后由 netwinxp 于 2008-4-9 07:41 PM 编辑 ]
回复

使用道具 举报

4#
 楼主| 发表于 2008-4-9 19:55:13 | 只看该作者
在没有复制文件之前是怎么寻找驱动?(也就是txt模式载入驱动的时候,复制系统文件之前)

是不是通过txtsetup.sif文件?

[ 本帖最后由 闪电鼠 于 2008-4-9 09:39 PM 编辑 ]
回复

使用道具 举报

5#
发表于 2008-4-9 21:44:22 | 只看该作者

回复 #4 闪电鼠 的帖子

在没复制文件之前,安装程序会扫描系统的各种总线及总线上挂的设备,并把所检测到的hwid传递给安装程序(比如我们把setupldr.bin看成是安装程序的话,那那个检测程序就是NTDETECT.COM),然后系统就会根据这些hwid来确定硬件,当启动设备的hwid无法在系统中找到对应硬件的匹配驱动时,安装程序就需要用户按F6从软驱加载启动设备的驱动,否则安装过程将失败。它从软盘的txtsetup.oem来确定驱动程序的具体文件和位置,对于部分SCSI驱动来说,需要手动改名为SETUPDD.SYS。
txtsetup.sif更确切的说法是定制安装的配置文件。这应该也是区分XP和PE的分水岭。作为XP来说,它是硬件相对确认过的系统,NTDETECT.COM返回HWID列表后,OSLOADER(通常就是NTLDR的保护模式模块)通过访问system相对位置来取得取得对应于hwid的驱动程序的位置,并根据摄制的加载方式加载驱动程序。而PE的OSLOADER(SETUPLDR.BIN的OSLOADER模块)则先从txtsetup.sif取得定制的驱动(当然它也会从SETUPREG.HIV(相当于system)加载设置好的驱动)。
当启动设备和关键设备发生变化时,XP由于设备已经预先准备了,如果老的驱动无法兼容新的启动设备,则会出现0x0000007B的蓝屏,系统启动失败。而PE则会根据定制的txtsetup.sif来查找启动设备的驱动,只有找不到设备驱动或者找到的设备驱动是错误的才会导致驱动载入失败。总起来讲PE比XP具有更好的可移植性。
==========================
NT内核的LDR文件,包含一个STARTUP模块和一个标准PE可执行文件格式的OSLOADER模块,它们可以认为是依靠COPY /B连接成一个文件。在X86,STARTUP模块是居于实模式的,它还负责完成从实模式转向保护模式并载入OSLOADER然后把控制权交给OSLOADER。
现在所谓的GHOST的XP,其实它是把启动设备设置为标准IDE,然后启动后再作修改,但如果启动设备是不兼容IDE的SCSI设备的话,这种方式是无法启动的。

[ 本帖最后由 netwinxp 于 2008-4-9 10:34 PM 编辑 ]
回复

使用道具 举报

6#
发表于 2008-4-10 10:03:08 | 只看该作者
原帖由 netwinxp 于 2008-4-9 07:32 PM 发表
不过说实在的,这个问题值得研究。在LDR装入驱动之前,甚至是LDR装入之前,是如何访问硬盘的?应该是各有一个兼容模式。

装入驱动之前,访问硬盘应该类似于dos下访问硬盘,不要任何驱动。

原帖由 fujianabc 于 2008-4-9 05:53 PM 发表
txt安装模式通过按F6从软驱加载驱动

自己补充一点,按了f6会从第一软驱(a:)让用户手动加载驱动;
如果不按F6,并且存在第二软驱(b:)的话,安装程序会从b:的txtsetup.oem中加载默认磁盘控制器驱动。
回复

使用道具 举报

7#
发表于 2008-4-10 10:36:56 | 只看该作者
原帖由 fujianabc 于 2008-4-10 10:03 发表

装入驱动之前,访问硬盘应该类似于dos下访问硬盘,不要任何驱动。

应该来讲,在LDR装入之前是不管用啥方式来装入内存的(对应于PC机来讲是MBR)或者说可以用任何方式,但进入STARTUP(OSLOADER前面的模块)后开始依靠驱动或者说LDR内置的兼容驱动来完成的,它支持网络、兼容IDE、兼容SCSI等,这也就比较好地解释了为何从SCSI启动安装一定要驱动。
其实DOS也不是直接通过INT13H来访问磁盘的,它是通过的块设备驱动来完成的,只不过内置的驱动很少。可以通过加载可安装的设备驱动来加入对其他介质的设备进行访问。安装后的驱动程序会在设备链中加入。
在这一点上面DOS、WINDOWS、UNIX几乎是一样的。
酱紫的好处是容易在不同介质设备上进行移植不需要大量改动核心程序。
我们一般都是基于x86的,所以会认为操作系统直接通过INT13H来访问磁盘,其实不是的,直接访问INT13H的是内置的兼容IDE设备驱动。所以才会在引导程序需要磁盘参数表(BPB),FAT分区有,NTFS分区同样有。
总结一下——启动设备通过某种方式(具体方式各异)把LDR程序(部分或全部)加载到内存(对应于x86就是主引导程序和分区引导程序来完成这功能),LDR再通过得到的BPB和对应服务程序访问启动设备获得其它部分和其他文件(对应于DOS来说是分区上的BPB和BIOS里面的INT13H)(SCSI设备估计不支持INT13H所以需要通过软盘加载驱动服务程序。)。可以回想一下,以前在不支持大硬盘启动的主板上可以通过硬盘提供商的程序从MBR加载获得支持。

也就是说随着以后BIOS被取消,通过新的FIREWARE仍然可以运行操作系统(修正过内置驱动的),通过操作系统API调用或设备请求调用的应用软件仍然可以很好地运行,但通过BIOS调用的应用软件则全完蛋,最典型的例子以前是PCTOOLS,以后是GHOST。

[ 本帖最后由 netwinxp 于 2008-4-10 11:50 AM 编辑 ]
回复

使用道具 举报

8#
发表于 2008-4-10 13:41:55 | 只看该作者
既然系统核心只有ide驱动,
那楼上可以解释一下scsi硬盘或者usb硬盘启动dos是怎么一回事吗。
回复

使用道具 举报

9#
发表于 2008-4-10 14:02:49 | 只看该作者

回复 #8 fujianabc 的帖子

SCSI卡的ROM模块修改INT13H,使SCSI硬盘符合标准IDE设备的INT13H中断调用。
USB盘首先在主控芯片把闪存模拟成硬盘,其次需要BIOS把挂接在USB总线上的块设备模拟成IDE设备,所以闪存启动同时需要BIOS和主控芯片的支持,这也就很好地解释了为何有的U盘启动很慢有的很快,因为有的BIOS用UHCI接口(USB1.0/1.1),有的用OHCI或EHCI(USB2.0)。另外也很好地解释了有些主控芯片和有些南桥兼容问题,因为它们"接头暗号"对不上。还有模拟方式的迥异导致了U盘启动的诸多问题。
我们甚至可以期待,对于U盘启动支持不好的主板,可以通过置换具有相同南桥芯片的能良好启动的主板的BIOS的有关USB映射模块来获得解决。
=============================
对于非启动块设备,我们从NT的驱动程序基本可以看到大致从高层往底层的顺序是——DISK-PORT-MINI-BUS(不一定全有),它们不需要乱七八糟的模拟。对于该设备的读写和控制归根到底都是填写好请求头并通过向NTOSKRNL中挂接的设备驱动服务发出设备请求,然后由设备驱动服务来完成的。NT加强了可挂接的设备驱动的能力,所以所能识别并使用的硬件数目大大增多了。设备驱动程序一般由该硬件厂商提供,如果没有提供驱动或兼容的驱动,那么就无法使用该设备。

[ 本帖最后由 netwinxp 于 2008-4-10 02:30 PM 编辑 ]
回复

使用道具 举报

10#
发表于 2008-4-10 15:49:34 | 只看该作者
这话题有意义,最近装了一下VISTA,发现它也不过是把大量的驱动加载.光驱动就1.3G
回复

使用道具 举报

11#
发表于 2008-4-16 09:01:44 | 只看该作者
学习了,又增长了一点知识,期待老鸟更多的解释!!!
回复

使用道具 举报

12#
发表于 2008-5-4 15:37:45 | 只看该作者
好的东西,就是该顶!!!辛苦了,
回复

使用道具 举报

13#
发表于 2008-5-5 11:15:44 | 只看该作者
你好,请问怎么在TEXT按F6时让XP把U盘认为A盘,需要那些条件?
回复

使用道具 举报

14#
发表于 2008-5-5 18:55:33 | 只看该作者
原帖由 yobbo 于 2008-4-10 03:49 PM 发表
这话题有意义,最近装了一下VISTA,发现它也不过是把大量的驱动加载.光驱动就1.3G

这是VISTA所有的驱动啊,磁盘驱动,或者说PE下只要一个驱动就可,它有通用的磁盘驱动
回复

使用道具 举报

15#
发表于 2008-5-5 19:26:09 | 只看该作者
获益非浅,让人矛塞盾开~~~_~~~~~!
回复

使用道具 举报

16#
发表于 2008-5-5 22:55:49 | 只看该作者
不错,教材中的资料,好
回复

使用道具 举报

17#
发表于 2008-5-6 20:37:32 | 只看该作者
原帖由 Ansson 于 2008-5-5 18:55 发表

这是VISTA所有的驱动啊,磁盘驱动,或者说PE下只要一个驱动就可,它有通用的磁盘驱动

所谓的通用驱动程序通用情况比起pciide并没有好多少。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-8-3 15:48

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表