0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux中断子系统Arch-speicific代码分析

麦辣鸡腿堡 来源:LoyenWang 作者:LoyenWang 2023-09-28 15:27 次阅读

Arch-speicific代码分析

  • 中断也是异常模式的一种,当外设触发中断时,处理器会切换到特定的异常模式进行处理,而这部分代码都是架构相关的;ARM64的代码位于arch/arm64/kernel/entry.S
  • ARM64处理器有四个异常级别Exception Level:0~3,EL0级对应用户态程序,EL1级对应操作系统内核态,EL2级对应Hypervisor,EL3级对应Secure Monitor;
  • 异常触发时,处理器进行切换,并且跳转到异常向量表开始执行,针对中断异常,最终会跳转到irq_handler中;

代码比较简单,如下:

/*
 * Interrupt handling.
 */
	.macro	irq_handler
	ldr_l	x1, handle_arch_irq
	mov	x0, sp
	irq_stack_entry
	blr	x1
	irq_stack_exit
	.endm

来张图:

图片

  • 中断触发,处理器去异常向量表找到对应的入口,比如EL0的中断跳转到el0_irq处,EL1则跳转到el1_irq处;
  • 在GIC驱动中,会调用set_handle_irq接口来设置handle_arch_irq的函数指针,让它指向gic_handle_irq,因此中断触发的时候会跳转到gic_handle_irq处执行;
  • gic_handle_irq函数处理时,分为两种情况,一种是外设触发的中断,硬件中断号在16 ~ 1020之间,一种是软件触发的中断,用于处理器之间的交互,硬件中断号在16以内;
  • 外设触发中断后,根据irq domain去查找对应的Linux IRQ中断号,进而得到中断描述符irq_desc,最终也就能调用到外设的中断处理函数了;
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4776

    文章

    17320

    浏览量

    277897
  • Linux
    +关注

    关注

    85

    文章

    10263

    浏览量

    205820
  • 子系统
    +关注

    关注

    0

    文章

    91

    浏览量

    12025
  • 代码
    +关注

    关注

    28

    文章

    3873

    浏览量

    65548
收藏 人收藏

    评论

    相关推荐

    Linux时间子系统之ARM generic timer驱动代码分析

    Linux时间子系统之ARM generic timer驱动
    发表于 07-17 09:30

    Arm Linux中断子系统先相关资料分享

    Linux 中断子系统1.1. 中断硬件系统3个组成部分:外设(中断源)、中断控制器、CPU1.2. Linux中断子系统4个部分:普通外设驱动、Linux kernel通用
    发表于 05-23 15:21

    Arch Linux教程详解

    Linux开始感到兴趣,身为一个精通各种系统开关机,各种发行版安装与卸载的老司机,我觉得我有必要站出来为大家安利一下Arch Linux了。 Arch Linux是一款轻量
    发表于 09-21 16:15 0次下载
    <b>Arch</b> <b>Linux</b>教程详解

    Arch Linux 有何优缺点?

    Arch Linux 于 2002 年发布,由 Aaron Grifin 领头,是当下最热门的 Linux 发行版之一。从设计上说,Arch Linux 试图给用户提供简单、最小化且优雅的体验,但它
    的头像 发表于 08-05 08:52 1.2w次阅读

    需要了解的Linux的IRQ中断子系统

    Linux中断子系统(generic irq)出现之前,内核使用__do_IRQ处理所有的中断,这意味着__do_IRQ中要处理各种类型的中断,这会导致软件的复杂性增加,层次不分明,而且代码的可重用性也不好。
    发表于 05-10 10:56 1198次阅读

    Linux中断(interrupt)子系统之一:arch相关的硬件封装层

    Linux的通用中断子系统的一个设计原则就是把底层的硬件实现尽可能地隐藏起来,使得驱动程序的开发人员不用关注底层的实现,要实现这个目标,内核的开发者们必须把硬件相关的内容剥离出来,然后定义一些列标准的接口供上层访问,上层的开发人员只要知道这些接口即可完成对中断的进一步处理和控制。
    发表于 05-13 10:48 625次阅读

    Manjaro和Arch Linux有什么区别

    Arch Linux?如果说 Manjaro 是基于 Arch 的,那么它和 Arch 又有什么不同呢?请在这篇比较文章中阅读 Arch 和 Manjaro 的不同之处吧。
    的头像 发表于 09-08 14:15 2617次阅读

    更容易设置和使用的基于ArchLinux发行版

    Arch Linux 就足以把很多人吓跑。与大多数其他发行版不同,Arch Linux 没有一个易于使用的图形安装程序。安装过程中涉及到的磁盘分区,连接到互联网,挂载驱动器和创建文件系统等只用命令行工具来操作。
    的头像 发表于 03-03 14:58 1995次阅读

    Arch Linux 系统迁移的详细介绍

    Arch Linux 系统 安装 pigz 使用 pigz 多线程压缩比使用 tar 单线程压缩速度明显提升多倍 sudo pacman
    发表于 12-16 11:15 572次阅读

    如何在Arch Linux系统中安装Cutefish桌面环境

    Arch Linux 中体验 Cutefish 桌面了。本文概述了在 Arch Linux 系统中安装 Cutefish 桌面环境的步骤。
    的头像 发表于 04-19 17:05 5327次阅读

    从软件角度分析linux内核USB子系统的热插拔过程

    分析linux内核USB子系统的热插拔过程,以实际分析思路和过程行文,基于linux内核版本:4.19.4,记录分析USB子系统时的所得。
    的头像 发表于 01-15 09:28 2334次阅读

    Linux LED子系统详解

    Linux LED子系统详解
    的头像 发表于 06-10 10:37 652次阅读
    <b>Linux</b> LED<b>子系统</b>详解

    Linux中断情景分析

    系统中,中断时常发生,而且线程调度也是由一个硬件定时器时时刻刻发出中断来支撑的。可以说中断就是linux系统的灵魂。
    发表于 06-23 14:22 131次阅读
    <b>Linux</b><b>中断</b>情景<b>分析</b>

    龙架构Arch Linux发行版正式发布

    Arch Linux发行版官方网站宣布结束beta状态,正式支持龙架构。Arch Linux是一种轻量级、可定制、灵活的Linux操作系统。作为一款简单、现代、开放的操作系统
    的头像 发表于 07-18 11:16 327次阅读

    Linux Led子系统代码框架分析

    代码框架分析 led-class.c (led 子系统框架的入口) 维护 LED 子系统的所有 LED 设备,为 LED 设备提供注册操作函数: led_classdev_register
    的头像 发表于 07-20 10:36 201次阅读