外设慢于CPU,所以不能轮循,占用CPU
通过信号机制来通知CPU工作进度
步骤
1.向内核注册中断 int request_irq(中断号, 中断处理, flag, 设备名, 共享中断id)
2。实现中断动作
3.释放中断 void free_irq(u32 irq, void *dev_id)
快速中断:不允许嵌套
慢速中断:允许嵌套
共享中断:
1,将不同的设备挂到同一个中断线上
2,共享中断中不能使用disabe_irq(u32 irq)
进程上下文:
用户空间到内核空间
中断处理程序(中断上下文 不同于 进程上下文)
中断上下文:由硬件产生
1.不能向用户空间发送/接受数据
2.不能使用可能导致阻塞的函数(没有进程和线程,无法阻塞)
3.不能使用引起调度的函数(没有进程,无法调度)
中断处理函数流程:
1.判断是否本设备产生了中断 0x80
------主要原因:共享中断:网卡和uart都使用5号中断线,内核不能分别哪个设备,把所有5号线上的中断程序都执行一遍,内部会进行判断跳过!!
2.清中断位
3.中断处理,通常为数据接收
4.唤醒等待数据的进程