问题标签 [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 内核重新运行它的 PCI 初始化代码?
我正在寻找可以从驱动程序、用户空间实用程序或系统调用中进行的内核模式调用,该调用将要求内核查看 PCI 总线并完全重新运行其初始化,或初始化特定的设备。具体来说,我需要 Kernel 识别一个在启动后添加到总线上的设备,然后配置它的地址空间、中断和其他配置参数,最后启用该设备,以便我可以为它加载驱动程序(除非这一切作为驱动程序负载的一部分发生)。
为此,我被困在 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-kernel - Linux 设备驱动程序能否在 device_remove() 函数中等待 DMA 终止?
我为 PCI 设备编写了 Linux 设备驱动程序。该设备执行 DMA 操作。当 DMA 操作运行时程序崩溃时会出现问题。
实际上,当崩溃时,该device_remove()
函数被系统调用(就像close()
被调用一样)。该函数对 PCI 设备使用的内存区域进行清理,正确释放分配的内存。我的意思是它在正常情况下可以正常工作。
但是,如果 DMA 正在运行,当它实际终止时,它将无法执行 DMA 清理,因为它不再有权访问已释放的设备数据。一个简单的解决方案是在 close() 函数中等待。(这是我的理解,但也许DMA函数的最后一部分永远不会执行?)
device_remove()
为 DMA 实际终止设备驱动程序的(aka close()
) 功能而哀号是个好主意吗?有没有其他方法来处理这个问题?
linux - 从用户空间程序访问 PCI 设备
我有一个设备可以通过 pcie 与我的处理器接口。我已经使用现有的 pci 文件操作为其编写了驱动程序。
现在我的问题是如何从用户空间程序访问它?PCI 文件操作不支持 IOCTL,因此与其他字符设备不同,我无法进行 ioctl 调用。我不能使用 pci_config_read_byte 等函数,因为它们适用于内核空间(包含在 linux/pci.h 中)。
pci - 任何 PCI 拓扑中的同一总线上是否可以存在两个相同的设备
根据 PCI 标准,设备是根据供应商 ID、设备 ID 和总线编号来识别的。相同类型的所有设备都具有相同的供应商 ID 和设备 ID。如果我将两个这样的设备放在同一总线上,比如总线 0。PCI 软件子系统将如何区分这两者?
如果这种情况在 PCI 中是不可能的,那么通过 PCI Express Switch 可以做到吗?
sockets - 将套接字代码与 Linux PCI 驱动程序连接
我有两个与 PCI 接口的设备。我也有使用通用套接字代码的两种设备的代码。(这些设备最初是通过 MII/以太网连接的。)
现在,我需要编写一个 PCI 设备驱动程序来在两个设备之间来回传输数据包。
如何访问套接字代码打开的文件描述符?这和访问字符设备文件一样吗?
PCI 驱动程序必须以某种方式从代码中的 read() 和 write() 捕获数据包。
谢谢!
linux-kernel - 我可以在 Linux 中完全禁用 PCI 插槽吗?
像你们中的许多人一样,我喜欢每隔一段时间玩一次游戏。由于我将 Linux 用于我的日常任务(编程、写论文、浏览等),因此我只在玩游戏时利用我在 Windows 中的显卡功能。
最近我注意到我的能源账单变得非常高,我想减少电脑的能源消耗。我的显卡空闲时使用 110 瓦,而低端 Radeon HD5xxx 仅使用 5 瓦。我认为我的电脑每周开机 40 小时,其中只有 3 小时的游戏时间。这意味着我每年浪费 202 千瓦时(!)。
我想我可以只买一个 DVI 分配器和一个低端 Radeon 卡,然后在 Linux 中禁用高端卡的 PCI 插槽。我用谷歌搜索了一下,但我不确定要使用哪个搜索词,所以我没有发现任何有用的东西。
太长了,没看:是否可以使用Linux切断PCI插槽的电源?
x86 - 失去与 FPGA 设备的链接
我正在尝试在 PCIe FPGA 设备的设备驱动程序中调试一些奇怪的问题。设备驱动程序和 FPGA 映像都是在内部开发的。
目标系统是 x86,操作系统是 fedora 9。它有一个 PCIe 卡,FPGA 插入它唯一的 PCIe 插槽。从 EEPROM 引导后加载 FPGA 映像。
驱动程序的编写方式是使用 /sys/bus/pci/devices/0000:02:00.0/ 资源文件(其中 0000:02:00.0 是包含 FPGA 的卡的 PCI 插槽)来配置FPGA。
当系统启动时(或从休眠状态返回时),FPGA 链路接缝丢失,资源文件丢失。当 FPGA 正确启动时,一切正常(资源文件在那里)。当系统进入休眠状态时,FPGA 断电。当它从休眠状态返回时,FPGA 上电,然后开始驱动程序初始化。
我怀疑接下来的事情:
- 固件中的错误 - 与 PCI 插件有关的东西?
- 内核中的错误 - 最不可能,因为可以很好地识别其他 PCI 卡。只有
这张 PCI 卡会出问题
问题是:
- 有没有人遇到过类似的问题?
- 还有什么可能是错的?
- 有关如何调试此问题的任何建议?
编辑
我刚刚发现了这个错误,这与我看到的问题非常相似。
cuda - 带有 PCI 接口的 GPU 上的 nVidia CUDA
您是否有在使用 PCI 接口(而不是 PCIe)的启用 GPU 上使用 CUDA 的经验?它有效吗?
hardware - 自定义硬件导致 Linux 启动在 PC 上的 initrd 后挂起
我们创建了一些使用 PCIe 2.0 的定制硬件。此硬件适用于装有 CentOS Linux 5.4 的 HP DL360 G7 服务器。因此,在 HP 服务器上,Linux 能够很好地冷启动、识别卡并与我们的驱动程序交互。但是,当我们尝试将卡插入普通戴尔 T3500 PC 时,Linux 无法启动。它在 initrd 之后挂起,没有崩溃、调试或错误消息。所以我的问题是,有哪些工具或设置可以帮助调试这个问题?我们想知道为什么启动过程无法通过 initrd。
vxworks - 在 VxWorks 653 中如何在 PCI 设备上读/写内存?
我正在使用 VxWorks 653,我的目标是 wrSbc7457 Power PC。
我的 wrSbc7457 上有一张夹层卡,我正在尝试写入/读取该夹层卡上的内存。
对于那些熟悉 VxWorks 的人,我的usrAppInit()
ModuleOS 的功能中有以下内容:
加载操作系统启动映像时,我的目标输出以下内容:
我的问题是:如何将夹层卡的内存映射到主机的地址空间,然后如何写入/读取夹层卡上的内存?