nixp.ru v3.0

29 мая 2017,
понедельник,
03:14:52 MSK

DevOps с компанией «Флант»
Valentin написал 18 июля 2005 года в 20:56 (352 просмотра) Ведет себя неопределенно; открыл 1 тему в форуме.

И все таки, почему не работает этот модуль так как надо на 2.4.28…

Он запускаетя пишет скан коды в лог, но клава не работает как положено.Сканкоды пишет, а в самой системе ниче не нажимается — ПОЧЕМУ?Пусть не выгружается, только заработает.Помогите плиз!!!

#include /* We’re doing kernel work */

#include /* Specifically, a module */

#include

#include

#include

#include

static void got_char(void *scancode)

{

printk(«Scan Code %x %s.\n»,

(int) *((char *) scancode) & 0×7F,

*((char *) scancode) & 0×80 ? «Released» : «Pressed»);

}

irqreturn_t irq_handler(int irq, void *dev_id, struct pt_regs *regs)

{

static unsigned char scancode;

static struct tq_struct task ={

.routine=got_char,

.data=&scancode

};

unsigned char status;

status = inb(0×64);

scancode = inb(0×60);

queue_task(&task, &tq_immediate);

mark_bh(IMMEDIATE_BH);

return IRQ_HANDLED;

}

int init_module()

{

free_irq(1, NULL);

return request_irq(1, /* The number of the keyboard IRQ on PCs */

irq_handler, /* our handler */

SA_SHIRQ,

«test_keyboard_irq_handler», NULL);

}

void cleanup_module()

{

free_irq(1, NULL);

}

MODULE_LICENSE(«GPL»);

metal

Ну так ты заменил обработчик стандартного драйвера на свой, по-этому и не работает. Есть такой faq linux-kernel-module-how-to, я читал его для версии 2.6, там был подобный пример и было написано, что если вы загрузите подобный модуль, то клава перестанет работать, но вы сможете увидеть что сам модуль работает. Правда я попробовал и у меня и клава работала и модуль, но я подумал что это фича более поздней версии ядра (faq о 2.6.0 был написан), не знаю так ли это.