История изменений
Исправление 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()
{
}
Как и все начинающие выбрал сниффер клавиатуры.
Очевидно, что пока не оринетируюсь в разработке. Поэтому и вопросы…