是否有 Linux 等效的 SetupDiGetClassDevs 函数

Posted

技术标签:

【中文标题】是否有 Linux 等效的 SetupDiGetClassDevs 函数【英文标题】:Is there a Linux equivalent of SetupDiGetClassDevs function 【发布时间】:2019-02-18 11:05:10 【问题描述】:

我编写了一个 c++ 程序,使用 HDEVINFO 对象和 SetupDiGetClassDevs 函数在 Windows 中搜索 PCI 设备。

这些功能是否有 Linux 等价物? 我将使用 Kubuntu,因此特定于 KDE 和/或特定于 Ubuntu 的解决方案都可以。 一个示例代码将更加感激;-)

谢谢

【问题讨论】:

在谷歌上,我找到了这个链接:“webcache.googleusercontent.com/…”。 【参考方案1】:

您可以通过遍历 /sys/devices/pci* 目录获得几乎所有有关已连接 PCI 设备的信息。

例如,

cat /sys/devices/pci0000:00/0000:00:00.0/subsystem_vendor

将返回该设备的供应商 ID。

总的来说,我建议查看 /proc 和 /sys 文件系统的内容,这几乎是您可以在用户空间中使用的所有内容。对于一些更有趣的东西,可以考虑编写内核模块(这不是 SO 问题的主题,我建议阅读最新版本的 Linux 设备驱动程序)。

UPD1:是的,这不是一个真正的函数,正如有人肯定会指出的那样,但是读取和写入这些文件似乎并不难,只是与 Windows 相比的方法不同。

UPD2:对于内核模块方法,我建议在谷歌上搜索有关pci_register_driver 函数的信息,以及它附带的所有信息。

UPD3:更重要的是,对于用户空间,通常有一种方法可以直接使用 PCI 设备资源 - 只需打开 /sys/devices/pci0000:00/0000:00:00.0/resourceX,其中 X 是相应 BAR 的数量。只要知道正确的偏移量,这些文件就可以随意读写。

【讨论】:

我在用户空间做所有这些操作 好吧,那么 /sys/devices 提供的东西对你来说应该足够了。

以上是关于是否有 Linux 等效的 SetupDiGetClassDevs 函数的主要内容,如果未能解决你的问题,请参考以下文章

是否有与 Amazon S3 等效的开源软件? [关闭]

IIS 上的 Linux shell 等效项

Windows 证书存储的 Linux 等效项

Windows 等效于 linux cksum 命令

GCC 的调试堆/STL 调试等效项?

是否有与 FontUtilities.getCompositeFontUIResource(Font) 等效的非专有等效项?