1. Как писать драйвера для линукс? С чего начать ? Литература?
2. В какой папке в ядре находится исходники дров для мышки ?
Как написать драйвер для мышки? И где в ядре находится
Модератор: Модераторы разделов
-
nofelet
- Сообщения: 55
- ОС: ubuntu 8
-
DaemonTux
- Сообщения: 1480
- Статус: Юный падаван
- ОС: Gentoo
Re: Как написать драйвер для мышки? И где в ядре находится
Для чего вам писать свой драйвер?
Vladivostok Linux User Group
-
Portnov
- Модератор
- Сообщения: 1786
- Статус: Матёрый линуксоид
- ОС: Debian testing/unstable
Re: Как написать драйвер для мышки? И где в ядре находится
1. Роберт Лав, 'Разработка ядра Linux'; Он же, 'Системное программирование для Linux' (эти две есть по-русски). "Linux Device Drivers" (http://lwn.net/Kernel/LDD3/).
2. Для ps/2 - drivers/input/mouse/. Для usb, насколько я понял - drivers/hid/usbhid/.
2. Для ps/2 - drivers/input/mouse/. Для usb, насколько я понял - drivers/hid/usbhid/.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
-
Denjs
- Сообщения: 1685
- ОС: SuSe 10.2
Re: Как написать драйвер для мышки? И где в ядре находится
ну, например, мне не помешал-бы драйвер для "Genius NewSketch 1212 HR II" паншета )))
просто валяется без дела уже несколько лет, а выбрасывать жалко...
-
nofelet
- Сообщения: 55
- ОС: ubuntu 8
-
кодировщик
- Сообщения: 974
- Статус: зарёган в пятницу 13
- ОС: Linux
Re: Как написать драйвер для мышки? И где в ядре находится
-
Stauffenberg
- Сообщения: 2041
- Статус: ☮ PEACE ☮
- ОС: открытая и свободная
Re: Как написать драйвер для мышки? И где в ядре находится
Я сейчас тоже решил поиграться с ядром. Но я пишу драйвер клавиатуры (: Могу посоветовать:
* http://kernelnewbies.org/
* Essential Linux Device Driver - в книге и основы работы мышек и примеры кода. Очень хорошая книга для тех, кто хочет научиться писать модули ядра (драйвера).
/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)
"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: Как написать драйвер для мышки? И где в ядре находится
Код: Выделить всё
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
260usbmouse.c
подскажите пожалуйста как отсюда получить координаты курсора?
input_report_rel(dev, REL_X, data[1]);
input_report_rel(dev, REL_Y, data[2]);
-
Helmik
- Сообщения: 9
- ОС: openSUSE
Re: Как написать драйвер для мышки? И где в ядре находится
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.