From 2120c472620b6a38a9cdf48df35bca914a4aa271 Mon Sep 17 00:00:00 2001 From: Ciro Santilli Date: Thu, 15 Jun 2017 11:30:40 +0100 Subject: [PATCH] shared irqs work for keyboard and mouse input --- kernel_module/irq.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/kernel_module/irq.c b/kernel_module/irq.c index 183c13f..068dbfc 100644 --- a/kernel_module/irq.c +++ b/kernel_module/irq.c @@ -2,13 +2,17 @@ TODO: get handler running multiple times on some existing interrupt from /proc/interrupts. */ +#include /* copy_from_user, copy_to_user */ +#include #include -#include #include #include +#define NAME "lkmc_character_device" + MODULE_LICENSE("GPL"); +static int major; static int irq = 0; module_param_named(i, irq, int, S_IRUSR); MODULE_PARM_DESC(i, "irq line number"); @@ -23,21 +27,24 @@ MODULE_PARM_DESC(i, "irq line number"); */ static irqreturn_t handler(int irq, void *v) { - pr_info("handler irq = %d jiffies = %llx\n", irq, (unsigned long long)jiffies); + pr_info("handler irq = %d\n", irq); return IRQ_HANDLED; } +static const struct file_operations fops; + static int myinit(void) { int ret; + major = register_chrdev(0, NAME, &fops); for (int i = 0; i < 128; ++i) { ret = request_irq( i, handler, IRQF_SHARED, "myirqhandler0", - NULL + &major ); pr_info("request_irq irq = %d ret = %d\n", i, ret); } @@ -47,6 +54,7 @@ static int myinit(void) static void myexit(void) { free_irq(irq, NULL); + unregister_chrdev(major, NAME); } module_init(myinit)