#include #include #include #include #include MODULE_LICENSE("mine"); size_t count = 0; size_t last_fib; char message[100]; ssize_t proc_read(struct file *fp, char *user_buffer, size_t ub_size, loff_t *offp ){ if(*offp) return 0; { size_t readlen = snprintf(user_buffer, ub_size, "Interrupts: %lu\n%s\n", count, message); *offp += readlen; return readlen; } } struct proc_ops operations = { proc_read: proc_read }; void inc_count(struct work_struct*){ count++; } DECLARE_WORK(interrupt_count, inc_count); irqreturn_t keyboard_interrupt_action (int irq, void *dev_id){ schedule_work(&interrupt_count); return (irqreturn_t) IRQ_HANDLED; } int init_module() { request_irq(1, keyboard_interrupt_action, IRQF_SHARED, "Our IRQ Handler", (void*)keyboard_interrupt_action); proc_create("irqcount", 0, 0, &operations); return 0; } void cleanup_module() { free_irq(1, (void*)keyboard_interrupt_action); remove_proc_entry("irqcount", 0); }