如何使用PLX提供的官方驱动和SDK发布自己的产品?

摘要:
在我关于Plx9030通信卡驱动程序开发的第一篇博文中,我提到PLX官方网站提供了丰富的9000系列芯片驱动程序文件和SDK开发包。当我们发布产品时,我们可以简单地使用官方的sys文件和SDK作为辅助接口包。设置硬件ID为避免设备冲突,请发布您自己的产品建议以设置硬件ID。硬件ID用于区分其他系统中的设备,并告诉软件与之匹配的设备。9030默认的verdorID=0x10B5,deviceid=0x9030。发布产品时,需要适当设置deviceid。提供者指明inf的作者,通常写下公司的名称。DriverVer描述驱动程序的版本号和日期。

在我的第一篇博文Plx9030通讯卡驱动开发提到,PLX官网提供了丰富的9000系列(9030,9052,9054)芯片的驱动文件(sys)和SDK开发包。我们在发布自己的产品时,简单的话,可以直接用官方sys文件,用SDK做二次接口封装。然而,在利用官方sys文件时,需要注意几个事情,这是PLX公司建议的。

设置硬件ID

为了避免设备冲突,发布自己产品建议设置硬件ID. 硬件ID用来区别与其他系统内的设备,告知软件哪一个是与之匹配的。根据PCI2.0规范,PCI配置空间(256B)的前64个字节含义是标准的,包含verdor id、device id、subsys id、reversion id等。系统上电后,进入POST(power on self test)程序,系统要检测所有的硬件资源,这时由PCI总线驱动(bus driver)询问PCI设备其硬件ID,PnP管理在设备树种建立该PCI设备的设备节点,并且初始化物理设备对象PDO。

 9030默认verdor ID=0x10B5,device id=0x9030.发布自己的产品时,需要恰当的设置device ID。可以在网址查询vender ID 及 device id的使用情况,如果不考虑商业纠纷,就设置一个别人没用过的吧,嘿嘿。

修改inf文件

需要修改inf文件,那打开inf文件,怎么修改呢?在我心中曾经这是一个神秘的文件,一直看不太明白。参看前一篇博文,我豁然开朗。inf文件主要干了三件事:(1)指示该inf文件为哪些设备可用;(2)复制设备驱动安装相关的文件到制定的目录下;(3)增加注册表响应项。先看看inf文件吧,解开她的神秘面纱。

[Version]节通常放在inf开始位置。

Signature指示哪些OS平台可以解析该文件,$Chicago$说明所有的windows系统,$windows NT$说明2000及其以后OS。

Provider说明inf的作者,一般写公司的名字。

Class、ClassGUID说明设备所属类型及GUID号,查看DevGUID.h看。

DriverVer说明驱动程序的版本号及其日期。

[String]节类似于C语言的Macro定义,定义了一些字符串,在inf的其他位置替换。

[SourceDisksNames]定义安装位置。

[SourceDisksFiles]说明所有在设备安装阶段拷贝到系统中的文件列表。

[DestinationsDirs]说明了文件拷贝到系统目录的位置。

[Manufacturer]是树形结构,描述了该inf为哪些设备可用。

执行顺序是这样的:查找[Manufacturer]节支持设备列表——>DDinstall节——>.service节——>.HW节。具体细节还是看前一篇博文

;===========================================================
;
; File    : PlxSdk.inf
;
; Abstract: Windows INF for boards with PLX chips
;
;===========================================================

[Version]
Signature                = $Windows NT$
Provider                 = %Ray-Vision%
Class                    = Unknown
ClassGuid                = {4d36e97e-e325-11ce-bfc1-08002be10318}
DriverVer                = 03/27/2014, 1.0
DriverPackageType        = PlugAndPlay
DriverPackageDisplayName = %PackageName%
CatalogFile              = PlxSdk.cat



[Manufacturer]
%Ray-Vision% = RV.Mfg, NTamd64


;-----------------------------------------------------------
; Device identification for 32-bit Windows
;-----------------------------------------------------------
[RV.Mfg]
"PCI-CAN card 1.0"      = DDInstall_9030, PCIVEN_10b5&DEV_9030&SUBSYS_903010B5


;-----------------------------------------------------------
; Device identification for 64-bit Windows x64
;-----------------------------------------------------------
[RV.Mfg.NTamd64]
"PCI-CAN card 1.0"      = DDInstall_9030, PCIVEN_10b5&DEV_9030&SUBSYS_903010B5


;-----------------------------------------------------------
; CopyFiles section
;
; Flags: 0x00000004 = COPYFLG_NOVERSIONCHECK
;-----------------------------------------------------------

[CopyFiles_9030]
Ray-Vision9030.sys,,,0x00000004
Ray-Vision_PlxApi710.dll,,,0x00000004

;-----------------------------------------------------------
; Driver installation section
;-----------------------------------------------------------
[DDInstall_9030.NT]
AddReg    = AddRegistry_9030
CopyFiles = CopyFiles_9030


;-----------------------------------------------------------
; Device-specific options & registry entries
;
; Security settings are added here to override any class security settings
; imposed on some systems. Refer to "SDDL strings" on MSDN for details.
;
; PLX is setting the default access as follows:
;    GA     -> SY      GENERIC_ALL to OS itself
;    GA     -> BA      GENERIC_ALL to Administrators
;    GRGWGX -> BU      READ/WRITE/EXEC to Built-in User Group
;    GRGWGX -> BG      READ/WRITE/EXEC to Built-in Guest Group
;-----------------------------------------------------------

