问题标签 [pci-bus]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2707 浏览

drivers - 如何在 VxWorks 中配置 PCI-to-PCI 桥接设备?

我正在使用 VxWorks 中的板级支持包 (BSP),它使用 pciAutoConfig() 来配置 PCI 总线。当我将以太网控制器卡添加到总线时,pci 显示例程不显示该卡。

使用总线分析器,我发现以太网适配器实际上由一个 PCI-to-PCI 桥组成,桥后面有两个以太网控制器。BSP 似乎没有正确处理以太网控制器包含的 PCI 到 PCI 桥接器。

我的问题是,我应该查看哪些库和配置来配置 PCI-to-PCI 桥接器?我认为这些调用将进入现有 pciAutoConfig() 调用所在的 sysHwInit() 中。

pciAutoCfgCtl() 有一个 PCI_BRIDGE_PRE_CONFIG_FUNC_SET 参数,它指向一个用户定义的函数来配置总线。这是唯一的方法吗?或者 VxWorks 库中有什么东西可以为我做到这一点?

0 投票
2 回答
3605 浏览

c++ - 如何读取 PCIe 总线上使用的带宽?

我正在开发一个流媒体应用程序,该应用程序在启动时将大量数据推送到显卡。在推送数据时,CPU 做的很少,它闲置在接近于 0% 的使用率。

我想监控哪些机器在推送初始数据时遇到了困难,哪些机器可以应付,以便我可以为我们的客户硬件获得推荐的最低规格。

我发现带有 PCIe 1.1 x16 插槽的 PC 很难将初始数据推送到显卡上。

我的开发 PC 有一个 PCIe 2.0 x16 插槽,它可以毫无问题地处理最初推送到显卡的大量数据。

我需要数字来证明(或反驳)我的观点。

我想要的是能够确定:

显卡在哪个插槽类型?那个槽的速度是多少?Gfx 卡名称 Gfx 卡驱动版本

但最重要的是,PCIe 插槽上的数据流——例如,如果我可以证明 PCIe 总线的数据已达到极限,我可以指出这是瓶颈。

我知道系统内存速度也是一个因素,例如数据正在从 RAM 传输,通过 PCIe 总线传输到显卡,那么有没有办法确定系统内存速度呢?

最后,我使用非托管 C++ 编写代码,因此无法访问 .NET 库。

0 投票
2 回答
3157 浏览

winapi - 确定 PCI 适配器的物理位置

我们有一个可以使用多个 PCI 适配器的 Windows 应用程序。这些适配器都具有与其他硬件或电缆的外部物理连接。我们的软件配置为知道每张卡上的物理连接连接到什么。想象一下支持多种声音输入和输出的音频软件。音频软件配置为知道适配器 1 上的麦克风是主唱,而适配器 2 上的麦克风是吉他。

碰巧的是,该软件通常在带有 ExpressCard 和/或 PC 卡适配器的笔记本电脑上运行。因此,用户可以例行地移除适配器。此外,我们的客户可能拥有比一台笔记本电脑更多的适配器。因此,您可以想象有人在笔记本电脑中安装适配器 A(PC 卡)和 B(ExpressCard)并配置我们的软件。他们现在希望歌手的麦克风连接到 PC 卡适配器,而吉他麦克风连接到 ExpressCard 适配器。然后他们回到办公室,取出适配器,将它们与所有其他适配器放在一起。第二天,当他们使用该软件时,他们会拿起适配器 C(PC 卡)和 D(ExpressCard)。当他们将这些卡插入系统时,我们

如果没有此功能,用户每次更换卡片时都必须重新配置我们的软件,这对用户来说不是特别友好。

有没有办法确定 Windows 中硬件适配器在 PCI 链中的位置?有没有其他方法可以实现这个目标?

我希望这适用于 Windows XP 及更高版本。请注意,我们确实控制硬件驱动程序,因此我们可以在必要时进行更改。

0 投票
1 回答
2351 浏览

pci-bus - 查找并启用 Linux 启动后连接的 PCIe 设备

我们正在开发一个通过 PCIe 连接到 Linux PC 主机的嵌入式系统。现在,在实现和调试阶段,我经常需要对设备进行断电和上电,或者尝试不同的板子。这会导致 Intel PC 上运行的 Linux(Ubuntu 或 Debian)出现问题。

通常,当我需要插入被测设备时,PC 会启动。正如预期的那样,Linux 没有找到该设备,并且软件应用程序无法与之对话。如果我执行“lspci -v”,那么它不会列出我们的设备。我们的应用程序使用 libpci(使用 -lpci 构建的程序)来访问我们设备公开的单个 BAR,然后通过执行 page_remap 的内核模块“mmap”。我们的解决方法是重启 PC,之后设备可见并启用。

