问题标签 [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.
pci - 如何确定字符串是否为有效的 PCI 地址?
PCI 地址遵循BDF 表示法
确定字符串是否包含有效 PCI 地址的好方法是什么?任何编程语言都可以。
c - 内核驱动程序中的 PCI 错误处理程序从未调用,即使设备已关闭
我正在为自定义 PCIe 设备编写 linux 内核设备驱动程序。用户空间应用程序映射到该设备并频繁访问其内存(读取和写入)。PCIe 设备由外部电源驱动,在运行期间可能会关闭。
每当设备重置时,我的用户应用程序的所有内存读取都会返回0xFFFFFFFF
。我想尽快在内核驱动中检测到设备重置,所以我error_detected
根据https://www.kernel.org/doc/html/latest/PCI/pci-error-recovery.html实现了一个回调函数。
但是,mydevice_error_detected
在设备重置期间永远不会调用,即使用户空间应用程序不断尝试不成功地读取设备内存(并获得0xFFFFFFFF
结果)。
此外,lspci
在 PCI 重新扫描后仍会列出该设备,即使它已关闭:
01:00.0 Unassigned class [ff00]: MyVendorId Device 5a00 (rev ff)
唯一的区别是rev ff
当设备处于关闭状态时,“”出现在行尾。否则lspci
返回
01:00.0 Unassigned class [ff00]: MyVendorId Device 5a00
我很确定设备已完全关闭,因为在重置期间无法访问配置空间。我希望内核在对设备的第一个内存读取请求失败/超时时调用错误检测回调。我的假设正确吗?
linux - PCI 驱动程序不会在桥后分配内存
我在总线 08:01 后面的总线 PCI 09 上有设备,如下所示:
我在总线 09 上的设备关闭并重新启动 CPU 后,我打开总线 09 上的设备。所以,我重新扫描 PCI 总线 0000:08:01.0。但它没有找到我的设备。
巴士 08:01 重启后:
我注意到没有像这样的“桥后可预取内存”字段:
当我在重新启动前打开设备时,CPU 只能在总线 09 中找到设备。重启后CPU有什么办法可以在PCI总线上找到设备?或者,当 CPU 启动时,如何在没有设备的情况下在总线 0000:08:01.0 的桥后分配内存?
linux-kernel - 如何访问 PCI 打印卡的 I/O 位?
以前在我的 PC 的 P4 主板上,有一个带有 DB-25 连接器的集成并行打印机端口。这些 I/O 引脚非常便于与外部数字设备通信。我可以使用这些 I/O 引脚在 Linux 下通过我的 C 程序控制我的外部硬件,因为:
我知道 0x378 或 0x278 上的 I/O 映射,并且我使用该ioperm(0x378,2,1)
函数授予在 Linux 下直接访问的权限。outb(data, 0x378)
之后,我可以使用,inb(0x378+1)
函数(使用 #include <sys/io.h> )进行简单的读写操作。(我让它以 root 权限运行,或者我使用了 setuid 权限)。
但现在我有一个更新的主板 GA-870A-USB3,没有任何并行端口。我买的并行PCI卡似乎在图片上。由于主板的关系,我不得不选择PCI接口。(我认为使用ISA总线我不会有任何问题,但今天主板上没有ISA总线。)
我能否以与上述相同的方式从我的 C 程序在 Linux 下访问此 PCI 打印机卡上的 DB-25 引脚,或者如何使用此卡的 I/O 引脚?(优选的比特变化速度约为 0.5-1 毫秒。这个比特率很容易在默认并行端口 (0x378) 上使用旧 P4 主板执行。虽然我的硬件通信协议对比特率不敏感。 )
续。在 10 月 5 日。
我插拔了上面的 PCI I/O 卡,我可以意识到这条线
03:06.0 Serial controller: TXIC Device 5073 (rev 10)
与我的卡有关。
这是一个详细的列表:
这张I/O卡只有一条记录,但是这张卡占用2个串口和1个并口,这正常吗?
我可以从编写设备驱动程序中看到一些漂亮的文档:
https ://lwn.net/Kernel/LDD3/
https://www.kernel.org/doc/html/latest/PCI/pci.html#
但我希望我可以使用我的 C prg 从用户上下文访问我的 I/O 卡。我已经安装了 PCI Utilities 包:pciutils-3.7.0.tar.gz
来自:https
://git.kernel.org/pub/scm/utils/pciutils/pciutils.git
我已经使用 root 用户从用户上下文运行了 example.c,我可以获得类似的列表作为lspci的。
访问 I/O 卡是一个正确的计划吗?
我认为这是我的主要问题:我怎么知道我的 PCI 卡的 256 字节的含义? 我认为它们为两个串行和一个并行接口提供控制/状态和数据传输。
linux - pci_rescan_bus() 不会在 Linux 中重新扫描 PCI 总线
我正在尝试借助pci_rescan_bus()
内核功能重新扫描我自己的内核驱动程序中的 PCI 总线,但我看不到它的功能相同。
如果我尝试通过运行以下命令从用户空间执行相同操作,我会看到重新扫描发生:
我正在尝试重新初始化位于 PCI 总线上的以太网端口。下面是我现在使用的代码:
我从函数调用中得到2
一个返回值。pci_rescan_bus()
我在这里做错什么了吗?
pci-e - 为什么在pcie中有从并行到串行总线的转变?
pci 有并行总线,pcie 有串行总线。为什么并行总线不能用于pcie但使用串行总线?为什么要转移到pcie的串行总线?
pci - PCIe 本地时钟中的准确性意味着什么?
在物理层逻辑块的接收端,本地时钟精确到 +/- 300 ppm。请问有人能详细解释一下吗?!
c - 根据标准PCI总线扫描但结果异常
这是扫码
这是真正的 pci 设备信息(由 qemu 监视器提供)
这是 PCI bus0 dev3 func0 手动扫描的结果
out_port32 是对outl 指令的封装 in_port32 是一样的
发现一件事,每次读进去只能读一个WORD(有用吗?)
但是按照PCI标准,这样的代码实现是没有问题的
我也使用了 OSDEV Wiki 的示例代码 问题依然存在 https://wiki.osdev.org/PCI
如果对其他代码有任何疑问,可以访问github:LithiumOS-Team Lithium-OS
感谢您的任何帮助
pci - 32 位操作系统上的 64 位 PCI BAR - 可能吗?
所以我知道可以在 64 位操作系统上访问 32 位 PCI BAR(基地址寄存器)(这个链接提供了一些关于它的信息,我自己已经测试过了)(假设它是一个 Linux 操作系统) 但是 64 位 PCI BAR(基地址寄存器)可以与 32 位操作系统一起使用吗?
如果有人可以指出任何文档或他们的实际实验经验,那就太好了。
请随时询问有关查询的任何说明。
qemu - 如何从另一台设备访问 pci 设备
我正在 qemu 中创建新的 PCI 设备,它是部分 DMA 和部分 NVMe 控制器。
我需要从我的新设备中获取 NVMe 设备的物理地址以使用
dma_memory_read(...)
是否有获取新设备地址的功能?
没有物理地址我可以使用其他功能吗?
还有另一种方法可以通过指针吗?