首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深入分析Linux内核源代码阅读笔记 第三章

中断控制器 8259A 执行如下操作: 监视中断线,检查产生的中断请求(IRQ)信号。 如果在中断线上产生了一个中断请求信号。 把接受到的 IRQ 信号转换成一个对应的向量。...当某个异常被响应后,CPU 清除 eflag 的 IF 位,禁止任何可屏蔽中断。 Intel x86 处理器发布了大约 20 种异常(具体数字处理器模式有关)。...中断请求队列的初始化: 让每个中断源都必须占用一条中断线是不现实的,在 Linux 设计,专门为每个中断请求 IRQ 设置了一个队列,这就是我们所说的中断 请求队列。...中断线是中断请求的一种物理描述 中断线逻辑上对应一个中断请求(或简称中断) 第 n 个中断(IRQn)的缺省中断向量是 n+32。...堆栈有关的常量、数据结构及宏: 常量 存放在栈的寄存器结构 pt_regs 保存现场的宏 SAVE_ALL 恢复现场的宏 RESTORE_ALL 将当前进程的 task_struct 结构的地址放在寄存器

1.3K40
您找到你想要的搜索结果了吗?
是的
没有找到

linux 中断机制《Rice linux 学习笔记》

这篇文章以按键为例子讲解linux的中断原理,中断的架构,中断的实现。 在我们的开发,检测按键是否触发,无非就两种方法—轮询和中断。作者认为两种方法最大的区别就是CPU的利用率。...dev:request_irq的参数dev必须一致,将request_irq指定的dev传递给这个参数; Linux中断处理分析: 第一种方式:应用层的读,不管什么情况下,都会返回。...其中:IRQ_EINT0:按键对应引脚的中断加载的中断一致。...&pins_desc[0]:用于共享中断线加载时保持一致 static int button_close(struct inode *inode, struct file *file) { free_irq...其中函数参数:irq:中断对应的中断。 Dev_id:请求中断函数的第五个参数保持一致。 通过wake_up_interruptible()函数实现等待队列的唤醒。

4.7K10

内核中断子系统介绍

很多人在学习中断子系统的过程,在对基本概念整体不太了解的情况下,过早的陷入了各种架构的实现细节,如同盲人摸象。这里主要给大家明确中断的各个基本概念,希望从这个角度能让大家更好的理解中断子系统。...另一方面,考虑到系统可能存在多个中断控制器,使得单一断控制器的中断不足以区分中断事件,所以引入了软件中断的概念。...驱动程序 API 中断通用逻辑 对于中断事件本身,内核使用 struct irq_desc 进行描述,它包含着所有的信息。而对于中断控制器中断源的驱动来说,关注的信息都只是其中的一部分。...中断源驱动获取到 irq,还需要将 irq 中断处理函数建立映射: request_irq/request_threaded_irq:驱动将中断处理函数注册到 irq。...armv8 arm 核心拥有 2 个外部中断线IRQ 和 FIQ;这两根中断线连接到中断控制器上,中断控制器通过拉高和拉低这两根中断线触发中断。

1K20

Linux 在自动驾驶可靠吗

RT PATCH + Linux 为了RT 线程能实时的抢占从而保证系统的实时性,RT patch 主要做了如下工作, 中断线程化,内核处理中断下半段的函数,几乎都使用内核线程执行中断处理函数。...中断线程化 中断线程化是使用内核线程执行中断处理函数,内核线程的名称是“irq/-”(是Linux中断,是设备名称),调度策略是SCHED_FIFO...在实时内核,软中断由软中断线程执行,或者在进程开启软中断的时候执行。中断处理程序的后半部分唤醒当前处理器上的软中断线程....在非实时内核,rwlock和raw_rwlock完全相同。 选择rwlock和raw_rwlock的原则,选择spinlock和raw_spinlock的原则相同。...业界使用 三星特斯拉合作发布了一组23个补丁,用于使特斯拉的完全自动驾驶(FSD)SoC适用于主线Linux内核。

2K11

实时操作系统

断线程化 标准内核,中断具有最高优先级,可以无条件抢占当前任务,而且中断来临的时机以及执行的时间长短都是未知的,这样就会影响系统线程的执行时间,使得系统的处理增加了不确定因素,导致无法满足实时性的要求...中断线程化流程的分析 下面将对中断线程化进行简要分析。...在初始化阶段,中断线程化的中断初始化常规中断初始化大体上相同,在 start_kernel() 函数中都调用了 trap_init() 和 init_IRQ() 两个函数来初始化 irq_desc_t...结构体,不同点主要体现在内核初始化创建 init 线程时,中断线程化的中断在 init() 函数还将调用 init_hardirqs(kernel/irq/manage.c(已经打过上文提到的补丁)...) curr_irq_prio = param.sched_priority - 1; …… } 如果某个中断状态位IRQ_NODELAY 被置位,那么该中断不能被线程化。

2.2K90

记一个实时Linux的中断线程化问题

初步分析 看了下cpu占用率,除了主应用之外,有一个名为irq/38-twi0的进程引起了我们的注意,因为它竟然占据了10%的cpu。 这个irq开头的进程是做什么的呢?...中断线程化回顾 让我们来回顾下中断线程化的知识。 在Linux上,中断的优先级比进程高,一旦中断过来普通进程实时进程通通都要让路,让CPU先运行对应的中断处理程序,这就会对实时性造成很大的影响。...中断线程化之后,中断来了虽然还是会打断实时进程,但所执行的操作只是唤醒中断线程,原本的中断服务程序被放到了一个内核线程,延迟执行。...中断线程化的机制虽好,也要分情况来使用,不然反而会造成系统的巨大负担。 代码改动是在request_irq时,传入IRQF_NO_THREAD标志,即可避免这个中断被线程化。...本文地址:https://www.cnblogs.com/zqb-all/p/12229990.html 公众:https://sourl.cn/SSP3Rq

2.1K10

实时Linux内核的实现

4.中断线程化 中断线程化是使用内核线程执行中断处理函数,内核线程的名称是“irq/-”(是Linux中断,是设备名称),调度策略是SCHED_FIFO...在实时内核,软中断由软中断线程执行,或者在进程开启软中断的时候执行。中断处理程序的后半部分唤醒当前处理器上的软中断线程,代码如下。...在实时内核,软中断全部由软中断线程执行,RCU-bh保护的读端临界区是可以抢占的,只需和当前处理器上的软中断线程互斥。函数rcu_read_lock_bh()的代码如下。...在非实时内核,rwlock和raw_rwlock完全相同。 选择rwlock和raw_rwlock的原则,选择spinlock和raw_spinlock的原则相同。...https://mp.weixin.qq.com/s/U9okzKGuhKlSZyeKmI4Q4g (10)Linux硬实时和Preempt-RT补丁(中断、软中断、调度、内存调试),https://

6K40

Linux实时补丁即将合并进Linux 5.3

Linux的开放性和低成本是实时Linux发展的优势,越来越多的研究机构和商业团体开展了实时Linux的研究开发,其中最著名的就是FSMLab的Rtlinux和TimeSys Linux。...二、中断线程化 中断线程化是实现Linux实时性的一个重要步骤,在Linux标准内核,中断是最高优先级的执行单元,不管内核当时处理什么,只要有中断事件,系统将立即响应该事件并执行相应的中断处理代码,除非当时中断关闭...在Ingo Molnar的实时补丁,中断线程化的实现方法是: 对于IRQ,在内核初始化阶段init(该函数在内核源码树的文件init/main.c定义)调用init_hardirqs(该函数在内核源码树的文件...,名称为__do_IRQ。...,但是对一些架构,这种方法缺乏灵活性,尤其是一些架构中断处理比较特别时,可能会是IRQ子系统的中断线程化代码部分变的越来越丑陋,因此对于这种架构,后一种方法就有明显优势,当然在后一种方法仍然可以拷贝IRQ

3.6K20

Linux中断机制:硬件处理,初始化和中断处理

linux可以通过/proc/interrupts查看当前系统中所有中断的统计信息,在/proc/irq/xxx(中断)下面,可以看到该中断的详细信息。...典型的场景是使用两个8259A级联,理论最多16个中断(就是ISA IRQs),实际能提供对15个中断线的处理(master的IRQ2用于连接slave),其具体的分配见下图。...针对X86断控制器硬件和linux对这些硬件的初始化,在《interrupt in linux》中有很详细的描述。...irq的),该irq在该中断的生命周期内都不会改变,且和该中断的中断处理函数关联;内核使用一个bitmap allocated_irqs来标识当前系统已经分配的irqirq的管理底层中断设备和配置无关...2、这里没有分配vector,是因为这里使用的irq范围为0-16,是ISA IRQs,其vector的对应关系简单:vector = IRQ0_VECTOR + irq,并在系统初始化过程,已经通过

