标签: pci

适用于Windows CE和Windows桌面的PCIe驱动程序

我需要一些建议来开发自定义PCIe驱动程序.驱动程序必须同时支持Windows CE 6.0和Windows桌面(准备就绪时为xp,7和8).

我们有很多开发Windows CE驱动程序的经验,但没有为Windows桌面开发的驱动程序.我很确定我们可以开发一个好的,可靠的Windows CE驱动程序,但我认为如果没有一些外部帮助我们将无法为Windows桌面做同样的事情.我认为我们有两种选择:

1)使用现有的驱动程序框架,例如Jungo WinDriver,它允许我们开发一次驱动程序并编译到多个平台.这也具有以下优点:大部分开发将在用户空间中,因此它应该使开发过程更简单.

2)获得一些外部帮助来设置一个好的Windows桌面驱动程序,其中所有的管道都已完成,我们只需要添加与我们的板通信的代码并公开相关的IOControls.也许尽可能将代码移动到用户空间库中.

每种选择的好处和缺点是什么?你会推荐其他方法吗?

windows driver windows-ce pci

32
推荐指数
1
解决办法
2304
查看次数

如何检测HDMI线是否插入PCMCIA卡/无信号?

我正在尝试编写一个简单的帮助应用程序,用于在没有检测到信号的情况下提示用户打开摄像机,这在这种情况下意味着摄像机关闭和/或HDMI电缆没有插入PCMCIA采集卡.如果信号存在,那么我将启动相应的录制应用程序,在本例中为Wirecast.

我怎么可能在VisualStudio中使用C#创建它?

更新

我认为现在我已经接近了一个基于其中一条建议的建议,建议使用GraphEdit并查看硬件上可用的内容.我能够在捕获设备的属性中找到一个"信号检测"标志,如果摄像机打开/关闭或拔掉HDMI电缆,它会从0变为1,这就是我想要的.

现在,我将如何通过代码访问此标志?我想我真的很亲密,但不知道如何访问cElemspElems从中获取结构caGUID.cElems返回值3,这与屏幕截图中显示的GraphEdit属性窗口中显示的选项卡数相同.pElems每次运行应用程序时都会返回不同的值,所以我不确定该结构中发生了什么.我认为我正在寻找的旗帜位于这些结构中的某个位置.

码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using DirectShowLib;

namespace Test
{
    static class Program
    {
        [STAThread]

