Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Почему нет реакции на IRQ?  (Прочитано 652 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Vil84

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Почему нет реакции на IRQ?
« : 21 Декабря 2010, 16:33:46 »
 Ещё раз здравствуйте. Подскажите, пожалуйста, в чём может быть загвоздка. Пытаюсь запустить учебный примерчик с изменёнными значениями, выглядит он вот так:
 /*
 
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/workqueue.h>
#include <linux/interrupt.h>
#include <asm/io.h>

#define MY_WORK_QUEUE_NAME "WQsched.c"

static struct workqueue_struct *my_workqueue;

static void got_char(void *scancode)
{
printk(KERN_INFO "Scan Code %x %s.\n",
       (int)*((char *)scancode) & 0x7F,
       *((char *)scancode) & 0x80 ? "Released" : "Pressed");
}

irqreturn_t irq_handler(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(0x3fd);
scancode = inb(0x3f8);

if (initialised == 0) {
INIT_WORK(&task, got_char, &scancode);
initialised = 1;
} else {
PREPARE_WORK(&task, got_char, &scancode);
}

queue_work(my_workqueue, &task);

return IRQ_HANDLED;
}

int init_module()
{
my_workqueue = create_workqueue(MY_WORK_QUEUE_NAME);
        inb(0xf7, 0x21);
free_irq(4, NULL);

return request_irq(4,  irq_handler,  SA_SHIRQ, "test_keyboard_irq_handler", (void *)(irq_handler));
}

void cleanup_module()
{
free_irq(4, NULL);
}

/*
 * some work_queue related functions are just available to GPL licensed Modules
 */
MODULE_LICENSE("GPL");

 и нормально запускается, в файле /var/log/messages исправно пишется отчет, но реакции на прерывания нет! Если же подставить прерывания 1, то бишь от клавиатуры - то всё нормально, реагирует. com-порт работает нормально, простая вспомогательная программка полноценно принимает байты. Знаете ли вы, что бы это могло значить?

 

Страница сгенерирована за 0.017 секунд. Запросов: 22.