Linux 内核需要多少条指令才能处理 ARM Cortex A9 上的中断?

2023-12-14

我想估计一下需要的操作码数量ARM cortex A9单核处理IRQ。

假设我使用 Linux 内核3.4,调用需要多少个操作码irq并执行irq_handler ?


您的问题与如何计算有关中断延迟Linux 的。至少您可能会对中断开始之前需要多长时间感兴趣。我们会忽略这个方面irqs here.

一个简单的方法是切换GPIO并使用示波器来测量中断。您甚至可以切换GPIO多次查看不同阶段所花费的时间。这窗口CE链接显示了测量延迟的示例。某些中断控制器(例如 IMX)具有 I/O 复用模式,其中中断号将升高/降低特定 I/O 线。或者,您可以添加代码来切换线路(请参阅下面的例程)。

主要中断处理的来源位于入口臂v.S。为您使用的中断控制器定义了宏,这些宏取决于.config文件。例如,有抢占式中断、多中断控制器、SMP等。primary向量定义在底部入口臂v.S。一般要点是检查当前的操作模式,然后__irq_usr or __irq_svc被采取。这些例程有不同的前置放大器来存储状态,但它们最终都会调用irq_handler宏。这_irq_usr有关于cmpxchg,但是如果您在您的.config,这将不适用。主要区别在于用户模式下发生 IRQ 后可能进行上下文切换。您的机器定义mach/entry-macro.S它们是用于访问中断控制器并获取中断号的汇编器宏。然后跳转到通用irq 处理代码在顶层kernel目录。

所以第二种方法是检查代码并直接计算。如果您查看源代码,编译内核,然后执行以下操作,这可能会更容易objdump --disassemble on the vmlinux图像并寻找这些符号。你会看到irq_handler宏已扩展,它最终应该跳转到您的 IRQ 代码。

从源码中可以看出,还有TRACE_IRQFLAGS。您可以检查一下您正在使用的 Cortex A9 是否可用make menuconfig(并输入/TRACE_IRQFLAGS)。我不知道它是否可用。

有一些变化,例如,

  1. 来自用户/SVC 模式的中断。
  2. 当前正在运行的其他中断。
  3. 被中断的代码(例如 stm/ldm)可能需要一些时间才能完成。
  4. ISR 中的页面错误。至少在某些 Linux 版本中,某些 Alsa 驱动程序可能会因未分配的页面而出现故障。
  5. ISR 中的条件。

在示波器上测量将显示jitter in IRQ服务。检查说明通常会表明IRQ可能永远不会得到服务;例如,如果较高优先级的中断不断抢占/阻止IRQ。也许您需要同时执行这两件事才能在严格的截止日期前进行全面优化。

通常你并不关心整个过程有多长IRQ只需要之间的时间IRQ线被提升并写入/读取一些外围寄存器。例如,一个FIFO可能有有限的深度,如果 IRQ 发生和读取之间的延迟FIFO寄存器大于FIFO_大小 x BPS,那么你有问题FIFO溢出来。

The FIQ基础结构要快得多,但您可以使用的内核设施却少得多!

Edit: The Cortex A9 技术参考附录 B 中有指令计数。大多数 ARM 指令在大多数架构上都是单周期,内存加载/存储、倍数和分支除外。按照上面的第 3 和第 4 段,找到为您的配置处理 Linux 中断的完整指令路径,然后加起来;为estimate(正如最初的问题所问)您可以只计算指令,因为它们通常是单个周期。

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

Linux 内核需要多少条指令才能处理 ARM Cortex A9 上的中断? 的相关文章

  • 从 Python 访问 802.11 无线管理帧

    我想从 Linux 上的 Python 嗅探 802 11 管理 探测请求 帧 这可以从 Scapy 中实现 如下所示 coding utf 8 from scapy all import def proc p if p haslayer
  • 如何确定代码是否在信号处理程序上下文中运行?

    我刚刚发现有人正在从信号处理程序调用我编写的绝对不是异步信号安全的函数 所以 现在我很好奇 如何避免这种情况再次发生 我希望能够轻松确定我的代码是否在信号处理程序上下文中运行 语言是 C 但该解决方案不适用于任何语言吗 int myfunc
  • 查看 Linux 上的多核或多 CPU 利用率

    我有一个在 Linux 上运行的程序 我需要确定它如何利用所有 CPU 内核 有没有什么程序可以查看这些信息 跑过 top 命令并按下 1 查看各个核心
  • 计算 TCP 重传次数

    我想知道在LINUX中是否有一种方法可以计算一个流中发生的TCP重传的次数 无论是在客户端还是服务器端 好像netstat s解决了我的目的
  • 在 Linux 控制台中返回一行?

    我知道我可以返回该行并用以下内容覆盖其内容 r 现在我怎样才能进入上一行来改变它呢 或者有没有办法打印到控制台窗口中的特定光标位置 我的目标是使用 PHP 创建一些自刷新的多行控制台应用程序 Use ANSI 转义码 http en wik
  • 为什么docker容器提示“权限被拒绝”?

    我使用以下命令来运行 docker 容器 并从主机映射目录 root database 到容器 tmp install database docker run it name oracle install v root database t
  • 我应该如何以非 root 身份读取 Linux 上的 Intel PCI 非核心性能计数器?

    我想要一个库 允许对 Linux 可执行文件的关键部分进行 自我分析 就像人们可以使用一个部分计时一样获取当日时间 http linux die net man 2 gettimeofday or RDTSC http www strchr
  • 如何在特定的Java版本上运行应用程序?

    如何运行具有特定 Java 版本的应用程序 我安装了三个 Java 版本 myuser mysystem sudo update alternatives config java There are 3 choices for the al
  • 用于时间线数据的类似 gnuplot 的程序

    我正在寻找一个类似 gnuplot用于在时间轴中绘制数据图表的程序 类似 gnuplot 在 Linux 上运行 命令行功能 GUI 对我帮助不大 可编写脚本的语法 输出为 jpg png svg 或 gif 输出应该是这样的 set5 s
  • .ko 文件是如何构建的

    我正在尝试将我自己的驱动程序移植到Beagle 板 xm arm cortex A8 在移植时我试图弄清楚如何 ko文件实际构建 在我们的Makefile我们只有一个命令来构建 o file 怎样是一个 ko文件已建立 使用Linux 2
  • 哪些 GCC 优化标志对二进制大小影响最大?

    我正在使用 GCC 为 ARM 开发 C 我遇到了一个问题 我没有启用优化 我无法创建二进制文件 ELF https en wikipedia org wiki Executable and Linkable Format 对于我的代码 因
  • Ctrl-p 和 Ctrl-n 在 Docker 下表现异常

    For the life of me I can t seem to figure out why ctrl p and ctrl n don t work like they re supposed to under the Docker
  • php_network_getaddresses: getaddrinfo 失败: 名称或服务未知 (0) 连接失败..!

    我正在使用 php 邮件程序功能 但出现以下错误 如何修复它 2016 01 22 06 15 48 SMTP 错误 无法连接到服务器 php network getaddresses getaddrinfo失败 名称或服务未知 0 连接失
  • 为什么 call_usermodehelper 大多数时候都会失败?

    从内核模块中 我尝试使用 call usermodehelper 函数来执行可执行文件 sha1 该可执行文件将文件作为参数并将文件的 SHA1 哈希和写入另一个文件 名为输出 可执行文件完美运行 int result 1 name hom
  • 这些工作队列标志意味着什么?

    在研究工作队列时 我遇到了内核中定义的工作队列标志和常量 我有以下我无法理解的疑问 这里的排水和救援到底是什么意思 WQ DRAINING 1 lt lt 6 internal workqueue is draining WQ RESCUE
  • 使用 --prof 选项创建多个日志文件而不是一个 v8.log 的节点

    我正在尝试使用 prof 选项来分析我的 Node 应用程序 但我发现不是一个单一的 v8 log 文件 而是使用诸如isolate 0x9582b40 v8 log isolate 0xa1cab78 v8 6049 等前缀创建的多个文件
  • 隐式声明“gets”

    据我所知 隐式声明 通常意味着该函数必须在调用之前放置在程序的顶部 或者我需要声明原型 然而 gets应该在stdio h文件 我已包含 有没有什么办法解决这一问题 include
  • Unix 中的访问时间是多少

    我想知道访问时间是多少 我在网上搜索但得到了相同的定义 读 被改变 我知道与touch我们可以改变它 谁能用一个例子来解释一下它是如何改变的 有没有办法在unix中获取创建日期 时间 stat结构 The stat 2 结构跟踪所有文件日期
  • 如果输入被重定向则执行操作

    我想知道如果我的输入被重定向 我应该如何在 C 程序中执行操作 例如 假设我有已编译的程序 prog 并且我将输入 input txt 重定向到它 我这样做 prog lt input txt 我如何在代码中检测到这一点 一般来说 您无法判
  • Java时区混乱

    我正在运行 Tomcat 应用程序 并且需要显示一些时间值 不幸的是 时间快到了 还有一个小时的休息时间 我调查了一下 发现我的默认时区被设置为 sun util calendar ZoneInfo id GMT 08 00 offset

