《奔跑吧Linux内核(第2版)卷2:调试与案例分析》 中断管理
[复制链接]
本帖最后由 TL-LED 于 2024-5-5 22:24 编辑
一、中断控制器
Linux内核支持众多的处理器架构,从系统角度来看,Linux内核的中断管理可以分成下面4层。
1、硬件层,如CPU和中断控制器的连接。
2、处理器架构管理层,如CPU中断异常处理。
3、中断控制器管理层,如IRQ号的映射。
4、Linux内核通用中断处理器层,如中断注册和中断处理。
二、硬件中断号和linux中断号的映射
Linux驱动程序开发过程中,常用request_irq()函数注册中断接口,使用linux内核软件中断号。硬件中断号是如何映射到linux内核的IRQ号,芯片技术的发展,现在一个SOC内部有多个中断控制器,并且每个中断控制器管理的中断源的数量变得越来越多,在一些复杂的SOC中,多个中断控制器还可以级联成一个树状结构,面对如此复制的硬件,linux引入了irq_domain管理架构,可以支持多个中断控制器,完美地支持设备树机制,解决硬件中断号映射到linux内核的IRQ号的问题。
三、注册中断
一个外设中断发生后,内核会执行一个函数来响应中断,这个函数称为中断处理程序,中断处理程序是内核用于响应中断的,并且运行在中断上下文中,中断处理程序最基本的工作是通知硬件设备中断已经被接收,不同的硬件设备的中断处理程序是不同的,有的常常需要做很多的处理工作,这也是linux内核把中断处理程序分成上半部分和下半部分的原因。中断处理程序要求快速完成并退出中断。
四、软中断和tasklet
中断管理中有一个重要的设计理念,上下半部机制。中断上半部有一个很重要的原则,硬件中断处理程序应该执行的越快越好,希望它尽快离开并从硬件返回。
上半部分通常是完成整个中断处理任务中的一小部分。中断处理任务有一些计算任务,如数据的复制、数据包封装和转发,计算时间较长的数据处理等,这个任务中断可以放到中断下半部分来执行。
tasklet是基于软中断的一种下半部机制。
|