LINUX.ORG.RU

История изменений

Исправление Axa, (текущая версия) :

Ты бы хотя бы сказал кому эти файлы принадлежат, т.е. какому проекту.

Я хочу научиться программировать под Linux. Пытаюсь скомпилировать пример из книжки Колисниченко.

#include <linux/module.h>
#include <linux/kernel.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 *myqueue;

MODULE_LICENSE("GPL");

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

irqreturn_t keyboard_handler(int irq, void *dev_id, struct pt_regs *regs)
{
    static int initialised = 0;
    static unsigned char scancode;
    static struct work_struct mytask;
    unsigned char status;
    /* Читаем состояние клавиатуры и скан-код клавиши */
    status = inb(0x64);
    scancode = inb(0x60);
    /* Формируем задачу mytask — ею будет функция log_char */
    if (initialised == 0)
    {
        INIT_WORK(&mytask, log_char, &scancode);
        initialised = 1;
    } else
    {
        PREPARE_WORK(&mytask, log_char, &scancode);
    }
    /* Добавляем задачу mytask в очередь myqueue */
    queue_work(myqueue, &mytask);
    return IRQ_HANDLED;
}

int init_module()
{
    /* Создаем очередь */
    myqueue = create_workqueue(MY_WORK_QUEUE_NAME);
    /* Освобождаем старый обработчик прерывания IRQ 1 */
    free_irq(1, NULL);
    return request_irq(1,
    /* Номер IRQ */
    keyboard_handler,
    /* Наш обработчик */
    SA_SHIRQ, "keyboard_irq_handler", (void*) (keyboard_handler));
}

void cleanup_module()
{
}

Как и все начинающие выбрал сниффер клавиатуры.

Очевидно, что пока не оринетируюсь в разработке. Поэтому и вопросы…

Исходная версия Axa, :

Ты бы хотя бы сказал кому эти файлы принадлежат, т.е. какому проекту.

Я хочу научитьься программировать под Linux. Пытаюсь скомпилировать пример из книжки Колисниченко.

#include <linux/module.h>
#include <linux/kernel.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 *myqueue;

MODULE_LICENSE("GPL");

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

irqreturn_t keyboard_handler(int irq, void *dev_id, struct pt_regs *regs)
{
    static int initialised = 0;
    static unsigned char scancode;
    static struct work_struct mytask;
    unsigned char status;
    /* Читаем состояние клавиатуры и скан-код клавиши */
    status = inb(0x64);
    scancode = inb(0x60);
    /* Формируем задачу mytask — ею будет функция log_char */
    if (initialised == 0)
    {
        INIT_WORK(&mytask, log_char, &scancode);
        initialised = 1;
    } else
    {
        PREPARE_WORK(&mytask, log_char, &scancode);
    }
    /* Добавляем задачу mytask в очередь myqueue */
    queue_work(myqueue, &mytask);
    return IRQ_HANDLED;
}

int init_module()
{
    /* Создаем очередь */
    myqueue = create_workqueue(MY_WORK_QUEUE_NAME);
    /* Освобождаем старый обработчик прерывания IRQ 1 */
    free_irq(1, NULL);
    return request_irq(1,
    /* Номер IRQ */
    keyboard_handler,
    /* Наш обработчик */
    SA_SHIRQ, "keyboard_irq_handler", (void*) (keyboard_handler));
}

void cleanup_module()
{
}

Как и все начинающие выбрал сниффер клавиатуры.

Очевидно, что пока не оринетируюсь в разработке. Поэтому и вопросы…