linux中断子系统(四) - 内核提供的相关接口和结构体

内核的代码位于kernel/irq目录下

内核提供的相关接口

与注册系统中断处理函数相关接口

int set_irq_chip(unsigned int irq, struct irq_chip *chip)

void __set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained, const char *name)

与注册用户中断处理函数相关接口

static inline int __must_check
    request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev)
int request_threaded_irq(unsigned int irq, irq_handler_t handler, irq_handler_t thread_fn,
        unsigned long irqflags, const char *devname, void *dev_id)

void free_irq(unsigned int irq, void *dev_id)

打开和关闭本地cpu中断

local_irq_enable()  
local_irq_disable()
local_irq_save(flags)
local_irq_restore(flags)

打开和关闭某个中断

void enable_irq(unsigned int irq)
void disable_irq(unsigned int irq)

结构体

struct irq_desc

每个中断号或者一组中断号(如级联的中断)对应一个struct irq_desc, 所以根据相应的中断号,可以获取对应的中断描述结构irq_desc


struct irq_chip

irq_chip结构定义了各种中断相关的处理行为,如开启或禁止中断以及中断服务完成的之后对相关的中断寄存器进行处理(清中断等)
struct irq_chip这个结构体很重要,里面的ack,enable,disable,mask,unmask,都与具体的中断控制器相关
kernel/irq中的enable_irq,disable_irq都是调用的chip->中的这些函数。


struct irqaction

是一个单链表,所以一个中断号能对应执行多个用户中断处理函数,比如说usb中断来了,他会依次执行以usb中断号注册的EHCI和ohci的用户中断处理函数


/proc文件系统接口

/proc/interrupts

读取interrupts会依次显示irq编号,每个cpu对该irq的处理次数,中断控制器的名字,irq的名字,以及驱动程序注册该irq时使用的名字。


/proc/irq


/proc/irq/n/smp_affinity

分配某个中断给某个cpu
echo 3 > /proc/irq/n/smp_affinity //将中断号n分配给cpu1和cpu2

另外用户进程irqbalance服务可以实现中断均衡处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luckywang1103

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值