📄 keybd.c
字号:
#include <linux/kernel.h>#include <linux/module.h>#include <linux/sched.h>#include <linux/interrupt.h>#include <linux/workqueue.h>#include <asm/io.h>#include <linux/init.h>#define MY_WORK_QUEUE_NAME "WQsched.c"static struct workqueue_struct *my_workqueue;static void get_char(void *scancode){ printk("Scan Code %x %s.\n", (int)*((char *)scancode) & 0x7F, *((char *)scancode) & 0x80 ? "Released" : "Pressed");}irqreturn_t keyboard_irq (int irq, void * dev_id)//, struct pt_regs * regs{ static int initialised = 0; static unsigned char scancode; static struct work_struct task; unsigned char status; status = inb(0x64); scancode = inb(0x60); if (initialised == 0) { INIT_WORK(&task, get_char); initialised = 1; } else { PREPARE_WORK(&task, get_char); } queue_work(my_workqueue, &task); return IRQ_HANDLED;}int init_module(){ my_workqueue = create_workqueue(MY_WORK_QUEUE_NAME); free_irq(1, NULL); return request_irq(1, keyboard_irq, SA_SHIRQ, "test_keyboard_irq_handler", (void *)(keyboard_irq));}void cleanup_module(){ free_irq(1, NULL);}MODULE_LICENSE("GPL");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -