Как написать драйвер для мышки? И где в ядре находится

Модератор: Модераторы разделов

nofelet
Сообщения: 55
ОС: ubuntu 8

Как написать драйвер для мышки? И где в ядре находится

Сообщение nofelet »

1. Как писать драйвера для линукс? С чего начать ? Литература?

2. В какой папке в ядре находится исходники дров для мышки ?
Спасибо сказали:
Аватара пользователя
DaemonTux
Сообщения: 1480
Статус: Юный падаван
ОС: Gentoo

Re: Как написать драйвер для мышки? И где в ядре находится

Сообщение DaemonTux »

nofelet писал(а):
27.04.2009 02:08
1. Как писать драйвера для линукс? С чего начать ? Литература?

2. В какой папке в ядре находится исходники дров для мышки ?

Для чего вам писать свой драйвер?
Vladivostok Linux User Group
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: Как написать драйвер для мышки? И где в ядре находится

Сообщение Portnov »

1. Роберт Лав, 'Разработка ядра Linux'; Он же, 'Системное программирование для Linux' (эти две есть по-русски). "Linux Device Drivers" (http://lwn.net/Kernel/LDD3/).
2. Для ps/2 - drivers/input/mouse/. Для usb, насколько я понял - drivers/hid/usbhid/.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: Как написать драйвер для мышки? И где в ядре находится

Сообщение Denjs »

DaemonTux писал(а):
27.04.2009 07:57
nofelet писал(а):
27.04.2009 02:08
1. Как писать драйвера для линукс? С чего начать ? Литература?

2. В какой папке в ядре находится исходники дров для мышки ?

Для чего вам писать свой драйвер?

ну, например, мне не помешал-бы драйвер для "Genius NewSketch 1212 HR II" паншета )))
просто валяется без дела уже несколько лет, а выбрасывать жалко...
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
nofelet
Сообщения: 55
ОС: ubuntu 8

Re: Как написать драйвер для мышки? И где в ядре находится

Сообщение nofelet »

DaemonTux писал(а):
27.04.2009 07:57
nofelet писал(а):
27.04.2009 02:08
1. Как писать драйвера для линукс? С чего начать ? Литература?

2. В какой папке в ядре находится исходники дров для мышки ?

Для чего вам писать свой драйвер?


ДЗ по учебе. Ну и хочется попробовать себя в этом деле . :)
Спасибо сказали:
Аватара пользователя
кодировщик
Сообщения: 974
Статус: зарёган в пятницу 13
ОС: Linux

Re: Как написать драйвер для мышки? И где в ядре находится

Сообщение кодировщик »

nofelet писал(а):
27.04.2009 11:52
DaemonTux писал(а):
27.04.2009 07:57
nofelet писал(а):
27.04.2009 02:08
1. Как писать драйвера для линукс? С чего начать ? Литература?

2. В какой папке в ядре находится исходники дров для мышки ?

Для чего вам писать свой драйвер?


ДЗ по учебе. Ну и хочется попробовать себя в этом деле . :)

offtop:
Прийдётся наверное сначала покопаться пару недель в книгах и исходниках :)
Спасибо сказали:
Аватара пользователя
Stauffenberg
Сообщения: 2041
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: Как написать драйвер для мышки? И где в ядре находится

Сообщение Stauffenberg »

nofelet писал(а):
27.04.2009 02:08
1. Как писать драйвера для линукс? С чего начать ? Литература?


Я сейчас тоже решил поиграться с ядром. Но я пишу драйвер клавиатуры (: Могу посоветовать:
* http://kernelnewbies.org/
* Essential Linux Device Driver - в книге и основы работы мышек и примеры кода. Очень хорошая книга для тех, кто хочет научиться писать модули ядра (драйвера).


nofelet писал(а):
27.04.2009 02:08
2. В какой папке в ядре находится исходники дров для мышки ?


/usr/src/linux/drivers/input/serio/i8042.c
драйвер контроллера i8042
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
Аватара пользователя
rza
Сообщения: 105
ОС: Linux Mint 11 Katya

Re: Как написать драйвер для мышки? И где в ядре находится

Сообщение rza »

Код: Выделить всё

 42 #define DRIVER_VERSION "v1.6"
 43 #define DRIVER_AUTHOR "Vojtech Pavlik <vojtech@ucw.cz>"
 44 #define DRIVER_DESC "USB HID Boot Protocol mouse driver"
 45 #define DRIVER_LICENSE "GPL"
 46
 47 MODULE_AUTHOR(DRIVER_AUTHOR);
 48 MODULE_DESCRIPTION(DRIVER_DESC);
 49 MODULE_LICENSE(DRIVER_LICENSE);
 50
 51 struct usb_mouse {
 52         char name[128];
 53         char phys[64];
 54         struct usb_device *usbdev;
 55         struct input_dev *dev;
 56         struct urb *irq;
 57
 58         signed char *data;
 59         dma_addr_t data_dma;
 60 };
 61
 62 static void usb_mouse_irq(struct urb *urb)
 63 {
 64         struct usb_mouse *mouse = urb->context;
 65         signed char *data = mouse->data;
 66         struct input_dev *dev = mouse->dev;
 67         int status;
 68
 69         switch (urb->status) {
 70         case 0:                 /* success */
 71                 break;
 72         case -ECONNRESET:       /* unlink */
 73         case -ENOENT:
 74         case -ESHUTDOWN:
 75                 return;
 76         /* -EPIPE:  should clear the halt */
 77         default:                /* error */
 78                 goto resubmit;
 79         }
 80
 81         input_report_key(dev, BTN_LEFT,   data[0] & 0x01);
 82         input_report_key(dev, BTN_RIGHT,  data[0] & 0x02);
 83         input_report_key(dev, BTN_MIDDLE, data[0] & 0x04);
 84         input_report_key(dev, BTN_SIDE,   data[0] & 0x08);
 85         input_report_key(dev, BTN_EXTRA,  data[0] & 0x10);
 86
 87         input_report_rel(dev, REL_X,     data[1]);
 88         input_report_rel(dev, REL_Y,     data[2]);
 89         input_report_rel(dev, REL_WHEEL, data[3]);
 90
 91         input_sync(dev);
 92 resubmit:
 93         status = usb_submit_urb (urb, GFP_ATOMIC);
 94         if (status)
 95                 err ("can't resubmit intr, %s-%s/input0, status %d",
 96                                 mouse->usbdev->bus->bus_name,
 97                                 mouse->usbdev->devpath, status);
 98 }
 99
260

usbmouse.c

подскажите пожалуйста как отсюда получить координаты курсора?
input_report_rel(dev, REL_X, data[1]);
input_report_rel(dev, REL_Y, data[2]);
Спасибо сказали:
Аватара пользователя
Helmik
Сообщения: 9
ОС: openSUSE

Re: Как написать драйвер для мышки? И где в ядре находится

Сообщение Helmik »

rza писал(а):
23.10.2010 00:41

Код: Выделить всё

 42 #define DRIVER_VERSION "v1.6"
 43 #define DRIVER_AUTHOR "Vojtech Pavlik <vojtech@ucw.cz>"
 44 #define DRIVER_DESC "USB HID Boot Protocol mouse driver"
 45 #define DRIVER_LICENSE "GPL"
 46
 47 MODULE_AUTHOR(DRIVER_AUTHOR);
 48 MODULE_DESCRIPTION(DRIVER_DESC);
 49 MODULE_LICENSE(DRIVER_LICENSE);
 50
 51 struct usb_mouse {
 52         char name[128];
 53         char phys[64];
 54         struct usb_device *usbdev;
 55         struct input_dev *dev;
 56         struct urb *irq;
 57
 58         signed char *data;
 59         dma_addr_t data_dma;
 60 };
 61
 62 static void usb_mouse_irq(struct urb *urb)
 63 {
 64         struct usb_mouse *mouse = urb->context;
 65         signed char *data = mouse->data;
 66         struct input_dev *dev = mouse->dev;
 67         int status;
 68
 69         switch (urb->status) {
 70         case 0:                 /* success */
 71                 break;
 72         case -ECONNRESET:       /* unlink */
 73         case -ENOENT:
 74         case -ESHUTDOWN:
 75                 return;
 76         /* -EPIPE:  should clear the halt */
 77         default:                /* error */
 78                 goto resubmit;
 79         }
 80
 81         input_report_key(dev, BTN_LEFT,   data[0] & 0x01);
 82         input_report_key(dev, BTN_RIGHT,  data[0] & 0x02);
 83         input_report_key(dev, BTN_MIDDLE, data[0] & 0x04);
 84         input_report_key(dev, BTN_SIDE,   data[0] & 0x08);
 85         input_report_key(dev, BTN_EXTRA,  data[0] & 0x10);
 86
 87         input_report_rel(dev, REL_X,     data[1]);
 88         input_report_rel(dev, REL_Y,     data[2]);
 89         input_report_rel(dev, REL_WHEEL, data[3]);
 90
 91         input_sync(dev);
 92 resubmit:
 93         status = usb_submit_urb (urb, GFP_ATOMIC);
 94         if (status)
 95                 err ("can't resubmit intr, %s-%s/input0, status %d",
 96                                 mouse->usbdev->bus->bus_name,
 97                                 mouse->usbdev->devpath, status);
 98 }
 99
260

usbmouse.c

подскажите пожалуйста как отсюда получить координаты курсора?
input_report_rel(dev, REL_X, data[1]);
input_report_rel(dev, REL_Y, data[2]);


Смещение по оси X находится в data[1], по Y: в data[2].

Можете вставить printk(KERN_ALERT "(x: %i; y: %i)", data[1], data[2]); и посмотреть что будет.
To be a rock and not to roll.
Спасибо сказали: