LINUX.ORG.RU

Сообщения Ignotus

 

Не работает модуль ядра для обработки прерывания

Форум — Development

Ниже привожу код. Пытался сделать обработчик нажатия клавиатуры. На деле после установки командой sudo insmod int.ko ничего не происходит. Лишь появился warnings: http://img.flashtux.org/upload/img132df7a5abx605cd48f.png

Что я делаю не так?

//int.c
#include <linux/kernel.h>    
#include <linux/module.h>    
#include <linux/workqueue.h> 
#include <linux/sched.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 (struct work_struct *work)
{
    //unsigned char status = inb (0x64);
    unsigned char scancode = inb (0x60);
    printk ("Scan Code %x %s.\n",
            (int)*((char *)scancode) & 0x7F,
            *((char *)scancode) & 0x80 ? "Released" : "Pressed");
}

irqreturn_t
irq_handler (void)
{
    static int initialised = 0;

    static struct work_struct task;

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

    queue_work (my_workqueue, &task);

    return IRQ_HANDLED;
}

static int
init_interrupt (void)
{
    my_workqueue = create_workqueue (MY_WORK_QUEUE_NAME);

    free_irq(1, NULL);

    return request_irq (1,
            (irq_handler_t)irq_handler,
            IRQF_SHARED,
            "test_keyboard_irq_handler",
            (void *)(irq_handler));
}

static void
cleanup_interrupt (void)
{
    free_irq (1, NULL);
}

module_init (init_interrupt);
module_exit (cleanup_interrupt);

MODULE_LICENSE  ("GPL");
#Makefile
obj-m += int.o
all:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
Ignotus
()

Mathematica на linux'e

Галерея — Скриншоты

Дистрибутив - openSUSE 11.3. Рабочая среда - xfce 4.6.
На рабочем столе - firefox 3.6.10 с vimperator'ом, математический пакет Mathematica, где представлено пошаговое решение систем уравнений методом Гаусса (лабораторная по численным методам).

>>> Просмотр (1366x768, 185 Kb)

 , , , ,

Ignotus
()

Debian GNU/Linux squeeze/sid | i3

Галерея — Скриншоты

Мое рабочее окружение

>>> Просмотр (1366x768, 251 Kb)

 , , , , ,

Ignotus
()

RSS подписка на новые темы