访问 PCI 配置空间中寄存器的正确方法

2024-01-04

当您需要访问 PCI 配置空间中的寄存器时,是否只需使用内置 BIOS 函数将 DWORD 读/写到配置空间中?

例如,如果我尝试使用位于 B0:D31:F1 上的 IDE 控制器,我是否可以使用该 BDF 作为 BIOS 功能的参数来继续读/写配置寄存器?因此,如果我想获取供应商 ID,我会读取给定 BDF 中的第一个 DWORD 吗?

或者我离基地太远了?

EDIT:

在 PCI BIOS 规范中,我一直在研究用于在配置空间中读写字的 BIOS 函数的定义。我相信这意味着我可以在配置空间内的各种偏移处写入寄存器。我想我的问题是,这是在此级别访问这些寄存器的正确方法吗?


读完 PCI 规范后,我只需要通过给定的中断向量(1Ah)调用 PCI BIOS 函数即可。然而,这由于必须事先进行 PCI 配置而变得复杂。

PCI配置空间似乎不使用显式地址进行访问,而是使用BIOS函数调用。

编辑:实际上,BIOS 的功能比我知道的要多得多。我所要做的就是枚举 PCI 总线,直到找到 IDE 控制器的设备和供应商 ID。唯一需要的组件是输入/输出端口包装器。


pci_dev_t dev = { 0xffffffff, 0xffffffff, 0xffffffff };