[DDInstall_9030.NT.HW]
AddReg = AddRegSecurity


[AddRegSecurity]
HKR,,Security,,%PLX_ACCESS_SDDL%


;-----------------------------------------------------------
; AddService section
;-----------------------------------------------------------
[DDInstall_9030.NT.Services]
AddService = Plx9030, 0x00000002, Service_Inst_9030


;-----------------------------------------------------------
; AddRegistry section
;-----------------------------------------------------------

[AddRegistry_9030]


;-----------------------------------------------------------
; Service installation section
;-----------------------------------------------------------
[Service_Inst_9030]
ServiceType    = 1                  ; SERVICE_KERNEL_DRIVER
StartType      = 3                  ; SERVICE_DEMAND_START
ErrorControl   = 0                  ; SERVICE_ERROR_IGNORE
ServiceBinary  = %12%Ray-Vision9030.sys



;-----------------------------------------------------------
; Source file information
;-----------------------------------------------------------

[SourceDisksNames]
1 = %InstallDisk%

[SourceDisksFiles.x86]
Ray-Vision9030.sys = 1,Driveri386
Ray-Vision_PlxApi710.dll = 1,dll

[SourceDisksFiles.amd64]
Ray-Vision9030.sys = 1,Driveramd64
Ray-Vision_PlxApi710.dll = 1,dll

[DestinationDirs]
CopyFiles_ApiDll = 11          ; %WinDir%System32
DefaultDestDir   = 12          ;12    = Drivers Directory

[CopyFiles_ApiDll]
Ray-Vision_PlxApi710.dll

;-----------------------------------------------------------
; String information
;-----------------------------------------------------------

[Strings]
InstallDisk     = "Ray-Vision Installation Disk"
Ray-Vision      = "Ray-Vision Electronics Technology Co.,Ltd"
PLX_ACCESS_SDDL = "D:P(A;;GA;;;SY)(A;;GRGWGX;;;BA)(A;;GRGWGX;;;BU)(A;;GA;;;BG)"
PackageName     = "PCI-CAN card Driver Installation"

inf必须修改的地方是,(1)manufacturer节,修改设备ID,这样在设备安装阶段,设备安装管理器扫描inf时才知道该inf文件是为你的硬件设备服务;(2)在inf文件中,制定了设备驱动sys的文件名字,目录路径,所以如果修改了sys文件名字,需要修改相关的地方。除此之外,你还可以增加一些设备驱动安装时需要拷贝的文件,如dll。

 3.为了避免安装设备驱动文件时,与其他的类似设备文件(sys,dll)名字冲突,建议修改名字。例子中,我将sys文件修改为Ray-Vision9030.sys,dll文件修改为Ray-Vision_PlxApi710.dll。

免责声明:文章转载自《如何使用PLX提供的官方驱动和SDK发布自己的产品?》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇(转载)Linux下DIR,dirent,stat等结构体详解C#中文和UNICODE编码转换下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android 性能优化:使用 Lint 优化代码、去除多余资源

http://blog.csdn.net/u011240877/article/details/54141714 *本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 读完本文你将了解到: 前言 什么是 Lint Lint 工作方式简单介绍 从命令行运行 Lint Android Studio 中使用 Lint 团队中建立代码规范利器提...

Ionic4.x、Cordova Android 检测应用版本号、服务器下载文件以及实现App自动升级、安装

Android App 升级执行流程 1、获取本地版本号2、请求服务器获取服务器版本号 3、本地版本和服务器版本不一致提示升级,弹窗提示用户是否更新 4、用户确定升级,调用文件传输方法下载 apk 文件 5、监听下载进度6、下载完成打开 Apk 进行安装 注意:在 ios 中没法直接下载安装,如果版本不一致直接跳转到 Ios 应用对应的应用市场...

测评:华为最新移动应用/APP测试工具MobileTest

一、目前移动应用/App的测试痛点及可选方案 移动互联网市场进入下半场,同质化竞争激烈,平均获客成本增加。屏幕不适配、闪退、无响应、UI异常等兼容性问题严重影响用户体验,影响用户转化率和用户粘性。如何解决这些问题呢? 方式1:Android模拟器或USB连接真机测试 缺点:无法发现屏幕等硬件差异引起的兼容性问题和性能问题。 方式2:采购主要适配机型做兼容性...

Linux远程目录挂载

原文内容来自于LZ(楼主)的印象笔记,如出现排版异常或图片丢失等问题,可查看当前链接:https://app.yinxiang.com/shard/s17/nl/19391737/ad99ab1d-1040-45e0-aaf6-f5d69c247862 问题: 1、如何使A服务器的某个目录挂载到B服务器的某个目录下,使其达到B服务下的目录文件一旦变更,...

【转】解决:adb 提示adb server version(31) doesn't match this client(41) 解决办法

原文:https://blog.csdn.net/gufenchen/article/details/91383397 一、有时候我们用adb工具去连接安卓设备,或者模拟器的时候,会提示adb server version(31) doesn’t match this client(40)这样的提示。如图 提示的字面意思就是当前client版本40,与s...

JUDE-UML工具软件介绍

  JUDE社区版(不考虑破-解)。 现在Jude改名为Astah了。JUDE已停止发展,Astah是它的替代品。Jude有3个版: Professional版, Community版(免费),Share版。 Astah也有以上的3个版本。Jude改名为Astah后很多功能被限制使用,如Astah-Community版的java代码导入导出功能被拿到了As...