Linux内核UART中断

时间:2016-12-07 03:58:25

标签: c linux linux-kernel interrupt-handling

每当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");

0 个答案:

没有答案