问题标签 [pci]
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.
linux - 如何在 Linux 中读取扩展的 PCIE 配置空间?
我已经尝试在 /proc/bus/pci 目录下读取用户空间 pci 条目并在驱动程序中调用内核空间 API pci_read_config_word() 。但似乎两者都只能读取pci基本配置空间,偏移量小于0x100。
我想读取的偏移量超过 0x100,谁能告诉我如何在 Linux 中做到这一点?如果在内核空间中完成,告诉我们调用哪个 API 将不胜感激。非常感谢你!
pci - 总线上的PCI设备可以监听其他设备数据吗?
如果我有一条带有 3 个设备的 PCI 总线(不带 PCI-PCI 桥)怎么办:间谍设备、发送方 PCI 设备和接收方设备(例如从 PCI 到 CPU 的桥)。
发送方开始向接收方传输数据。spy-device 的发送器状态为 Z(与总线断开连接)。间谍设备可以监听总线并复制发送方发送的所有数据吗?
更新:我准备购买带有 PCI 适配器的特殊 FPGA 并对其进行编程。
cluster-computing - 使用 pci 互连主板
我有一些旧主板,我想知道是否可以创建一对带有互连线的 pci 头卡并编写一些软件来驱动互连卡以允许其中一个主板访问 cpu 和 ram另一个?我确信这将是一项艰巨的任务,包括为头板编写设备驱动程序,然后编写应用程序以使用互连;也许是一个简单的演示,演示在每个处理器上运行一个线程并使用两组 ram,也许创建一个迷你虚拟机,将 32 位主板上的 2x3gb ram 映射到单个 6gb 地址空间。每个 pci 头卡上可能需要一个微控制器来充当转换器。
鉴于主板几乎总是有多个 pci 插槽,我想知道这些互连的卡对是否可以用于在某种高速 beowulf 集群中菊花链主板。
我会为每个主板使用debian,并且可能只为每张卡使用atmega128,并使用几条带状电缆进行互连。
pci 基本上只是一个 io 总线,所以我不明白为什么这是不可能的(但这会很困难)。
有没有人有任何建议或以前做过这种事情?
更新:
谢谢马丁。你说的很有道理,而且如果可能的话,它似乎以前已经做过了。
相反,是否可以通过使用“假装”可引导存储设备(硬盘、USB 记忆棒等)引导从属 CPU 来间接控制从属 CPU?只要从属主板认为它是由真实设备上的操作系统操作的,它就应该可以工作。
这可能会扩展到任何接口(sata、ide、usb 等);如果您使用 sata/ide/usb 电缆将两台电脑连接在一起(将 ide 带的一端插入一个主板,另一端插入另一个主板),这将是您需要的所有硬件。关键是在主控计算机上为该接口创建一个新驱动程序,因此主控计算机不会将该接口视为其上有存储设备,而是将其作为从属计算机的虚拟可引导硬盘驱动。这对我来说仍然是一项相当困难的工作,因为我以前从未做过设备驱动程序,但至少我不需要烙铁(这将远远超出我的范围)。我也许可以为 linux 获取一个开源 ide 驱动程序,对其进行研究,然后对其进行处理以创建一些反向行为(而不是从中获取数据,应用程序将数据放到它上面,以便从机像硬盘一样访问)。然后我可以使用基本的 linux 内核并尝试从主计算机上的应用程序启动从计算机(通过屠宰的主 pc ide/sata/usb 设备驱动程序)。为了安全起见,我可能会尝试通过针对主 pc 上不用于其他任何东西的接口来尽可能隔离我的自定义驱动程序(主 pc 可能使用通常未使用 ide 总线的所有 sata 硬盘,所以如果我创建了一个自定义 ide 驱动程序,它可能会减少主机系统的问题 - 因为它是 sata 驱动的)。
有谁知道以前是否曾尝试过这样的事情(从另一台电脑伪造可启动硬盘)?它将在 youtube 上成为一个非常酷的 hackaday,但如果它被证明有希望,它也可以为并行计算增加一个新的维度。
reset - 如何从 FPGA(PCI 板)重置 PC
如何从 PCI 板上的 FPGA 重置 PC(主板)(无需 BIOS 操作) 主题。
opencl - 在多 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++ 的解决方案。
concurrency - 处理器并发 PCI 读取
我正在开发一个使用 LEON2 (SparcV8) 处理器的项目,并且我们有一个连接其他 FPGA 和处理器的 PCI 总线。
在此运行我们有一个使用 RTEMS 并用 C 编写的多任务应用程序。
现在我对处理器和 pci 架构一点也不熟悉,这就是我来找你们寻求启发的原因。
问题是这样的:考虑我们有一个 RTEMS 任务,它在 PCI 总线上执行内存读取。在我们的板上,PCI 访问大约有 2us 长。现在我的一位同事提出了一个问题,如果在 PCI 读取期间 RTEMS 的任务调度程序决定是时候触发另一个任务,并且该任务作业也执行 PCI 读取。他的观点是,在任务切换之前执行的第一次 PCI 读取将被第二次 PCI 读取破坏,第二次 PCI 读取将在执行第一个任务之前由第二个任务执行。
这种情况会发生吗?
我的观点是这个问题不应该发生,因为对我来说,PCI读取就像任何其他内存读取一样,只是我们读取地址0xA020'0000而不是读取例如地址0x4000'0000的本地RAM然后处理器将其转换为 PCI 总线上的地址,并通过总线执行此读取。当然这个读取比本地内存读取要长,但是这个过程在中间不应该是可中断的。我的理解很可能完全错误,在这种情况下,请随时纠正我!
windows - 适用于 Windows CE 和 Windows 桌面的 PCIe 驱动程序
我需要一些关于开发定制 PCIe 驱动程序的建议。驱动程序必须同时支持 Windows CE 6.0 和 Windows Desktop(准备就绪时的 xp、7 和 8)。
我们有很多开发 Windows CE 驱动程序的经验,但没有开发 Windows Desktop 驱动程序的经验。我很确定我们可以开发一个好的、可靠的 Windows CE 驱动程序,但我认为如果没有一些外部帮助,我们将无法为 Windows 桌面做同样的事情。我认为我们有两个选择:
1)使用现有的驱动框架如Jungo WinDriver,它允许我们一次开发驱动并编译到多个平台。这还有一个好处,即大部分开发将在用户空间中进行,因此它应该使开发过程更简单。
2) 获得一些外部帮助来设置一个好的 Windows 桌面驱动程序,所有管道都已完成,我们只需要添加与我们的电路板通信的代码并公开相关的 IOControl。也许将尽可能多的代码移动到用户空间库中。
每个选项的优点和缺点是什么?你会推荐替代方法吗?
c - PCI 输入/输出控制编程
我的工作是开发一个可以使用 pci(不是 express 或 mini) i/o 进行操作的程序。我需要一些参考来开始这个。我正在用 C 语言编程,并为 Linux 和 Windows 平台执行此操作。
pci - 您可以在“实模式”下访问 PCI 卡(32 位)吗?
您可以在“实模式”下访问 PCI 卡(32 位)吗?“实模式”不是 16 位吗?我有一个开发人员声称他只能在实模式下访问硬件。但是PCI是32位...
pci - 更改 PCI 设备的 IOaddress
我想通过将新的(页面对齐的)地址写入 BAR0/1 来更改 PCI 设备的 IOaddress。当我使用 BIOS 功能执行此操作时,我无法访问新地址的 PCI 设备。
是否还需要做其他事情才能让它发挥作用?我在实模式下使用汇编程序。