每当UART线在BeagleBone Black上获取数据时,我都试图获得中断。但是,我一直在搞清楚如何注册处理程序。例如,我可以使用request_irq()
来注册GPIO中断,但尝试获取UART的irq似乎不起作用。我认为73是正确的数字,因为在注册之后,从/dev/ttyO1
(UART开发文件)读取会引发错误,但处理程序永远不会触发。
我接近这个权利吗?我目前正在尝试的是下面。感谢。
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/interrupt.h>
#include <asm/io.h>
#define KERNEL_NAME "TestKernel"
#define IRQ_NUMBER 73
int id = 8273643;
irq_handler_t handler(int irq, void* dev_id, struct pt_regs* regs)
{
printk(KERN_ALERT KERNEL_NAME ": Handler called, irq: %d\n", irq);
return (irq_handler_t)IRQ_HANDLED;
}
static int __init driver_entry(void)
{
int result = request_irq(IRQ_NUMBER, (irq_handler_t)handler, 0, "test", &id);
printk(KERN_ALERT KERNEL_NAME ": Insert successful, result: %d\n", result);
return result;
}
static void __exit driver_exit(void)
{
free_irq(IRQ_NUMBER, NULL);
printk(KERN_ALERT KERNEL_NAME ": Cleanup\n");
}
module_init(driver_entry);
module_exit(driver_exit);
MODULE_LICENSE("GPL");