linux总结应用之六 驱动设备块设备中的中断
(一):块设备的中断:
中断函数: request_irq() 函数将块设备驱动程序的中断服务子程序和特定的中断请求行联系起来。
驱动程序的中断服务子程序的中断过程如下:
(1):用户进程发出莫种类型的输入或输出请求(read()系统调用),或许先
通过高速缓冲存储,最终要求进行实际设备的输入/输出.
(2):调用设备驱动程序的read()函数,或者requset()函数,将完成输入/输出
操作的指令送给硬设备,现在设备驱动程序的等待操作的发生。
(3):一些时间以后,硬设备准备好完成指定的操作,并产生中断信号标志事件的发生。
(4):中断信号导致调用驱动程序的中断服务子程序,它将所要的数据从硬设备复制到设备驱动程序的
内存缓冲区,并通知正在等待的read()或request()函数,数据现在已经可供使用。
(5):在数据可供使用时,read()或request()函数现在可将数据提供给用户进程,上述的中断
过程是经过简化的,但反映了过程的主要方面。
(6):如果中断服务子程序需要改变一些数据结构,而内核其他部分也要改变这些数据结构。
(7):当发生硬设备的输入/输出请求时,驱动程序的read(),write()和request()函数又做
(二):计时程序:
struct timer list
{
struct timer_list *next,*prev;
unsigned long expires,data;
void (*function)(unsigned long);
};
void add_timer(struct timer_list *timer);
void del_timer(struct timer-list *timer);
add_timer()调用设置成在特定事假(由jiffies给出)执行指定的函数,除非计时程序
被撤销,它将在给定时间执行指定的函数,如果进程等待的中断发生了,则由中断服务子程序撤销
计时程序(用del_timer()调用撤销)。如果由于一些原因中断没有发生,计时程序在指定时间
达到后,调用指定的函数,通常这表示出现了错误,将利用wake_up()函数唤醒休眠进程来处理
这一情况。