linux - 是否可以写入在同一个 PCIe 插槽上使用不同 PCIe channel 的多个设备?

标签 linux linux-kernel driver pci-e

我正在编写一个支持多种设备的 Linux 设备驱动程序。我有一个 x8 PCIe 卡,上面有 4 个这样的设备。每个都通过一个 PCIe 交换机运行并获得 2 个 PCIe channel 。有没有办法让司机同时写入多个车道?如果是这样,我该怎么做?我认为这应该是可能的,因为它都在一个 PCIe 插槽上,但我不知道如何从驱动程序中完成。

最佳答案

PCIe 并不像您想象的那样工作。交换机不会将上游 x8 链路划分为多个 x2 链路——它只是将流量从一个链路转发到另一个链路。因此,您将看到到交换机的 x8 链路,然后是从交换机到下游设备的 4 x2 链路。然而,对于不同的交换机和不同的下游设备,同样可能(例如)到处都有 x8 链路,即从根端口到交换机的 x8 链路和从交换机到下游设备的 x8 链路。

但是,在您的情况下,交换机两侧的带宽量相匹配,因此设备竞争有限的带宽量应该没有问题。您的驱动程序可以像存在独立链接一样高效地同时与所有设备通信。

关于linux - 是否可以写入在同一个 PCIe 插槽上使用不同 PCIe channel 的多个设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12414798/

相关文章:

linux - 使用 list_sort 对 Linux/list.h 链表进行排序

linux - 如果字符串中有点,如何查找确切的单词

linux - 什么是 linux irq 域,为什么需要它们?

c++ - 良好的 C++ 驱动程序安装和控制代码

python - 在 Windows 上使用 python 的 uEye 相机

c - 简单的缓存分析 API

linux - $? -ne 0 不工作

linux - `on_rq` 中 `task_struct` 字段的用途是什么?

c - 这段代码中是否存在竞争条件的可能性?

java - 关于从终端编译 Java 程序的 JDBC 驱动程序问题