没有什么根本的不同,同样的硬件通信类型,但面向的平台对象不同而已。
对于刚刚接触驱动程序编写的人来讲,开发UNIX/LINUX的驱动程序相对简
单一些,主要是因为WINDOWS本身对驱动程序的限制和其自身的版本太多
导致接口化程序编写的难度提高。相反UNIX家族的驱动程序设置基本上
是版本具备延续性,因此可以在编写的过程中有很多借鉴的。
Windows驱动如何用INF文件安装
设备相关的驱动安装可以选择INF进行安装,INF安装文件的编写建议从 WDF Sample 中找到合适的INF文件进行修改
通过设备管理器手工安装
打开控制台,输入devmgmt 回车,这是打开设备管理器的其中一种方式,其他方式比如右键系统菜单栏图标均可以打开任务管理器,只是使用命令行的方式比较少见,这里特意记录一下。找到感兴趣的 设备节点,右键 属性(或更新驱动程序软件),切换到 驱动程序,可以进行感兴趣的 *** 作。这里所看到所提供的选项,后续等你熟悉了驱动安装的接口后,你会发现都有对应的接口对应每个功能选项。
安信接Windows驱动开发外包
通过程序实现自动安装
可以参考WDF Sample 中的Driver Install Frameworks API (DIFxAPI) Sample 和Device Console (DevCon) Tool 两个工程,分别提供了不同调用接口的驱动安装方式,Device Console (DevCon) Tool 生成的devconexe 是一个功能强大的工具,不仅可用于驱动(包)的安装和卸载,还可以获取设备的硬件ID,描述符以及设备所安装的驱动列表等信息,开发人员可以从中一窥究竟。
在驱动的安装过程中,系统会自动记录安装的日志,在INF目录(路径一般在 C:\Windows\inf下)下可以找到两个日志文件 setupapiapplog 和 Setupapidevlog ,查看这两个日志文件有利于理解驱动安装的执行过程,同时也有利于排查驱动安装过程中出现的异常。
本文介绍的过程用于 在安装期间为设备选择最适合的设备驱动程序。
当您运行 Windows 安装程序时,用于某个特定设备的设备驱动程序或 inf 文件可能有多组。安装程序和即插即用功能都试图为要安装的设备选择最适合的设备驱动程序,以解决这些冲突。
注意:本文介绍的过程仅用于在安装程序的图形用户界面 (GUI) 阶段或安装程序运行完毕后所安装的设备。在安装程序的文本模式部分执行的大容量存储控制器检测和设备驱动程序选择使用的是另一个过程。
更多信息
有关大容量存储控制器检测过程的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
220845 在 Windows 安装期间添加第三方或更新的驱动程序
即插即用功能将尝试对硬件的即插即用标识 (ID)(在对设备进行枚举以后由设备固件或系统 BIOS 返回)与 inf 文件中任何匹配的即插即用 ID 进行比较,以找到兼容的设备驱动程序。
即插即用功能可以搜索所有 inf 文件,以便为特定设备找到最适合的设备驱动程序进行安装。该功能在找到第一个匹配项后并不停止搜索,而是继续搜索即插即用搜索路径中列出的所有 inf 文件,搜索路径在以下注册表项中定义:
HKEY-LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion
DevicePath:Reg_Expand_SZ:%Systemroot%\Inf
注意:默认情况下,上述注册表位置仅包含这一个项,但如果您执行无人参与安装并在无人参与应答文件中使用了OemPnpDriversPath = 参数,则可能会向此注册表项附加其他路径。
安装程序会为在 inf 文件中包含匹配项的兼容设备驱动程序生成一个列表,并对找到的每个驱动程序都指定一个“等级”。等级范围为从“0”到“0xFFFF”,其中 0 代表最适合的可能匹配项,而 0xFFFF 代表最不适合的可能匹配项。等级最低的设备驱动程序将被视为最适合的可能匹配项,并且是要安装的设备驱动程序。
设备驱动程序的等级分为以下范围:
0x0 到 0xfff:设备硬件 ID 与 inf 文件中列出的硬件 ID 匹配。
0x1000 到 0x1fff:设备硬件 ID 与 inf 文件中的一个兼容 ID 匹配。
0x2000 到 0x2fff:一个设备兼容 ID 与 inf 文件中的硬件 ID 匹配。
0x3000 到 0x3fff:一个设备兼容 ID 与 inf 文件中的兼容 ID 匹配。
0xFFFF:最不适合的匹配项。
在 Windows XP 和 Windows Server 2003 中,还存在其他设备驱动程序等级范围:
0x8000 到 0x8FFF:不受信任的硬件 ID 匹配项
0x9000 到 0x9FFF:不受信任的兼容 ID 匹配项
如果 inf 文件未经过数字签名,或者 Model 节名称未包含 Windows NT 特定的修饰(设备可安装在 Windows NT、Windows 95 或 Windows 98 上,但它在这些 *** 作系统上不具有特定的项),则这些 inf 文件将处于不受信任的范围。
如果安装程序确定某一设备驱动程序是不受信任的,它可以将该设备驱动程序的等级更改为前面所提到的适当范围。
处于 0x0 到 0xfff 范围的设备驱动程序等级称为“硬件 ID 匹配”,因为它们在硬件 ID 之间匹配。这些等级还被视为最适合的匹配项,而任何其他等级都将被列为“兼容”,这是因为在生成设备驱动程序等级时至少有一个兼容 ID。类别安装程序和辅助安装程序也会影响设备驱动程序的选择。如果这些安装程序确定设备驱动程序无法支持设备,或更改了设备驱动程序的等级,则它们会将该设备驱动程序标记为“无效”。
但是,如果两个设备驱动程序都具有最低的等级,安装程序将使用最新的设备驱动程序。如果一个设备驱动程序已经过签名,而另一个未经过签名,则将向未签名的设备驱动程序的日期赋予 0xFFFFFFFF 值,同时选择并安装已签名的设备驱动程序。
可能还会提供 OEM 提供的设备驱动程序,但可能不会选择和使用该程序。即使制造商提供了更新后的设备驱动程序,它也可能只是作为兼容的设备驱动程序编写的,因而会获得较高的等级并产生较差的匹配结果。安装程序在选择设备驱动程序匹配项时,不会考虑 OEM 提供的设备是否已经过数字签名。如果未经签名的设备驱动程序具有较低的等级,且匹配度优于任何其他内置设备驱动程序,则安装程序会选择并安装该设备驱动程序。
运行安装程序时,如果在任何 inf 文件中均未找到匹配项,则会推迟设备安装,且该设备可能会在设备管理器中成为未知设备。引入新设备(安装过程之外)后,如果未在计算机中的任何 inf 文件中找到匹配项,您可能会收到“找到了新的硬件”提示,并会被要求提供设备驱动程序。
例如,您在计算机上安装了 PCI 视频适配器,其即插即用 ID 显示在两个不同的 inf 文件(Nv3_dispinf 和 Nv4_dispinf)中。这两个设备驱动程序文件均未经过数字签名,因此它们的日期都将被赋值为 0xFFFFFFFF。在此示例中,这两个文件位于以下 D:\Drivers\Video1 和 D:\Drivers\Video2 文件夹中。
注册表中的当前 Devicepath= 具有 %Systemroot%\Inf、%Systemdrive%\Drivers\Video1 和 %Systemdrive%\Drivers\Video2 项。
注意:%Systemroot% 为 D:\Winnt,%Systemdrive% 为 D:
安装程序和即插即用功能将搜索在上述路径中找到的所有 inf 文件,并记录找到的任何匹配项。如果安装程序或即插即用功能找到了多个匹配项,则将使用最适合的匹配项。
以下摘自 Setupapilog 文件的内容详细介绍了上述过程。在此示例中,安装程序的日志记录模式已设置为详细模式。有关进行此项设置的方法,请参见以下文章:
243996 如何在 Windows 2000 GUI 模式安装期间启用详细日志记录
如果安装程序运行正常,您将不会在 Setupapilog 文件中看到如此多的详细信息。
当设备受到查询时,它将返回硬件 ID 和兼容 ID 的列表。并非所有设备都会返回多个 ID,但在多数情况下,它们确实如此。在此示例中,视频卡将返回以下 ID:
Searching for hardware IDs:
Pci\Ven_10de&dev_0028&subsys_5a001092&rev_11,
Pci\Ven_10de&dev_0028&subsys_5a001092,
Pci\Ven_10de&dev_0028&cc_030000,
Pci\Ven_10de&dev_0028&cc_0300
Searching for compatible IDs:
Pci\Ven_10de&dev_0028&rev_11,
Pci\Ven_10de&dev_0028,
Pci\Ven_10de&cc_030000,
Pci\Ven_10de&cc_0300,
Pci\Ven_10de,pci\cc_030000,
Pci\Cc_0300
Enumerating files D:\Winnt\Inf\inf
@ 07:11:59191 : Opened PNF of "D:\Winnt\Inf\1394inf"
@ 07:11:59191 : Opened PNF of "D:\Winnt\Inf\accessorinf"
@ 07:11:59191 : Opened PNF of "D:\Winnt\Inf\acpiinf"
@ 07:11:59191 : Opened PNF of "D:\Winnt\Inf\adm_multinf"
@ 07:11:59191 : Opened PNF of "D:\Winnt\Inf\adm_portinf"
@ 07:11:59207 : Opened PNF of "D:\Winnt\Inf\agtinstinf"
Enumerating files D:\Drivers\Video1\inf
@ 07:12:00660 : Opened PNF of "D:\Drivers\Video1\NV4_DISPinf"
@ 07:12:00660 : The file (D:\Drivers\Video1\NV4_DISPinf) is not digitally
signed, ignoring driver date
@ 07:12:00660 :Found Pci\VEN_10DE&DEV_0028 in
D:\Drivers\Video1\NV4_DISPinf; Device: NVIDIA RIVA TNT2; Driver: NVIDIA
RIVA TNT2; Provider: NVIDIA; Mfg: NVIDIA; Section: nv4
@ 07:12:00660 : Decorated section name: nv4
Enumerating files D:\Drivers\Video2\inf
@ 07:12:00660 : Opened PNF of "D:\Drivers\Video2\NV3_DISPinf"
@ 07:12:00675 : The file (D:\Drivers\Video2\NV3_DISPinf) is not digitally
signed, ignoring driver date
@ 07:12:00675 : Found PCI\VEN_10DE&DEV_0028 in
D:\Drivers\Video2\NV3_DISPinf; Device: NVIDIA RIVA TNT2; Driver: NVIDIA
RIVA TNT2; Provider: NVIDIA; Mfg: NVIDIA; Section: nv4
@ 07:12:00675 : Decorated section name: nv4
@ 07:12:01706 : Device install function: DIF_SELECTBESTCOMPATDRV
@ 07:12:01706 : Executing class installer
@ 07:12:01894 : Completed class installer
@ 07:12:01894 : Executing default installer
@ 07:12:01894 : Selected driver installs from section nv4 in D:\Drivers\Video1\Nv4_dispinf
@ 07:12:01894 : Changed class GUID of device to {4D36E968-E325-11CE-BFC1-08002BE10318}
@ 07:12:01894 : Set selected driver
@ 07:12:01894 : Selected best compatible driver
@ 07:12:01894 : Completed default installer
@ 07:12:06565 : Device install function: DIF_ALLOW_INSTALL
@ 07:12:06565 : Executing class installer
@ 07:12:06565 : Completed class installer
@ 07:12:06581 : Device install function:DIF_INSTALLDEVICEFILES
@ 07:12:06581 : Executing class installer
@ 07:12:06581 : Completed class installer
@ 07:12:06581 : Executing default installer
在该示例输出中,安装程序使用 D:\Drivers\Video1\Nv4_dispinf 文件选择设备驱动程序并加以安装,因为安装程序发现该设备驱动程序是最适合的匹配项。
若要轻易找到已安装的设备及安装该设备时使用的 inf 文件,请在 Windows 记事本中打开 %Systemroot%\Setupapilog 文件,对即插即用安装的设备搜索 DIF_SelectBestCompatDrv,而对手动安装的设备搜索 DIF_SelectDevice。
以上就是关于windows驱动和linux驱动开发有什么不同对于刚刚接触的人,哪个开发容易些哪个更使用呢全部的内容,包括:windows驱动和linux驱动开发有什么不同对于刚刚接触的人,哪个开发容易些哪个更使用呢、Windows驱动如何用INF文件安装、Windows 如何在安装过程中确定最适合的设备驱动程序进行安装等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)