c语言获取PCI信息,获取PCI总线上任何配置头信息

这篇博客详细介绍了如何使用C语言获取PCI总线上的配置信息,包括PCI配置空间结构、不同类型的配置头以及如何构造配置地址。作者强调了在驱动层开启I/O位图位的重要性,并提供了DisplayPciCommonConfig函数的代码示例。
摘要由CSDN通过智能技术生成

原创来自于《windows驱动开发技术详解》。PCI由设备存储信息,I/O地址空间和接下来要着重显示的配置空间。前两者可以通过配置空间的Base Address Register[]获取。(之后的博文都采用WDM分层驱动结构,如果之后学习了WDF结构,那全部改用最新的驱动结构,这样可以让驱动在 win7或更高系统上运行。)

书上用的是传到驱动层,然后在操作端口,获取的数据在应用层显示。不过这种方法不是很喜欢,比较喜欢在驱动层开启I/O位图位,然后让应用层拥有端口操作权限。所以,在看本博文之前,请先熟悉之前的关于在应用层开启端口操作权限的相关函数讲解的博文,写好一个驱动,能开启端口读取权限。然后再继续阅读本文。

以下是类型0的PCI配置结构:

如果看不懂,那需要回去复习数据结构基础哦。这个图很简单,总共256个字节。自己可以写一个结构去接受这个数据,但是书上给了现成的,我也就偷偷懒,注释了1一个重要的地方(40h-FFh)。下面来看看书上结构的巧妙之处。下面三个常量,便是3种类型中基地址数组大小。(下面结构是一起的,只是分了几张图发,方便讲解)

类型0配置头不同的地方

类型1配置头不同的地方

类型2配置头的不同

这里充分说明union联合声明的好用。

书上定义了一个_PCI_SLOT_NUMBER结构位结构,但是没定义完,还要自己进行位操作。为了方便,我直接把这个结构完善了,每次填写就可以了。[page]

这个定义来自于以下结构图

当然,如果不喜欢定义结构,那么得定义一个宏如下

#define CONFIG_ADDRESS(f, Bu

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值