linux中断系统的一些研究

关于linux的中断系统网上有好多文章,基本的原理流程都能查的差不多。

这里是我个人学习或使用中遇到的一些疑问,作为一个记录。

个人理解,可能会有错漏,欢迎指出。


1,linux内核有没有中断优先级?

linux中断没有引入优先级的概念,并且现在linux内核会在执行中断处理函数时禁止cpu中断。


2,关于IRQF_DISABLED

这个flag已经在新版本内核中不再使用,加与不加都没有区别。 之前版本内核(2.6.35之前)加上该标志表示该中断为快速中断,中断处理全程禁止cpu中断,如果不加则为慢速中断,执行中断处理函数时不会禁止cpu中断。

现在,所有中断都会禁止cpu中断。


3,中断线程化

linux引入了中断线程化,是为了提高系统实时性,

  1. int request_threaded_irq(unsigned int irq, irq_handler_t handler  
  2.                          irq_handler_t thread_fn, unsigned long irqflags,  
  3.                          const char *devname, void *dev_id)  
借用宋宝华老师的话:

申请一个线程化的IRQ,kernel会为中断的底版本创建一个名字为irq/%d-%s的线程,%d对应着中断号。其中顶半部(硬中断)handler在做完必要的处理工作之后,会返回IRQ_WAKE_THREAD,之后kernel会唤醒irq/%d-%s线程,而该kernel线程会调用thread_fn函数,因此,该线程成为底半部。

还有网络上这张图:


4,cpu收到中断之后如何获取中断号?

cpu从中断控制器获取中断号的代码在各个平台的entry-macro.S文件,宏:get_irqnr_preamble

中断号会存在 r0

之后跳转到asm_do_IRQ第一个参数就是中断号。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值