我正在寻找一种解决方案,我不必经常(一天中数十次)重新启动 PC。我不能连接设备然后运行一些代码来让 Linux 内核检测并启用我们设备的 BAR 吗?我希望找到一些关于使用 PCI 支持库和示例的文档,但一直没能找到。任何指针表示赞赏。也许我可以在我的代码中执行诸如 pci_enable_device() 或 pci_find_device() 之类的调用?不过我想不通。我可以编写内核模块以及用户代码来使其工作,即,我对是否具有 root 访问权限没有任何限制。

非常感谢您的建议和指点,Guraaf

0 投票
2 回答
2013 浏览

hardware - 使用 PCI 配置空间识别 PCIe 设备

鉴于系统中安装的 PCI 设备列表,我需要识别 PCIe 设备。到目前为止,我一直在对功能列表进行迭代,以查看设备是否具有扩展的 cap 结构(对应于 cap ID 0x10)。而且,如果该设备具有扩展帽结构,那么它肯定是 PCIe 设备。但是,这种方法似乎无法识别某些设备。我想知道是否有人知道更好的方法。

谢谢。

0 投票
1 回答
40 浏览

video-streaming - 是否有任何代码示例说明如何使视频卡不可见?

是否有任何代码示例说明如何使视频卡不可见?据我了解,这应该在内核级别完成。我想做的是以下 - 我有四个使用 PCI-Express x8/x8/x8/x8 的物理 GPU。我可以在 x16/x16 的配置中拥有两张物理卡。我想要做的是以编程方式将四张卡的配置切换到两张卡,然后再使用 x8 到 x16 回到 x8 模式。非常感谢您的帮助。

罗马

0 投票
2 回答
531 浏览

pci - 总线上的PCI设备可以监听其他设备数据吗?

如果我有一条带有 3 个设备的 PCI 总线(不带 PCI-PCI 桥)怎么办:间谍设备、发送方 PCI 设备和接收方设备(例如从 PCI 到 CPU 的桥)。

发送方开始向接收方传输数据。spy-device 的发送器状态为 Z(与总线断开连接)。间谍设备可以监听总线并复制发送方发送的所有数据吗?

更新:我准备购买带有 PCI 适配器的特殊 FPGA 并对其进行编程。

0 投票
1 回答
4543 浏览

c++ - 使用 mmap 在用户区通过 PCI 与 FPGA 通信的 C++ 应用程序

首先,我是 Linux 编程的新手,所以如果这没有意义或者我在吠叫错误的树,请向我指出正确的方向。

我正在尝试在用户空间中编写一个 cpp 应用程序以通过 pci 总线与 FPGA 通信。

到目前为止,我编写的代码枚举目录以/sys/bus/pci/devices检查设备和供应商文件以找到正确的文件。

找到设备后,我知道我需要写入的映射区域以某种方式由资源 [n] 文件表示,但我不确定如何使用它们来读取/写入一些值。

从为另一个操作系统编写的代码中,我知道我想与 PCI 设备的 BAR1 交谈,我(尝试)这样做的方式是使用 mmap(这是正确的方式吗?)。首先我得到一个文件句柄/sys/bus/pci/devices/[device_addr]/resource1with O_RDWR,然后mmap像这样调用:

fd打开的文件描述符在哪里。

我是以正确的方式解决这个问题还是使用更好的功能/调用?我意识到我可以编写一个内核模块来做到这一点,但我宁愿现在还不必进入内核模块编程。

如果它有帮助,我可以将代码粘贴一会儿,但我并不是真的对代码进行批评,只是一些关于最佳方法的指示。

如果我缺少任何细节,请询问。

我使用的是 2.6 Linux 内核,基于 ubuntu 11.04(在 live usb 上运行),硬件基于 x86。

谢谢

更新:在对代码进行更多搜索和反复试验之后,我得到了它的工作。

我遵循的步骤:

  • 识别设备使用/sys/bus/pci/devices/[device]/[vendor|device]
  • 解析/sys/bus/pci/devices/[device]/resource,对于每一行,第一列是映射区域的起始地址,第二列是映射区域的结束地址。我想要BAR1所以第二行有我需要的值。
  • open("/dev/mem", O_RDWR)获取文件描述符 fd
  • mmap如上所述调用,但传入起始地址作为偏移量(最后一个参数)并使用起始地址和结束地址来获取映射区域的大小(第二个参数)。
0 投票
2 回答
289 浏览

pci - 更改 PCI 设备的 IOaddress

我想通过将新的(页面对齐的)地址写入 BAR0/1 来更改 PCI 设备的 IOaddress。当我使用 BIOS 功能执行此操作时,我无法访问新地址的 PCI 设备。

是否还需要做其他事情才能让它发挥作用?我在实模式下使用汇编程序。

0 投票
5 回答
18751 浏览

cpu-architecture - 内存总线和地址总线的区别

有人可以非常简要地指出计算机体系结构中内存总线和地址总线之间的区别吗?另外,当您说内存总线时,是否意味着您指的是数据总线?