是否有 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 函数的主要内容,如果未能解决你的问题,请参考以下文章
是否有与 FontUtilities.getCompositeFontUIResource(Font) 等效的非专有等效项?