- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否有可能找到与特定中断关联的 MSI 能力结构的位置?具体来说,我需要知道写入时触发该中断的 PCI 地址。
MSI 中断可以很容易地用 pci_alloc_irq_vectors(9) 函数初始化,但这只是提供了 irq 号,没有对能力结构的引用。
作为引用,此文档中描述了功能结构:https://pcisig.com/sites/default/files/specification_documents/msi-x_ecn.pdf
最佳答案
听起来您希望能够自己写入该值并生成中断。这并不是 MSI 的实际工作方式(尽管它可能仍然是可能的)。使用 MSI(或 MSI-X),您基本上是使用一个地址对 PCI 设备进行编程,它应该向该地址生成数据写入,并在要生成中断时向该地址写入一个数据值。
AFAIK 不能保证您可以通过写入地址自行触发相同的中断。尽管如此,通常 MSI 中给出的地址是由中断 Controller (通常作为 PCI 设备本身实现)控制的地址空间内的一个位置,数据值告诉中断 Controller 触发哪个中断。因此,您很可能会将相同的值写入相同的物理内存地址,从而生成相同的中断。
无论如何,假设您知道哪个 PCI 设备正在生成中断,您就可以找到 MSI 功能结构,因此您可以读回它的编程内容。这很简单。
PCI 功能(因设备而异)被组织到设备配置空间内的链表中。列表的开头始终由设备配置空间中偏移量为 0x34 的字节给出。该字节值为您提供了第一个功能数据结构空间内的偏移量。
每个能力都包含一个单字节的能力类型 ID,后跟一个单字节的“下一个能力”指针,然后是特定于能力的变长数据。因此,从偏移量 0x34 开始,您可以跳过这些功能。
要在任何 Linux 机器上查看此操作,您可以运行 lspci
。给它 -v
标志(可以重复它以获得越来越多的细节)给你一个配置空间的注释 View 。您还可以添加 -xxxx
以获得配置空间的完整十六进制转储,因此您可以自行跟踪功能链。 (顺便说一句,您需要使用 sudo
运行它以获取所有功能详细信息。)
内核中有一些接口(interface)可以为您完成这项工作:您可以使用 pci_find_capability
找到您想要的功能的偏移量。当然,您也可以通过从偏移量为 0x34 的 pci_read_config_byte
开始并按照列表查找自己的功能。
找到 MSI 功能后,您便可以根据上面引用的文档解释其内容。您将使用 pci_read_config_byte
(/word
/dword
) 来访问功能数据结构的各个部分。
关于drivers - 从 MSI Capability Structure 读取地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51796021/
我有一个网站,我使用 .swf 文件收集 Flash 屏幕分辨率数据以及来自 JavaScript 的相同数据,并将其发送到我的服务器。 对于某些用户来说,此数据看起来有误 - Flash 分辨率偶尔
我目前正在使用 OSGi 框架,但我对一些对我来说不是 100% 清楚的概念有疑问。我自己在寻找它,但我找不到一个能清楚解释它的体面的答案。 在一个包中,他使用的 header 的 list head
我已经使用下面的方法为 MySQL 数据库配置了用户定义的数据源。 WebSphere 8.5 mysql-cluster-gpl-7.4.6 mysql-connector-java-5.1.9-b
本文通过 Google 翻译 Capabilities – Linux Privilege Escalation - Juggernaut-Sec 这篇文章所产生,本人仅是对机器翻译中部分表达别
我正在研究 Azure 服务总线队列负载平衡。我发现“随着负载的增加,可以添加更多工作进程来从队列中读取数据。”这是否意味着我需要实现代码来自动缩放工作角色,或者服务总线队列具有内置功能来增加或减少工
我很抱歉,也许,再次重复同样的问题,但我迷路了,不知道该去哪里。经过大量谷歌搜索和 RTFMing 我能在方法上找到的所有内容之后,我仍然找不到令我满意的答案。 面向对象的编程对我来说相对较新(在过程
在我的iOS应用中,我创建了一个自定义区域,然后通过CKFetchRecordOperation获取了该区域。之后,让控制台打印获取的CKRecordZone的属性“capabilities”的值。值
我使用了 SauceLabs example DesiredCapabilities capabilities = new DesiredCapabilities(); capabilit
我正在尝试为我的 .net core 应用程序实现持续部署。当调用 lambda 函数时,我尝试创建一个 cloudformation 来启动资源。但出现错误: 创建 Cloud Formation
在我的 UIMA 应用程序中,我有一些注释器必须在某个注释器运行后运行。 起初,我考虑过将这些注释器聚合在一起,但我有其他注释器也依赖于这个(和其他)注释器,这使得聚合变得困难和/或不切实际。 我阅读
对不起标题,我会尽力更好地解释这个问题。我已经为我的 log4net 实例创建了一个包装器,我使用以下构造函数实例化了这个记录器: public MyLogger(string _dbName
我使用 ChromeDriver 2.33 和 WebDriver 3.6.0 并尝试设置文件下载的默认目录。 Map prefs = new HashMap(); prefs.put("downlo
我正在开发一个为触控设备实现特定功能的网站。我的目标是智能手机、平板电脑,实际上是所有使用触摸屏作为主要输入的东西。 为此,我使用了 Modernizr 的 Modernizr.touch 但是,在安
我有一个关于.Capabilities.APIVersions.Has 的问题 - 我不确定它是如何工作的 我有以下功能: {{- define "fybrik.certManagerApiVersi
是否有可能找到与特定中断关联的 MSI 能力结构的位置?具体来说,我需要知道写入时触发该中断的 PCI 地址。 MSI 中断可以很容易地用 pci_alloc_irq_vectors(9) 函数初始化
在 typescript 中使用 Protractor (selenium) 我可以调用 browser.driver.getCapabilities() 来获取如下所示的对象: Capabiliti
我有一个与 Amazon Aurora PostgreSQL 兼容的数据库,作为“实时”试点实例运行。 我计划在明年初进行正式的生产过渡,我曾设想这将包括创建开发和测试实例、开始快照恢复等。此外,我迫
我正在读取另一个生成输出(缓慢且无限)的进程的输出。因为我想实时读取这些数据,所以我使用“stdbuf -oL”(行缓冲,数据是文本)。我无法控制生成过程,因此无法修改源以强制刷新。 到目前为止,st
在 android 6.0.1 上尝试使用 run-as 时出现此错误。 ⋊> ~ adb shell
本文整理了Java中org.opendaylight.controller.netconf.util.capability.YangModuleCapability类的一些代码示例,展示了YangMo
我是一名优秀的程序员,十分优秀!