diff --git a/Software/Development/OperatingSystem/Linux/Kernel/API/Linux_Kernel_Devm_APIs.md b/Software/Development/OperatingSystem/Linux/Kernel/API/Linux_Kernel_Devm_APIs.md index 1a0bdc8..86ae5a8 100644 --- a/Software/Development/OperatingSystem/Linux/Kernel/API/Linux_Kernel_Devm_APIs.md +++ b/Software/Development/OperatingSystem/Linux/Kernel/API/Linux_Kernel_Devm_APIs.md @@ -160,3 +160,43 @@ size:Size of map. **返回值:** 成功则返回映射内存首地址,失败返回 NULL。 + +## devm_request_irq 函数 + +**头文件:** + +```cpp +#include +``` + +**函数原型:** + +```c +devm_request_irq(struct device *dev, unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char *devname, void *dev_id); +``` + +**说明:** + +Devm 版本申请中断并注册中断处理程序。 + +**参数:** + +dev:设备结构体; + +irq:要申请的硬件中断号; + +handler:向系统注册的中断处理函数,是一个回调函数,中断发生时,系统调用这个函数; + +irqflags:中断处理的属性,若设置了 IRQF_DISABLED,则表示中断处理程序是快速处理程序,快速处理程序被调用时屏蔽所有中断,慢速处理程序不屏蔽;若设置了 IRQF_SHARED,则表示多个设备共享中断,若设置了 IRQF_SAMPLE_RANDOM,表示对系统熵有贡献,对系统获取随机数有好处(这几个flag是可以通过或的方式同时使用的); + +devname:设置中断名称,通常是设备驱动程序的名称,在cat /proc/interrupts中可以看到此名称; + +dev_id:该参数将会传递给 handler 所对应的回调函数。 + +**返回值:** + +0:表示成功; + +-INVAL:表示中断号无效或处理函数指针为NULL; + +-EBUSY:表示中断已经被占用且不能共享。 diff --git a/Software/Development/OperatingSystem/Linux/Kernel/API/Linux_Kernel_中断处理.md b/Software/Development/OperatingSystem/Linux/Kernel/API/Linux_Kernel_中断处理.md new file mode 100644 index 0000000..f967489 --- /dev/null +++ b/Software/Development/OperatingSystem/Linux/Kernel/API/Linux_Kernel_中断处理.md @@ -0,0 +1,39 @@ +# Linux Kernel 中断处理 + +## request_irq + +**头文件:** + +```cpp +#include +``` + +**函数原型:** + +```c +int request_irq(unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char *devname, void *dev_id); +``` + +**说明:** + +申请中断并注册中断处理程序。 + +**参数:** + +irq:要申请的硬件中断号; + +handler:向系统注册的中断处理函数,是一个回调函数,中断发生时,系统调用这个函数; + +irqflags:中断处理的属性,若设置了 IRQF_DISABLED,则表示中断处理程序是快速处理程序,快速处理程序被调用时屏蔽所有中断,慢速处理程序不屏蔽;若设置了 IRQF_SHARED,则表示多个设备共享中断,若设置了 IRQF_SAMPLE_RANDOM,表示对系统熵有贡献,对系统获取随机数有好处(这几个flag是可以通过或的方式同时使用的); + +devname:设置中断名称,通常是设备驱动程序的名称,在cat /proc/interrupts中可以看到此名称; + +dev_id:该参数将会传递给 handler 所对应的回调函数。 + +**返回值:** + +0:表示成功; + +-INVAL:表示中断号无效或处理函数指针为NULL; + +-EBUSY:表示中断已经被占用且不能共享。