The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Помогите разобраться с драйвером!"
Отправлено skb7, 08-Дек-13 16:59 
> Тут правоверный код!

1. Почему int sccode, если достаточно char?
2. Зачем читать и хранить статус, если он не используется?
3. Зачем создавать свой workqueue, если можно использовать глобальный workqueue (через функцию schedule_work() вместо queue_work())?
4. Можно использовать DECLARE_WORK() вместо INIT_WORK() и PREPARE_WORK()

Если  уже делать BH через wq, то можно сделать проще (код проверен):


#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/workqueue.h>
#include <linux/interrupt.h>
#include <asm/io.h>

static void kbd2_do_work(struct work_struct *work);

static char scancode;
static DECLARE_WORK(kbd2_work, kbd2_do_work);

static void kbd2_do_work(struct work_struct *work)
{
    pr_info("Scan Code %x %s\n",
        scancode & 0x7F, scancode & 0x80 ? "Released" : "Pressed");
}

static irqreturn_t kbd2_isr(int irq, void *dev_id)
{
    scancode = inb(0x60);
    schedule_work(&kbd2_work);
    return IRQ_HANDLED;
}

static int __init kbd2_init(void)
{
    return request_irq(1, kbd2_isr, IRQF_SHARED, "kbd2", &scancode);
}

static void __exit kbd2_cleanup(void)
{
    free_irq(1, &scancode);
}

module_init(kbd2_init);
module_exit(kbd2_cleanup);

MODULE_LICENSE("GPL");


Ну и всё же magic numbers -- зло, я за замену их на осмысленные дефайны. И вообще, если задача портировать код на новое ядро -- то правильно это было бы сделать именно с использованием  threaded IRQ, как я это показал ниже.

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру