This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] EK-TM4C1294XL:TI-RTOS USB 串行 DFU 项目中的 USB 驱动程序是否在内核或用户模式下运行?

Guru**** 2618835 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/785975/ek-tm4c1294xl-do-the-usb-drivers-from-the-ti-rtos-usb-serial-dfu-project-run-in-kernel-or-user-mode

器件型号:EK-TM4C1294XL

您好!

我正在使用 TI-RTOS USB 串行 DFU 项目随附的无符号 USB 驱动程序、请参阅以下代码。

文件枚举了两个器件、一个运行时 USB DFU 器件和一个 CDC 串行器件。

我已经尝试找出驱动程序是在内核模式还是用户模式下运行。

如果我没有记错、当使用.sys 文件时(例如 Winusb.sys 和 usbser.sys)、它们以内核模式运行。

另一方面、驱动程序说明显示

[...] 因此、该文件所做的就是确保安装 DFU 驱动程序和 WinUSB 子系统、以支持从 DFU 运行时模式切换到"实际" DFU 模式、从而为下载和上传操作做好准备。

由于我需要购买一个证书才能签署 Windows 10的驱动程序、我需要知道我是否需要购买扩展验证证书(内核和用户模式)、或者只需要一个常规证书(仅用户模式)即可。

我尝试在 Windows 硬件开发中心找到答案 、但这让我很困惑。

是否有人可以专门或更好地帮助我解决这些驱动程序、如何在只有.inf 文件可用时识别驱动程序是否在内核或用户模式下运行? 我们不胜感激。

完整的未修改驱动程序文件供参考:

;----------------------------------------------------------------
;
; TivaWare USB DFU 运行时设备驱动程序安装程序
;
;此 INF 文件支持的复合设备包含一个带有的 HID 鼠标
;一个设备固件升级运行时接口(基本而言,只是一个存根
;告诉主机设备支持 DFU)。 由于 HID 受支持
;Windows 本身就支持,因此此处不需要 HID 特定部分。
因此,该文件所做的就是确保
安装 DFU 驱动程序和 WinUSB 子系统;以支持从 DFU 运行时模式切换到“实际”DFU
;模式,为下载和上载操作做好准备。
;
;此设备在接口1上提供 DFU,并在
;运行时模式下发布 PID 0x0A。 当它被切换至 DFU 模式(由 BOOT_USB
;引导加载程序实现)时、器件会重新枚举并发布 PID 0xFF。 此
;在 Windows 中被视为不同的设备,需要第二个 INF 文件
来支持它。 此 INF 文件是 boot_usb.inf,它安装的
文件与此文件完全相同。
;;--------------
------------------------------------------------

;注:当您为自己的设备自定义此 INF 时,请创建一个新的类
;名称(Class)和一个新的 GUID (ClassGuid)。 可以使用
Windows Visual Studio 或 Windows SDK 中的; guidgen 工具创建 GUID。

[版本]
签名="$Windows NT$"
类= USBLibDFURuntimeDeviceClass
ClassGuid={0D42186B-31A8-4800-B875-1A5525A407B9}
提供程序=%MFGNAME%
DriverVerVerVer=12/15/2015.21.71

;=== 制造商/模型部分===========

[制造商]
%MFGNAME%=USBLibDFUDevice_WinUSB、NTx86、NTamd64

;注:将以下两个部分中的 VID 和 PID 替换为
;器件的正确值。

[USBLibDFUDevice_WinUSB.NTx86]
%description%=DFU_Install、USB\VID_1CBE&PID_0102&MI_02

[USBLibDFUDevice_WinUSB.NTamd64]
%description%=DFU_Install、USB\VID_1CBE&PID_0102&MI_02

;================================== 安装===========================

[ClassInstall32]
AddRe=AddReg 类安装

[AddReg 类安装]
HKR、、、、"%DeviceClassDisplayName%"
HKR、图标、-1

[DFU_Install.NTx86]
include=winusb.in










winusb.in



winusb.inf need=WINUSB.NT CopyFiles=System32\DisplayServiceFiles [DFU_Install.NT64] Includ=winusb.in
、AddU=Win0X64=WinServiceFiles=WinService_W64=WCD2=WinName=Win0X64_WCD_W0X64]\WCD=WinServiceFiles=WinName=WinName=WinService_W64_WCD2=WinName=WinService_W64_W0X64_WCD=W0X64_WCD=W0X64_WCD=W0X64_WCD_W0X64_WCD=WinServiceFiles=WinName=WinService_W0XT.W0XT.W64_W


=%WinUSB_SvcDesc%
ServiceType = 1
StartType = 3


















GUID Control = 1 ServiceBinary =%12%\WinUSB.sys [DFU_Install.NTX8.WDF] KmdfService=WINUSB、WinDFU_Install [DFU_Install.NTamd64.WDF] KmdfService=ErrorWINUSB、WinDFU_Install [WinDFU_Install] KNTfLibraryReg [DFU=Addamd64.WDFU]安装
下列设备:[ADDF.Flash =ErrorS=ErrorS=Addrg_U=Addrg.U=Addrg.U=Addrg.U=Addrg.U=Addrg.U=Addrg.U=Addrg.U=Addrg.U=Addrg.U=Addrg.U=Addrg=Addrg.U= 如果您希望您的设备为
;可通过这些工具访问,请不要更改它。

[DEV_AddReg ]
HKR、DeviceInterfaceGUID、0x10000、"{D17C772B-AF45-4041-9979-AFE96BF6398}"

[DFU_Install.NTx86.Coinstallers]
AddReg =Codes_Installations_CopyReg
Files=32、

NTamddllf1.000dll_Installerlib_DPWM064_DPWM064_DPWM0961.dll\F
















、DPMUSMUSCLA 安装程序文件[DPWM064_DPWM064_DPWM0961.dll\F、DPWM064_DPMUSCL\F 安装程序安装程序安装程序、DPWM064_DP064_DPMUSTRF、DPMUSMUSTRF 安装程序文件[DPMUSCL_DPMUSCL_DP0961.DPMUSCL_DP064_A、DPMUSCL064_DP064_DPMUSTRF、DPMUSTRF、DPMUSMUSMUS\F、DPMUSCL0961.DPMUS\F 安装程序安装程序安装程序

















源媒体部分=================================

[SourceDisksNames ]
1 =%disk_name%、、、\i386
2 =%disk_name%、、、\mdAMD64

[SourceDisksFiles.x86]
WinUSBCoInstaller2.dll=1
WdfCoInstallerInstall9.md=1
lmusbdll=1 lmusbdll=1
lmusbfu.dll=1.dllfu=1.md2



= lfu=lfu=1.md2 = lfu=ld64=lfu.dlfu=1.dlfu=1.dlf1.dlf=lf=1.dlf=1.dlf1.dlib= lf1.dlf1.dlf=d64=ld=ldf1.dlf1.dlf1.dlf=ld=ld=ld=ldf1.md2











字符串================================

;注:请根据需要更换这些设备以描述您的设备。

[字符串]
MFGNAME="Texas Instruments Inc."
Description="TivaWare 器件固件升级(运行时模式)"
WinUSB_SvcDesc="WinUSB"
disk_name="TivaWare 安装磁盘"
DeviceClassDisplayName="TivaWare 器件固件升级(运行时模式)"

;
; TivaWare USB CDC (串行)驱动程序安装文件。
;
[Version]
Signature ="$Windows NT$"
ClassGuid=
{4D36E978-E325-11CE-BFC1-08002BE10318}
Provider =%MFGNAME%
LayoutFile= layout.inf
DriverVerVerVerID=12/14/2015.1.1.71

[制造商]
%MFGNAME%%










安装驱动
mdmcpq.in






程序 UCD064\NDP0\NDP064\NDP0\DP\VR_DP064\N0DP0\DP\VR_DP064\DP099\DP\DP\DP\DPOR_DPOR.DP099\DP\DPOR_DPOR_DP064\DPOR.DP\DP\DP\W032\DP\DP\DP\DP\DP\DPOR_DPOR_DPOR_DPOR_DPOR.DP\N 1












="Texas Instruments、Inc."
描述="具有 DFU 的 TivaWare USB 串行端口"
服务 ="TivaWare USB CDC 串行端口"

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Tom、

    首先、自从您提到使用无符号 USB 驱动程序以来、您是否尝试从 TivaWare 安装补丁驱动程序? 这可能会解决注册问题: software-dl.ti.com/.../SW-TM4C-2.1.4.178.PATCH-1.0.zip

    关于内核与用户模式证书、我不确定这个想法、因为这实际上不是我们作为器件专家研究过的主题。 我们的示例使用 WinUSB 通用 USB 驱动程序、便于客户评估。 您不必使用该 USB 驱动程序、根据您的要求、它甚至可能不足以满足您的要求。

    我尝试搜索内核与用户模式的详细信息、但自己发现为空。 我不是很确定如何查找、因为我并不是很熟悉 Windows 驱动程序的工作方式、这不是我之前必须要组合在一起的一个部分。

    也许安装带符号的驱动程序会在这方面为您提供一些想法、但当我查看为 COM 端口安装的驱动程序时、我没有看到任何迹象表明它是内核驱动程序还是用户模式驱动程序。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ralph、

    感谢您的回复。

    出于我们的目的、该驱动程序似乎可以正常工作(我已经在驱动程序上用测试证书签名的情况下进行了多次测试)。

    我已经安装了补丁驱动程序、但第一个驱动程序除了不同的 PID 之外、与"boot_demo_usb.inf"文件:

    在描述行中

    %description%=DFU_Install、USB\VID_1CBE&PID_0102&MI_02 

    最后一部分已更改。 在 "boot_demo_usb.inf"中、它以"&MI_01"结尾。 我不明白这意味着什么、也没有在线找到答案、因此我不知道要使 TI-RTOS DFU 项目与该驱动程序配合使用、必须更改什么。 我已修改项目中的 PID 以使用 来自"boot_demo_usb.inf"驱动程序"的 PID、但驱动程序更新(从设备管理器中的未知设备开始)失败、因为它"找不到驱动程序"。

    由于"MI_01"与"MI_02"是这两个文件之间的唯一区别、如果我可以更改项目以反映这一点、我的问题也会得到解决。

    为完整起见、这是修补驱动程序"boot_demo_usb.inf":中的一行

    %USB\USBLibDFUDevice.DeviceDesc%=DFU_Install、USB\VID_1CBE&PID_000A&MI_01 

    这是从"usb_serial_dfu.inf"开始的一行

    %description%=DFU_Install、USB\VID_1CBE&PID_0102&MI_02 

    "&MI_0x"-部分是什么意思、我可以在项目中更改它的什么地方?

    提前感谢您、
    此致、
    Tom van Rijn

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Tom、

    我认为可以帮助解决这些问题。

    字符串"MI_"后面的整数是接口编号的2位十六进制表示、从接口描述符的 bInterfaceNumber 字段中提取。

    至于在项目上对其进行修改、我不记得我曾对其进行过调整的情况。 它在 driverlib 中设置、默认情况下启动为0、复合器件的计数会增加到更高。 我希望需要在驱动器端而不是在代码中进行更改、除非这是具有3个接口的驱动器的情况、但即使这样、正确初始化 TivaWare 也会识别出接口编号需要递增。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Ralph、

    好的、感谢您的见解。

    遗憾的是、如果对驱动程序进行了任何更改、则签名将不再有效、我将返回到方块1、因为这将要求我对其进行签名、因此知道它是内核驱动程序还是用户模式驱动程序。

    我将再次查看 driverlib 文档和项目、也许我会找到一个解决方案。
    如果我这样做、我将在有人出现类似问题时报告。

    感谢您参与 TI-RTOS USB 串行 DFU 项目。 我刚开始使用 Tiva C (和 USB 驱动程序)、学到了很多!

    此致、
    Tom van Rijn
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Tom、

    您应该能够编辑 USB 库、通过硬编码强制描述符成为您所需的内容、并验证这是否能够解决问题开始、然后在您知道它可以工作时进一步深入研究更好的解决方案。

    请注意、如果更改了 usblib、则需要将 usblib 项目导入 CCS 并重新编译、以便它使用更改更新.lib 文件。

    现在我将继续并关闭此主题、但如果您对此主题有任何其他问题、请随时再次在此处发表、我将看到它。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ralph、

    好的,我会这样做。
    感谢您的建议。

    此致、
    Tom van Rijn