for ( bus = 0; bus < 0xffff; ++bus ) {
  for ( slot = 0; slot < 0xffff; ++slot ) {
    for ( func = 0; func < 0xff; ++func ) {
      uint16_t dev_id  = _pci_read_config_data( bus, slot, func, 0x00, PCI_READ_CONFIG_WORD );
      uint16_t vend_id = _pci_read_config_data( bus, slot, func, 0x02, PCI_READ_CONFIG_WORD );

      if ((vendor == vend_id) && (device == dev_id)) {
        dev.bus      = bus;
        dev.device   = slot;
        dev.function = func;

        return dev;
      }
    }
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

访问 PCI 配置空间中寄存器的正确方法 的相关文章

  • BIOS设置图解教程

    BIOS设置图解教程 文章来源 xff1a 小小菜园 作者 xff1a cjm BIOS 基本输入 输出系统 是被固化在计算机CMOS RAM芯片中的一组程序 xff0c 为计算机提供最初的 最直接的硬件控制 BIOS主要有两类 AWARD
  • 【Linux运维】ACPI BIOS Error问题解决

    今天帮朋友装个ubuntu系统 xff0c 遇到一个问题记录一下 报错与现象 xff1a ACPI BIOS Error 电脑花屏 解决方法 xff1a 插入启动盘 xff0c 当进入引导界面后 xff0c 键盘输入 e xff0c 编辑L
  • 联想G480 win10系统的电脑开启虚拟机bios设置

    启动虚拟机时不成功 要求开启bios设置 在网上搜了很多经验 又说开机时按F1键的 又说F2键的 还有F12的 我开机试了无数次就不能打开BIOS设置 联想电脑win10系统不靠按键还有其他的办法吗 当然有 1 打开设置 2 点立即重启之后
  • 为什么我在 Windows SDK 中找不到 cfgmgr32.lib?

    我正在尝试使用配置管理器 API 例如CM Get Device ID 文档说要链接到cfgmgr32 lib 但是 当我这样做时 我从链接器收到一条错误消息 错误 1 错误 LNK1104 无法打开文件 cfgmgr32 lib 我找不到
  • 两个 PCI 设备之间直接通信

    我有一个 NIC 卡和一个 HDD 它们都连接在 Linux 机器的 PCIe 插槽上 理想情况下 我希望将传入数据包传输到 HDD 而不涉及 CPU 或最少涉及 CPU 是否可以像这样沿着 PCI 总线建立直接通信 有谁知道要阅读什么内容
  • 是否可以从 BIOS 中的程序调用硬盘上的 Windows 库?

    我正在尝试编写一个程序 该程序将成为 BIOS 选项 开机自检后 我希望应用程序有一个漂亮的 GUI 而不是基于文本 这有多种原因 本地化就是其中之一 我的问题是我们受到可以刷新到 BIOS 的应用程序大小的限制 是否可以使用MASM32
  • 我的 BIOS 设置中没有启用 Hyper-V 的选项

    我是 Windows Phone 8 应用程序开发新手 我安装了SDK 8 0 当我运行应用程序时 它显示一条错误 告诉我启用 Hyper V 在搜索过程中我发现这个 MSDN 文档BIOS 中有解决方案 但是当进入我的BIOS设置时 却没
  • 我希望能够通过网络从 BIOS 提取错误日志

    我希望能够通过网络从 BIOS 提取错误日志 查看 MSDN 中的 Win32 BIOS 我没有看到任何定义错误日志的内容 很乐意在 C 中使用 WMI 来完成此操作 但我愿意接受建议 是否可以 Win32 BIOS 没有包含 BIOS 错
  • 安装适用于 Android 的 ADB 接口驱动程序

    我尝试通过设备管理器安装 将手机连接到笔记本电脑后 我在设备管理器的 其他设备 部分中收到 Celkon 内置 GSM 手机 链接 我右键单击并单击 更新驱动程序 和 从指定位置安装 并找到 inf 文件 usb2ser 2kXP inf
  • asm更改cmd背景颜色

    我编写了更改文本颜色的部分 但我找不到更改背景颜色的方法 此代码用于 tasm 汇编 model small stack 256 data ent db 0ah 0dh array db 2 4 5 6 db 7 8 9 5 db 1 2
  • 为模拟输入设备编写 Windows 驱动程序

    我的应用程序需要充当虚拟操纵杆 想象一下用鼠标拖动一个正方形并将其转换为模拟操纵杆的输出 并通过网络将一些击键发送到另一台计算机 驱动程序将在其中接收该输入 我只需要支持XP Vista和Win7 也许不用写驱动程序就可以完成 我尝试使用
  • 设备驱动程序代码在哪里执行?内核空间还是用户空间?

    Part1 对于那里的 linux unix 专家 您能帮助我了解设备驱动程序吗 据我了解 驱动程序是一段直接与硬件交互并公开一些 api 来访问设备的代码 我的问题是这段代码在哪里运行 用户空间还是内核空间 我知道在内核空间中执行的代码具
  • 如何将此平板电脑注册到 Ubuntu udev 列表?

    我有一台便宜的 Android 平板电脑 我需要用它来测试上面的应用程序 我使用的是 Ubuntu 所以我首先必须将设备添加到udev list 我连接了平板电脑 但是adb没有看到它 adb devices List of devices
  • 为什么引导加载程序中的字节“0xea 0000 ffff”会导致计算机重新启动?

    我正在研究引导加载程序 发现了这个有趣的组件 Sends us to the end of the memory causing reboot db 0x0ea dw 0x0000 dw 0xffff 通过评论我知道它的作用 将计算机发送到
  • 如何使用java获取BIOS信息?

    请告诉我是否可以使用 java 程序获取 BIOS 设置信息 我使用 Windows 7 作为操作系统 这取决于您要阅读的信息 Java 无法读取 BIOS 但 java 可以查询 WMI google for jWMI 这可能会获取您需要
  • 如何从cdev获取设备

    我正在编写一个内核模块 它将分配一些一致的内存并返回相应的虚拟和物理地址 我正在将模块注册为cdev 分配空间dma alloc coherent 我想使用 mmap 它dma common mmap dma common mmap 需要一
  • VS 2013 多设备混合应用程序无法部署到设备,未找到设备

    我使用新的 VS 2013 Phonegap cordova 模板来创建混合应用程序 It all works fine using emulators and the ripple media emulators but when i c
  • 替换 Android 内核中的触摸屏驱动程序

    我正在为我的定制板调整姜饼内核 我正在尝试更换使用片上 ADC 控制器 三星的 S5PV210 处理器 的电阻式触摸屏 在我的设计中 我需要一个由 eGalaxyTouch 驱动程序支持的电容式控制器 它已连接至 USB 可以从 make
  • 是否有 43 行或更多的标准 BIOS Int 10h 视频模式?

    我正在编写在加载任何操作系统之前以实模式运行的代码 我的程序的一部分涉及将信息转储到视频显示 而标准 80x25 文本模式无法剪切它 许多版本的 Windows 和其他操作系统在显示内核恐慌时似乎可以毫无困难地切换到更大的文本模式 我认为是
  • 如果 WinDbg 附加断点,则驱动程序加载/卸载失败

    我刚刚开始进行驱动程序开发 对于一些加载 卸载和调试的实验 我编写了以下简单的驱动程序 include

随机推荐

  • 在 IE 中测试 console.log 语句[重复]

    这个问题在这里已经有答案了 可能的重复 对于 Internet Explorer 控制台 是未定义的错误 https stackoverflow com questions 3326650 console is undefined erro
  • mod_fcgid 进程和 XCache 生命周期

    我使用 mod fcgid 和 Xcache 3 0 3 PHP 5 4 18 我知道由于 mod fcgid 设计 我无法使用公共共享内存 因此每个 php cgi 进程在其生命周期内都使用自己的缓存 当我打开时top并检查php cgi
  • R:向非 ggplot 对象添加轴标题

    我正在使用 R 编程语言 通常 当我制作绘图时 我使用 ggplot2 库 并且 aes 选项可用于标记 x 轴并添加标题 然而这一次 我制作的图不是 ggplot2 对象 因此不能以相同的方式进行标记 library MASS libra
  • Sequelize 如何比较查询中日期的年份

    我正在尝试进行以下查询 SELECT FROM TABLEA AS A WHERE YEAR A dateField 2016 我如何以续集风格执行上面的查询 TABLEA findAll where Thanks TABLEA findA
  • C# 中的类型推断

    我知道 msdn 可能应该是第一个去的地方 并且会在我在这里获得独家新闻之后 msdn 不会真正提供的技术规范的一部分是我现在要问的 该主题在日常开发过程中究竟有何用处 它与 clr 内的匿名类型是否有任何形状或形式的相关性 它允许做什么
  • 跟踪 Firestore 流量/请求

    为了最大限度地减少不必要的操作 最好查看对服务器的实际请求 使用firebase实时数据库很容易做到 因为它打开了websocket并且可以在chrome开发工具中查看 Firestore 似乎有所不同 目前尚不清楚它使用什么类型的与服务器
  • 表中单元格的条件着色

    我正在尝试创建一个数据表 其单元格根据单元格中的值具有不同的颜色 我可以用这个功能来实现addtable2plot来自plotrix包裹 这addtable2plot函数在已有的绘图上放置一个表格 该解决方案的问题是我不需要绘图 只需要表格
  • Linq except 如何比较结果

    except 如何判断两个值是否相同 我有以下代码 var removes collection Except values comparer ToList var adds values Except collection compare
  • WordPress 的正确文件权限[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • Flex 项目与 Actionscript 项目相比的缺点?

    我最近开始在 FlexBuilder 中制作游戏 该游戏目前是 Flex 项目 与仅使用 Actionscript 相比 使用 Flex 有什么缺点吗 朋友的朋友告诉我 Flex 比 Actionscript 项目慢 我无法在互联网上验证这
  • 从客户端将文件作为参数发送到 REST 服务?

    我的要求是通过一个客户端将文件发送到 REST 服务 该服务将处理该文件 我正在使用 Jersey API 来实现这一点 但查了很多文章 都没有相关的信息如何从客户端传递文件 and REST 服务如何检索文件 如何实现这一目标 我没有使用
  • PHP:将字符串拆分为二维数组

    我有一个包含相当多数据的字符串 我想将数据拆分为二维数组 字符串中的数据由 波形符 代表列 和 冒号 冒号 代表不同的行分隔 示例字符串可以是 London 10 20 cold New York 23 53 hot Madrid 43 1
  • 使用属性作为同一类中方法的默认参数值

    在 Swift 类中 我想使用属性作为同一类的方法的默认参数值 这是我的代码 class animal var niceAnimal Bool var numberOfLegs Int init numberOfLegs Int anima
  • cxf:生成带参数的 jaxb 构造函数

    CXF 中有没有办法生成具有完整构造函数的 JAXB 类 即 以类的成员作为参数 Use the 值构造函数 xjc http java net projects jaxb2 commons pages Value constructor
  • 直接链接到 iOS 7 中的应用商店应用程序

    我有一个免费版本的应用程序 免费应用程序中有完整版本的链接 该链接在 iOS 6 中工作正常 但在 iOS 7 中它显示空白页面 任何帮助表示赞赏 我使用的链接 void getFull self hideAnimated NSString
  • jQuery 中的 class 和 id 有什么区别?

    jQuery 中的 class 和 id 有什么区别 例如 span class lalal span and span span 因为一个可以很好地使用 jQuery 而另一个则不能 谢谢 ID 在页面上应该是唯一的 当您有多个具有相同
  • 选择 Mysql 触发器内变量的值

    好吧 我见过很多类似的问题 但爬过答案并不能让我的触发错误消失 我需要的结果是 每当在数据库表中插入新值时temp pool 如果新地址不等于具有相同地址值的先前地址值 则会触发dev id正如这个NEW dev id将新值插入位置表 这是
  • Asp.net Mvc:为什么浏览器寻找 favicon.ico

    我知道有一个解决方案可以停止 mvc 框架处理 favicon ico 请求 solution https stackoverflow com questions 4624190 mvc does the favicon ico also
  • WPF组合框奇怪的问题

    我将 SortedListbox 绑定到 WPF 组合框 一切都很好 当我选择第一个 仅第一个 项目时 问题发生了 问题是 在选择第一个项目后选择新项目时 SelectedValue 不会更改 假设组合中第一项的 SelectedValue
  • 访问 PCI 配置空间中寄存器的正确方法

    当您需要访问 PCI 配置空间中的寄存器时 是否只需使用内置 BIOS 函数将 DWORD 读 写到配置空间中 例如 如果我尝试使用位于 B0 D31 F1 上的 IDE 控制器 我是否可以使用该 BDF 作为 BIOS 功能的参数来继续读