内核提供了一组API接口用于控制系统上的中断状态,我们需要了解并掌握这些API的使用。
一、注册和释放
IRQ线是宝贵的资源,驱动程序在使用前必须先注册申请(request_irq),不再使用时必须释放(free_irq)。在include/linux/interrupt.h中声明
/**
* @irp:要申请的IRQ号。很多设备使用IRQ都是预先分配好的,比如系统时钟和键盘
* @handler:要注册的中断服务程序
* @irqflags:中断类型,可以取一下三个值之一,或者它们的'|';
* IRQF_SHARED:表示可以与其他设备共享一条中断线
* IRQF_DISABLED:在本地CPU上,中断处理程序在禁止所有中断的情况下执行,可以不受其他中断干扰。如果没有则只有irq号对应的中断线屏蔽,其他中断是激活的。
* IRQF_SAMPLE_RANDOM:表示这个中断可以用来产生内核熵(内核维护了一个熵池用来收集来自设备驱动程序和其它来源的环境噪音。理论上,熵池中的数据是完全随机的,可以实现产生真随机数序列。为跟踪熵池中数据的随机性,
一、注册和释放
IRQ线是宝贵的资源,驱动程序在使用前必须先注册申请(request_irq),不再使用时必须释放(free_irq)。在include/linux/interrupt.h中声明
/**
* @irp:要申请的IRQ号。很多设备使用IRQ都是预先分配好的,比如系统时钟和键盘
* @handler:要注册的中断服务程序
* @irqflags:中断类型,可以取一下三个值之一,或者它们的'|';
* IRQF_SHARED:表示可以与其他设备共享一条中断线
* IRQF_DISABLED:在本地CPU上,中断处理程序在禁止所有中断的情况下执行,可以不受其他中断干扰。如果没有则只有irq号对应的中断线屏蔽,其他中断是激活的。
* IRQF_SAMPLE_RANDOM:表示这个中断可以用来产生内核熵(内核维护了一个熵池用来收集来自设备驱动程序和其它来源的环境噪音。理论上,熵池中的数据是完全随机的,可以实现产生真随机数序列。为跟踪熵池中数据的随机性,