随机推荐

  • 如何在 Windows PowerShell 中进行屏幕截图?

    如何在 Windows PowerShell 中捕获屏幕 我需要能够将屏幕保存到磁盘 您还可以使用 NET 以编程方式截取屏幕截图 这可以让您更好地控制 Reflection Assembly LoadWithPartialName Sys
  • 何时计算静态数组的长度? [复制]

    这个问题在这里已经有答案了 type TMyArray array 0 255 of Integer var Arr TMyArray Writeln Length Arr When is Length 当传递静态数组时在此上下文中求值 它
  • 如果行值重复,则将其替换为空字符串

    如果发现重复值 是否可以用空字符串替换行值 例如 SELECT ProductCode Color FROM Product ProductCode Color 00A0B Red 00A0B Blue 00A0C Red 00A0C Bl
  • 将 PyInstaller 用于 Matplotlib 脚本后出错

    在我的代码中我使用 import matplotlib pyplot as plt import matplotlib image as mpimg 当我构建 py 脚本时 一切正常 但是使用 pyinstaller exe 获取可执行文件
  • 如何从MSTest获取测试结果状态?

    在 NUnit 中 我可以从以下位置获取测试结果context Result State 如果它是NUnit Framework TestState Success 那么我就知道测试通过了 在 MSTest 中 我如何获取该信息 I saw
  • “await”运算符只能在异步 lambda 表达式中使用

    我有一个 C Windows 应用商店应用程序 我正在尝试启动一个MessageDialog当其中一个命令按钮位于另一个命令按钮内时MessageDialog被点击 这样做的目的是警告用户他们的内容尚未保存 如果他们单击 取消 则会提示他们
  • Salesforce 中的 Web 选项卡

    我想知道我应该如何处理以下问题 我想要做的是在 salesforce 选项卡中显示我们的数据表 表数据将来自我们商店中的数据库 我还希望能够在搜索销售人员帐户时将数据传递到页面 选项卡 以查找信息 这可能吗 如果是这样 关于如何完成这项工作
  • 循环访问 VBA 用户窗体中的复选框控件

    我有一个 Excel VBA 中的用户表单 每个月都有一个复选框 选择一个或多个会导致所需的月份显示在工作表上 我将代码复制粘贴了 12 次并且它有效 但我确信有更好的方法For loop 这是我的代码的一部分 它持续了 12 次 If C
  • 绑定与箭头函数(在 JavaScript 中,或用于响应 onClick)

    所以我正在努力学习JavaScript and or react理解有点混乱 bind this 在构造函数中 然而 我想现在明白了 只是想知道 为什么有人会使用 Binding 与 Arrow functionJavaScript 或在o
  • 如何在 Android 中将默认 Facebook 应用程序登录会话添加到我们的应用程序中?

    我想从我的应用程序登录 Facebook 并且我已经成功完成了 但我希望 如果 Facebook 默认应用程序在我的设备中并且我已经登录 那么它会自动登录到我的应用程序 我无法理解如何获得默认的 Facebook 登录会话 如果有人有任何想
  • 了解边距折叠

    我已经成功地将 h2 元素的边距包含在其容器 section 元素 中 这样它就不会与 p 元素的边距一起折叠 我已经通过设置来完成此操作overflow节元素的auto 我的问题是 由于元素与overflow设置为除visible不能让它
  • php中curl如何发送参数

    我如何在curl php中编写以下命令 卷曲 XPOSThttps apiv2 unificationengine com v2 message send 数据 消息 接收者 姓名 TO NAME 地址 TO EMAILADDRESS 连接
  • CSS 媒体查询可检测设备类型(无论大小)

    我一直在研究媒体查询 但到目前为止 我在谷歌和 Stack Overflow 上找到的所有示例都是使用特定尺寸 max width max device width等 这样做的问题是它没有给我所需的灵活性 我希望能够为台式机和平板电脑提供
  • Firefox SDK 示例附加导出的 XPI 操作按钮不显示

    所以我在这里遵循文档 教程 https developer mozilla org en US Add ons SDK Tutorials Getting started 当我使用 cfx run 时 该插件显示正确 但当我导出到 xpi
  • 移动和消失的代码行; Eclipse 的 XML 编辑器出现问题

    有时我的代码会自行移动或直接消失在 Eclipse XML 编辑器中 当我突出显示受影响的代码时 突出显示的行会尝试自行更正 但是 当我向相反方向滚动或拖动鼠标时 代码会再次发生变化 本质上我会重复 缺失 and从原本没有错误的文件中显示断
  • 以编程方式创建 Azure 推送通知中心

    MSDN 文档中写道 Azure 支持将通知中心作为 Microsoft ServiceBus dll 程序集中的 Azure SDK 2 1 的一部分 您现在可以以编程方式创建 更新和删除通知中心 管理设备注册 以及向所有平台 Windo
  • 使用 mongoDB 创建递增数字

    我们有一个订单系统 每个订单都有一个 ID 出于会计目的 我们需要一种方法来生成数字递增的发票 在不使用 sql 数据库的情况下执行此操作的最佳方法是什么 我们正在使用节点来实现该应用程序 http www mongodb org disp
  • Chromedriver 76 破坏了我的测试套件“javascript 错误:循环引用”

    现在 每当我尝试单击公司 Web 应用程序上的任何元素时 都会收到 javascript 错误 循环引用 会话信息 chrome 76 0 3809 100 这是在以前的 chromedriver 版本上运行良好的代码 我已经尝试了链接到的
  • python pandas - 使用 for 循环编辑多个 DataFrame

    考虑以下 2 个包含 3 个字典和 3 个空 DataFrame 的列表 dict0 actual 2013 02 20 13 30 00 0 93 dict1 actual 2013 02 20 13 30 00 0 85 dict2 a
  • Linux 内核需要多少条指令才能处理 ARM Cortex A9 上的中断?

    我想估计一下需要的操作码数量ARM cortex A9单核处理IRQ 假设我使用 Linux 内核3 4 调用需要多少个操作码irq并执行irq handler 您的问题与如何计算有关中断延迟Linux 的 至少您可能会对中断开始之前需要多