把模块编程之keyboard中断替换弄掉了..
只40几行代码...不过得重启才能恢复原来的keyboard中断了..
先注册中断处理函数.
然后在中断处理函数中用tasklet处理.
当然还有读键盘的函数
要注意函数的原形匹配问题.内核各版本有的有差异的.可以差头文件.
/*theinterruptmodule,repalcethekeyboardinterrupt
*editbybo-liu
*07-5-21
*/
#include
#include
#include
#include
#include
MODULE_AUTHOR("BO-LIU");
MODULE_LICENSE("GPL");
staticunsignedcharscancode;
staticvoidkbd_do_tasklet(unsignedlongunused);
DECLARE_TASKLET(kbd_tasklet,kbd_do_tasklet,0);
staticvoidkbd_handler(intirq,void*dev_id,structpt_regs*regs){
//while(!(inb(0x64)&1));
wait:
if(!(inb(0x64)&1))
gotowait;
scancode=inb(0x60);
tasklet_schedule(&kbd_tasklet);
}
staticvoidkbd_do_tasklet(unsignedlongunused){
printk("scancode%x%s.",scancode&0x7f,(scancode&0x80)?"released":"pressed");
}
staticintkbd_init(void){
free_irq(1,NULL);
request_irq(1,kbd_handler,0,"keyboard",NULL);
}
staticvoidkbd_cleanup(void){
free_irq(1,NULL);
}
module_init(kbd_init);
module_exit(kbd_cleanup);
阅读(589) | 评论(0) | 转发(0) |