Linux中断子系统
文章平均质量分 92
分析Linux中断子系统源码
业余程序员plus
分享知识,传播开源精神,致敬郝斌老师!
展开
-
Linux内核工作队列workqueue分析(七)
1.概述工作队列(workqueue)是除了软中断softirq和小任务tasklet以外最常用的一种中断下半部分机制,由内核统一管理。工作队列把推迟执行的任务交给内核线程来执行,其运行在进程上下文,允许重新调度、睡眠。工作队列解决了软中断和tasklet执行时间过长导致系统实时性下降的问题,同时避免了驱动模块自身创建线程导致内核线程过多的问题。早期的工作队列设计的比较简单,由多线程(Multi threaded,每个CPU默认一个工作线程)和单线程(Single threaded,用户自行创建的工作线原创 2021-03-14 17:45:18 · 5123 阅读 · 0 评论 -
Linux内核软中断softirq和小任务tasklet分析(六)
1.概述硬件的中断处理函数处于中断上半部分,在CPU关中断的状态下执行,中断线程、软中断(softirq)及小任务(tasklet)属于中断的下半部分(bottom half),在CPU开中断的状态下执行。小任务基于软中断实现,实质是对软中断的进一步封装, 在实际使用中应尽量使用小任务 。软中断及小任务的执行时机通常是中断上半部分返回(中断服务函数还未完全退出)的时候,其执行的上下文环境也处于(软)中断当中,因此其调用的处理函数不允许睡眠。这里说的软中断是中断下半部分的一种处理机制,和执行指令(ARM架构原创 2021-03-14 17:37:40 · 1109 阅读 · 0 评论 -
Linux内核高层中断处理(五)
1.概述在第一章《Linux中断系统介绍及底层中断处理源代码分析》中,Linux对中断的高层处理,最终调用的是handle_arch_irq或arch_irq_handler_default函数。以zynq7k为例,其采用的是GIC pl390中断控制器,在第二章《中断控制器介绍及初始化源代码分析》中,gic初始化的时候调用set_handle_irq函数,将handle_arch_irq函数指针指向了 gic_handle_irq 。因此这里以zynq7为例,介绍Linux内核对uart0的中断处理过程原创 2021-03-14 17:35:05 · 1810 阅读 · 0 评论 -
Linux内核中断注册源代码分析(四)
1.概述外设产生中断后,Linux内核会执行一个具体的函数来响应中断,此函数被称为中断服务函数。中断服务函数运行在中断上下文中,若中断线程化后,则中断事件在进程上下文中处理。不同的外设中断源,其对应的中断服务函数一般也不同。因此在使用具体的外设中断之前,需要注册对应的中断服务函数,并指明软件中断号、中断标志、中断名称及传递给中断服务函数的参数等。2.中断注册接口介绍2.1.request_irq使用request_irq注册一个中断服务函数,内部调用的是request_threaded_irq函数,原创 2021-03-14 17:30:52 · 684 阅读 · 0 评论 -
Linux内核中断号映射过程分析(三)
1.概述早期的CPU中断数量较少,中断系统简单,Linux内核可以将硬件中断号直接映射为软件中断号。但随着CPU支持的中断数量越来越多,中断系统也被设计的越来越复杂,一个CPU内部可能包含多个中断控制器,某些中断控制器还存在级联的可能。因此,Linux内核引入了虚拟中断号的概念,使用irq_domain进行管理,支持多个中断控制器及中断控制器级联的情况。Linux内核的虚拟中断号与中断控制器的硬件中断号一一对应,但对应关系不固定,在中断映射时才能确定。2.zynq7k串口设备树节点下面是zynq7k串原创 2021-03-14 17:27:05 · 1938 阅读 · 0 评论 -
中断控制器介绍及初始化源代码分析(二)
1.GIC中断控制器介绍ARM处理器中最常用的中断控制器是GIC(Global Interrupt Controller)。GIC支持3中中断类型。(1)SGI(Software Generated Interrupt):软件产生的中断,通常用于多核之间的通信。一个CPU可通过写GIC的寄存器给另外一个CPU产生中断(IPI_WAKEUP、IPI_TIMER等)。SGI中断通常在Linux内核里被称为IPI中断(interprocess interrupts)。(2)PPI(Private Perip原创 2021-03-14 17:24:45 · 1738 阅读 · 0 评论 -
Linux中断系统介绍及底层中断处理源代码分析(一)
1.中断介绍中断是指CPU在正常执行指令过程中,出现了突发且紧急的事件,CPU必须暂时停止执行当前的程序,跳转到处理突发事件的指令处执行,处理完毕后返回到原来的指令处继续执行。根据中断的来源,中断可分为内部中断和外部中断,内部中断来源于CPU内部,如软件中断指令、除法错误、溢出等,外部中断来自于CPU外部,由外设产生,如串口收到数据产生中断、定时器到期产生中断。根据中断入口跳转方法可分为向量中断和非向量中断,CPU通常为向量中断分配不通的中断号,中断到来后,就自动跳转到该中断号对应的地址处执行,非向量中断原创 2021-03-14 16:16:45 · 1839 阅读 · 0 评论 -
Linux中断子系统问题汇总
第一章 Linux中断系统介绍及底层中断处理源代码分析第二章 中断控制器介绍及初始化源代码分析第三章 Linux内核中断号映射过程分析第四章 Linux内核中断注册源代码分析第五章 Linux内核高层中断处理第六章 Linux内核软中断softirq和小任务tasklet分析第七章 Linux内核工作队列workqueue分析...原创 2021-03-14 16:02:25 · 665 阅读 · 0 评论