1 中断下半部 用 tasklet表示
2 TASKLET_SOFTIRQ 表示
3 工作队列处理 中断下半部 (线程处理) work_queue
4 cpu变多 work_queue运行在一个cpu上 很多work_queue 则只能运行在一个cpu上
改进 可以在多个 cpu上运行 新技术 (threaded irq)
5 requset_irq 第二个参数,中断处理函数,是上半部。
6 requset_threaded_irq 第二个参数 上半部 可以为空,完全有线程处理 第三个参数 在线程中运行的函数
当第三个参数不为空的时候,那么会创建一个内核线程
使得每一个中断 都能有内核线程
7 gic 通用中断控制器
8 共享中断 可能是 根据软件的处理函数,判断是哪个设备产生中断。
9 没使用设备树之前,使用 irq.h 里面的 宏定义得到 软中断号
10 设备数描述中断
一般
interrupt-parent= (目的)
interrupt=<n,上升沿> (发送的中断号)
父亲的是 n是那个中断控制的编号 n属于xxx
同时 n 表示的是 硬件中断号
11 irq_domain 里面的 xlate 会解析设备树 把 hwirq 转换为 虚拟irq 然后使用 map 函数映射成为 软件 irq
12 当cpu 要处理中断,那么它会读取 gpio 寄存器(中断控制器),得到 hwirq,然后根据 hwirq 得到之前映射的 irq
13 irq数组 里面的 irq_data里面的 irq_chip 里面的操作函数 都是bsp工程师,操作的寄存器的方法
14 gpio 寄存器 可以当成中断控制器,但是也依赖上层的中断控制器。所有也要 指定父亲,指定几号中断
15 PPI Private 私有外设中断 中断只能发送给指定的 处理器
SPI Shared 中断可以发送给多个处理器
SGI 中断 cpu 核 通知 另一个 cpu 核
16 设备树 的 gpio相关的 部分,不用配置中断,可以通过函数获得中断号。
17 以为 既然 request_irq 第二个参数是中断处理上半部,那么关中断,开中断,清除中断标志位,都应该由内核进行处理了吧!