        static void Main()
        {
            using (System.Threading.Mutex mutex = new System.Threading.Mutex(false, "Global\\" + appGuid))
            {
                if (!mutex.WaitOne(0, false))
                {
                    return;
                }

                DsDevice[] capDevices = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);

                foreach (var dev in capDevices)
                {
                    if (dev.DevicePath == @"@device:pnp:\\?\pci#ven_1131&dev_7160&subsys_12abf50a&rev_03#6&37bccbbe&0&000800e1#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\{6f814be9-9af6-43cf-9249-c0340100021c}")
                    {
                        IFilterGraph2 m_FilterGraph = (IFilterGraph2)new FilterGraph();

                        IBaseFilter capFilter = null; …
Run Code Online (Sandbox Code Playgroud)

c# directshow graphedit pci

20
推荐指数
2
解决办法
1173
查看次数

了解SMBIOS中的段组,总线,设备和功能编号

目的

我正在尝试以编程方式找出特定PCIe设备连接的物理插槽.前提是我有卡的PCI-ID肯定会占用一个插槽,解决方案是找出哪一个.

请注意,我只对使用PCI Express总线感兴趣,尽管我认为设备识别/枚举过程与旧PCI相同.

尝试

SMBIOS包含可用的主板插槽信息.可以从linux命令行检查这些信息:

$ sudo dmidecode -t slot
# dmidecode 2.11
SMBIOS 2.7 present.

Handle 0x003A, DMI type 9, 17 bytes
System Slot Information
    Designation: PCIEX16_1
    Type: x16 PCI Express x16
    Current Usage: In Use
    Length: Short
    ID: 1
    Characteristics:
        3.3 V is provided
        Opening is shared
        PME signal is supported
    Bus Address: 0000:03:02.0

Handle 0x003B, DMI type 9, 17 bytes
System Slot Information
    Designation: PCIEX16_2
    Type: x8 PCI Express x8
    Current Usage: In Use …
Run Code Online (Sandbox Code Playgroud)

linux bios pci pci-e

19
推荐指数
1
解决办法
2381
查看次数

PCI Express BAR内存映射基本了解

我试图了解PCI Express如何工作,所以我可以编写一个Windows驱动程序,可以读取和写入没有板载内存的自定义PCI Express设备.

据我所知,PCIE配置空间中的基地址寄存器(BAR)保存了PCI Express应响应/允许写入的存储器地址.(这是正确的理解吗?)

我的问题如下:

  • 在讨论PCIE时,与物理地址相比,什么是"总线专用地址"?
  • BAR何时以及如何填充地址?驱动程序是否负责分配内存并将地址写入外设BAR?
  • 将数据从外设传输到主机内存时是否使用DMA?

我很感激你的时间.

最好的祝福,

memory memory-management dma pci pci-e

17
推荐指数
3
解决办法
5万
查看次数

如何在多GPU系统中根据PCI供应商,设备和总线ID将OpenCL设备与特定GPU相匹配?

我希望能够在由PCI ID识别的多GPU系统上将OpenCL设备与系统中的GPU相匹配.

例如,如果我的系统有多个GPU,可能来自不同的供应商,我可以通过枚举PCI总线列出设备.这给了我PCI供应商,设备和总线ID.如果我根据某些选择标准选择其中一个(GPU)PCI设备用于OpenCL计算,我该如何将其与OpenCL设备相匹配?

我可以使用clGetDeviceIDs()在OpenCL中枚举GPU设备,但没有明显的方法可以将OpenCL设备与PCI设备相匹配.OpenCL函数clGetDeviceInfo()提供对PCI供应商ID和设备名称的访问,但不提供对PCI设备或总线ID的访问.我可以尝试将PCI设备名称与OpenCL设备名称匹配,但是您可能有多个相同类型的设备,并且名称并不总是相同.

为什么这有必要?假设我知道程序X在GPU A上运行CUDA或其他东西.我想避免使用GPU A进行OpenCL操作,因此我选择GPU B.然后我需要弄清楚哪个OpenCL设备是GPU A,哪个是GPU B. PCI ID似乎是识别GPU设备的唯一一致且跨平台的方式.

顺便说一下,CUDA API确实为您提供了PCI,总线和插槽ID(CU_DEVICE_ATTRIBUTE_PCI_BUS_ID,CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID),但CUDA仅适用于NVidia设备.

理想情况下,我需要使用C或C++的解决方案.

gpu opencl pci

16
推荐指数
1
解决办法
4912
查看次数

什么是PCIe中的基址寄存器(BAR)?

经过我理解的一些基础文档后,基地址寄存器是可以通过PCIe IP访问的地址空间.PCIe IP既可以在基地址寄存器中传输数据,也可以将接收到的数据写入其中.

我对吗?或遗漏任何东西?

base-address pci pci-e

15
推荐指数
4
解决办法
3万
查看次数

有没有办法要求Linux内核重新运行其PCI初始化代码?

我正在寻找一个内核模式调用,我可以从驱动程序,用户空间实用程序,或系统调用,要求内核查看PCI总线,并完全重新运行其初始化,或初始化特定设备.具体来说,我需要内核来识别启动后添加到总线的设备,然后配置其地址空间,中断和其他配置参数,最后启用设备以便我可以为其加载驱动程序(除非全部作为驱动程序负载的一部分发生).

我为此坚持2.4.x系列内核,目前正在使用2.4.20,但如果重要的话将会转向2.4.37.发行版是一个在ram磁盘上运行的Red Hat 7.3,但我可以添加任何工具来实现这个功能(只要它们与2.4系列配合使用).

如果某些背景有助于澄清我正在尝试做什么:从冷启动,一旦在Linux中我使用GPIO编程FPGA.FPGA的一部分,一旦编程,就实现了一个简单的PCI设备.目前,在对FPGA进行编程之后,我重新启动系统并且Linux在启动后识别设备并为其加载驱动程序.

而不是需要重新启动,我想简单地要求内核在启动期间做任何事情以找到PCI设备(我已经配置了内核来自己找到PCI设备,而不是向BIOS询问该信息,所以BIOS不需要知道这个设备(我希望)).

我相信Linux能够在设备编程后但在重启之前看到设备,因为它scanpci会在我编程后显示设备,因为它会lspci -H 1.我只需要一种方法来进入/proc/pci,配置和启用.

linux linux-device-driver linux-kernel pci

13
推荐指数
2
解决办法
3888
查看次数

有Android PCI卡吗?

有谁知道适合Android开发的PCI卡?

我发现仿真器速度非常慢(Linux 64位,四核,8GB RAM),而且我可以隐藏在桌面上的卡也不错.我知道那里有USB选项,但这意味着我需要更多套件才能找到一个架子......或者适当地安装USB板

想要这样做的原因,原因是:

  1. QEMU ARM仿真对我来说速度非常慢
  2. 手机不允许我测试多个Android版本
  3. 手机不允许我测试多种Android显示分辨率
  4. 对我来说不是问题,但在教室环境中,PC内的PCI卡比多部手机具有明显的优势.

如果没有已经具有Android特定功能的卡,那么我会对带有共享内存的通用A​​RM卡感到满意.图形协处理器将是有用的,但不是必需的.

我很高兴我想要这样做的原因,并乐于编写我需要的任何驱动程序代码.

提前致谢,

Phil Lello

linux android arm android-emulator pci

12
推荐指数
1
解决办法
2829
查看次数

在Linux中,有没有办法找出插入哪个PCI插槽的PCI卡?

在Linux中,有没有办法找出插入哪个PCI插槽的PCI卡?

/ sys/bus/pci/devices /包含许多非卡的设备(网桥,CPU通道等),我无法在设备目录中找到有关插槽卡映射的任何信息.

linux pci sysfs

12
推荐指数
2
解决办法
4万
查看次数

BUG:无法处理内核分页请求

我正在为一个简单的测试设备编写PCI驱动程序.

使用lspci可以正确识别硬件(如您所见,我的驱动程序vab已经注册):

04:02.0 Non-VGA unclassified device: Device bace:55aa
    Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
    Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Latency: 0
    Region 0: Memory at f0000000 (32-bit, prefetchable) [size=16M]
    Kernel driver in use: vabs
Run Code Online (Sandbox Code Playgroud)

驱动程序和PCI子系统的初始化和去新化工作正常.我收到了设备号,udev创建了一个设备文件.

从设备文件中读取时,我收到以下错误消息:

BUG: unable to handle kernel paging request at 00000000f0000000
Run Code Online (Sandbox Code Playgroud)

我成功地在初始化中请求PCI资源.这将为memstart0返回00000000f0000000,这是我的PCI基地址0.

memstart0 = pci_resource_start( pdev, 0 );
memlen = pci_resource_len( pdev, 0 );
if( request_mem_region(memstart0,memlen,pdev->dev.kobj.name)==NULL ) {
    dev_err(&pdev->dev,"Memory address …
Run Code Online (Sandbox Code Playgroud)

linux paging kernel driver pci

11
推荐指数
1
解决办法
2万
查看次数