悟空感觉讲理论太无趣了,太枯燥了,所以悟空决定讲解一些实用的东西, 悟空打算这节课先讲解中断的使用。
悟空:顾名思义,中断使用之前需要登记注册。没有登记注册的中断是无法使用的,对Linux系统来说没有登记注册的中断就是黑户,Linux内核是不会处理这种中断的。Linux中断的注册函数如下为
Int request_irq(unsigned int irq,
Irq_handler_t handler,
Unsigned long flags,
Const char *name,
Void *dev);
这个函数有五个参数,第一个参数是需要分配的中断号,第二个参数是一个挂钩函数。
2号童鞋:老师,这个挂钩函数主要用来干什么的啊?
悟空:挂钩函数是Linux内核常用的一种机制,通过这种挂钩函数Linux内核的设计人员在设计一套机制的时候不用过多的关心挂钩函数中的具体实现的逻辑。
2号童鞋:老师,这种挂钩函数是不是和C++中的纯虚函数是不是有一样的功能啊?
悟空:其实Linux内核中使用了很多面向对象的概念,虽然Linux主要是使用C语言写的,但是Linux吸收了很多面向对象语言的优点。
2号童鞋:那么Linux为什么不是用C++,而要使用C语言设计呢?
悟空:这个…这个…。我下节课再给你回答吧,这个函数还没有讲完呢。这个函数的第三个参数是中断处理程序的标志,中断处理标致主要分四种,分别是“IRQF_DISABLED”、“IRQSAMPLE_RANDOM”、“IRQF_TIMER”、“IRQF_SHARED”。如果设置了“IRQF_DISABLED”标准,怎系统就会在执行该中断的时候禁止所有的其他的中断,如果设置了“IRQSAMPLE_RANDOM”标准,该中断怎会对内核的熵池有贡献,如果设置了“IRQF_TIMER”标准,则表示该中断是为定时器的中断处理而准备,“IRQF_SHARED”如果设置了该标准,则该中断线可以被多个中断处理程序共享。
2号童鞋:老师,已经下课很久了。
悟空:啊,下课啦,讲的太投入了,这位同学你叫什么名字啊。
2号童鞋:老师,我叫2号童鞋。