- 论坛徽章:
- 0
|
我仿照一个日志.写了一个2.4内核的键盘中断,编译通过,但是一加载就会死机,请高手帮忙看一下.急!~~!谢谢了
#include<linux/config.h>
#include<linux/module.h>
#include<linux/kernel.h>
#include<linux/init.h>
#include<linux/modversions.h>
#include<linux/version.h>
#include<linux/fs.h>
#include<linux/sched.h>
#include<linux/errno.h>
#include <linux/irq.h>
#include<linux/interrupt.h>
#include<asm/io.h>
#include<linux/tqueue.h>
#include<linux/list.h>
MODULE_LICENSE("GPL");
static void got_char(void *scancode)
{
printk("sth happened ,oh yes!\n");
printk("scan code %x %s.",(int)*((char*)scancode)&0x7f);
}
void key_sever(int irq, void *dev_id, struct pt_regs *regs)
{
printk("mouse key down\n");
static unsigned char scancode;
static struct tq_struct task;
LIST_HEAD(key_sever);
INIT_LIST_HEAD(&key_sever);
task.sync=0;
task.routine=got_char;
task.data=&scancode;
unsigned char status;
scancode=inb(0x60);
printk("inb started\n");
queue_task(&task,&tq_immediate);
mark_bh(IMMEDIATE_BH);
printk("mission started\n");
printk("register device ok\n");
}
int __init mou_init(void)
{
free_irq(1,NULL);
int keytesta=1;
int result;
result=request_irq(1,key_sever,SA_SHIRQ,"keytest",&keytesta);
if (result==0)
{
printk("request ok\n");
}
else
{
printk("failed\n");
}
return 0;
}
void __exit mou_exit(void)
{
free_irq(1,NULL);
printk("<1>goodbye\n");
}
module_init(mou_init);
module_exit(mou_exit); |
|