7.7K30

中断机制和中断描述符表、中断和异常的处理

注:本分类下文章大多整理自《深入分析linux内核源代码》一书,另有参考其他一些资料如《linux内核完全剖析》、《linux c 编程一站式学习》等,只是为了更好地理清系统编程和网络编程的一些概念性问题...我们把中断控制器相连的每条线叫做中断线,要使用中断线,就得进行中断线的申请,就是IRQ(Interrupt ReQuirement ),我们也常把申请一条中断线称为申请一个IRQ 或者是申请一个中断...IRQ 线是从0 开始顺序编号的,因此,第一条IRQ线通常表示成IRQ0。IRQn 的缺省向量是 n+32;如前所述,IRQ 和向量之间的映射可以通过中断控制器端口来修改。 ?...Linux 内核在系统的初始化阶段要进行大量的初始化工作,其中断相关的工作有:初始化可编程控制器8259A;将中断向量IDT 表的起始地址装入IDTR 寄存器,并初始化表的每一项。...• 分两步进行有效性检查:首先是“段”级检查,将CPU 的当前特权级CPL(存放在CS寄存器的最低两位)IDT 第 i 项的段选择符的RPL 相比较,如果RPL(3)大于CPL(0),就产生一个

3.5K10

Linux驱动实践:一起来梳理【中断】的前世今生(附代码)

这几张图比较清晰地描述了在Linux操作系统,关于中断的一些基本概念。 这张图的结构还是比较清晰的,基本上概括了Linux系统的中断分类。...中断和中断向量 这张图只要记住中断中断向量的关系就可以了: 中断中断控制器(PIC/APIC)相关; 中断向量 CPU 相关,用来查找中断处理函数的入口地址; 中断服务例程 ISR 中断服务程序...驱动程序可以通过函数 request_irq(),向操作系统注册,并且激活指定的中断线: int request_irq(unsigned int irq, irq_handler_t...往常一样,操作的目录位于:tmp/linux-4.15/drivers 目录下。...向驱动程序传参 示例代码,在调用 request_irq 时,需要指定中断和驱动程序的名称。 这两个参数是在加载驱动模块的时候,从命令行传入的。

1.1K30

Ingo Molnar 的实时补丁

一、简介 Ingo Molnar 的实时补丁是完全开源的,它采用的实时实现技术完全类似于Timesys Linux,而且中断线程化的代码是基于TimeSys Linux的中断线程化代码的。...二、中断线程化 中断线程化是实现Linux实时性的一个重要步骤,在Linux标准内核,中断是最高优先级的执行单元,不管内核当时处理什么,只要有中断事件,系统将立即响应该事件并执行相应的中断处理代码,除非当时中断关闭...在Ingo Molnar的实时补丁,中断线程化的实现方法是: 对于IRQ,在内核初始化阶段init(该函数在内核源码树的文件init/main.c定义)调用init_hardirqs(该函数在内核源码树的文件...标准linux内核就是这么做的,中断线程化之后,中断失效就没有必要,因为遇到这种状况后,中断线程将挂在等待队列上并放弃CPU让别的线程或进程来运行。...,但是对一些架构,这种方法缺乏灵活性,尤其是一些架构中断处理比较特别时,可能会是IRQ子系统的中断线程化代码部分变的越来越丑陋,因此对于这种架构,后一种方法就有明显优势,当然在后一种方法仍然可以拷贝IRQ

1K20

吐血整理 | 肝翻 Linux 中断所有知识点

:使能/禁止电源管理的唤醒功能 irq_bus_lock:慢速芯片总线上的锁 irq_bus_sync_unlock:同步释放慢速总线芯片的锁 struct irq_domain 中断控制器对应,完成硬件中断...irq_domain 的匹配 map:用于硬件中断 Linux 中断的映射 xlate:通过 device_node,解析硬件中断和触发方式 struct irqaction 主要是用来存设备驱动注册的中断处理函数...,私有中断入口为 handle_percpu_devid_irq 最后,我们可以通过 /proc/interrupts 下的值来看下它们的关系: 现在,我们已经知道内核为硬件中断 Linux 中断做了映射...0x00040000 //NO_SUSPEND的用户共享中断时,执行本设备的中断处理函数 创建完成后,通过 ps 命令可以查看系统的中断线程,注意这些线程是实时线程 SCHED_FIFO...ret; } 进入中断上下文 根据 hwirq 去查找 linux 中断 通过中断找到全局中断描述符数组 irq_desc[NR_IRQS] 的一项,然后调用 generic_handle_irq_desc

3K50

Linux的中断下半部机制的对比

断线程(threaded_irq) 前面讲的硬中断,它是外设中断处理必不可少的一部分。...我们这节先讲中断线程,其接口如下: /include/linux/interrupt.h extern int __must_check request_threaded_irq(unsigned int...其中handler是硬中断,是处理硬件密切相关的事物。其处理完成后,可以把接收到的数据、要继续处理的事情放到某个位置,然后返回是否需要唤醒对应的中断线程。...linux断线程化(threaded irq)和工作队列(work queue)的异同 两者差异: 1、调度优先级不同: threaded irq handler所在的进程(内核线程),调度类别是SCHED_FIFO...机制分析应用 threaded irq的引入 我们知道,工作队列可以用来处理中断的一些耗时的事情,但是他又一个缺点,就是如果有多个事件同时放入工作队列,如果前面的事件处理得太久,那么就会影响到后面的事件的执行

10810

对中断的一点思考

在执行中断处理程序时,本条中断线上的中断是否会被屏蔽? 3.    如果该条中断线被屏蔽了,那么是否一直要到该中断返回(即执行iter指令)时才开启? 4.    禁止中断后,异常还会执行吗?...当一个中断服务结束后,CPU可利用中断结束命令EOI通知8259A,以便复位ISR的相应位。因此当调用handle_IRQ_event()时,即使开中断,该条中断线的中断也是关闭的。...如果在desc->handler->ack(irq);和desc->handler->end(irq);之间,该条中断线上再次发生中断,该中断是否会被丢失? 2.   ...在do_IRQ(),将会调用irq_enter()()和irq_exit()两个函数。...  《Linux内核源代码情景分析》 浙江大学出版社,2001 [4] Robert Love 《Linux内核设计实现》 机械工业出版社 ,2004

1.2K20

Linux进程ID--Linux进程的管理调度(三)【转】

Linux 内核使用 task_struct 数据结构来关联所有进程有关的数据和结构,Linux 内核所有涉及到进程和程序的所有算法都是围绕该数据结构建立的,是内核中最重要的数据结构之一。...该数据结构在内核文件include/linux/sched.h定义,在目前最新的Linux-4.5(截至目前的日期为2016-05-11)的内核,该数据结构足足有 380 行之多,在这里我不可能逐项去描述其表示的含义...在其命名空间中唯一标识进程而分配给它的一个号码,称做进程ID,简称PID。...处于相同的线程组的所有进程都有相同的TGID,但是由于他们是不同的进程,因此其pid各不相同;线程组组长(也叫主线程)的TGID与其PID相同;一个进程没有使用线程,则其TGIDPID也相同。...至此,已经 Linux 内核数据结构相差不多了。

5.7K10
领券