• Авторизация


У кого 01-06-2005 17:21 к комментариям - к полной версии - понравилось!


мышиный коврик под линуксом глючит?
Драйвера менять не пробовали?

Подарили мне новый красивый коврик для мышки с надписью Verbatim, я было обрадовалась, но оказалось, что у меня нет для него драйверов. Как ни странно, в ядре 2.4.27 (а также 2.4.21, 2.4.18 и, по-видимому, всех 2.4) нужного драйвера не нашлось. Полезла искать в интернет -- тоже ничего не нашла, в лучшем случае то, что находилось по словам "mouse pad linux driver", оказывалось драйвером для TouchPad'а. На сайте Вербатима про драйвера для ковриков вообще ничего не нашлось. Поискала ещё на разных сайтах, где бывают драйвера, но нашла только драйвер под MS Windows 98, и не для моего Verbatim-а, а вообще для ковриков. Как раз рядом стоит комп с MS Windows 98, я проинсталлировала туда драйвер, подложила под мышку свой коврик -- всё работало! Воодушевленная этим, я решила, что, даже не зная Verbatim-овских спецификаций, можно написать generic драйвер для коврика и под Linux, и он будет работать. Ниже представлено то, что у меня получилось после нескольких часов напряжённого кодирования. Тестировалось с ковриком Verbatim и двумя Noname. Тестировала только под 2.4.27, но по идее должно работать и под другими 2.4. Думаю, несложно переписать и под 2.6. Если кто-то поделится даташитами конкретных моделей ковриков, можно будет добавить их поддержку. Неплохо бы добавить автораспознавание, но я пока не видела ковриков, поддерживающих plug-n-play; единственное, что приходит в голову -- снимать изображение коврика веб-камерой и распознавать с помощью gocr. Ещё, наверное, надо бы добавить возможность поменять модель коврика в /proc на лету без перезагрузки модуля, если пользователь захочет сменить коврик (пока что модель задаётся при загрузке модуля параметром model). Пишите ваши замечания и предложения, следующую версию модуля планируется выпустить через год.
Замеченные баги: при загрузке insmod выдаёт предупреждение, что моё ядро будет заражено кодом с не-GPL лицензией. Не уверена, это баг в моём модуле или в ядре. Как побороть -- не знаю.

(C) Olya Briginets

==== start of file mpad.c ====

/* mpad.c
* generic linux mousepad driver
*/

#include module.h>
#include proc_fs.h>

#define DRV_VERSION "0.0.1"
#define MODEL_GENERIC "Generic"

char *model;
int size[2];
MODULE_PARM (model, "s");
MODULE_PARM_DESC (model, "Mouse Pad model (default Generic)");
MODULE_PARM (size, "2i");
MODULE_PARM_DESC (size, "Mouse Pad width and height in mm (default 0)");

int mpad_read_proc (char *buf, char **start, off_t offset,
int count, int *eof, void *data)
{
int len = 0;
len += sprintf(buf+len,"model:\t%.80s\n", model);
len += sprintf(buf+len,"width:\t%d\n", size[0]);
len += sprintf(buf+len,"height:\t%d\n", size[1]);
*eof = 1;
return len;
}

static int __init mpad_init(void)
{
if (!model) model=MODEL_GENERIC;
create_proc_read_entry ("driver/mousepad", 0, NULL, mpad_read_proc, NULL);
printk(KERN_INFO "Mouse Pad Driver v" DRV_VERSION "\n");
return 0;

}

static void __exit mpad_exit (void)
{
remove_proc_entry ("driver/mousepad", NULL);
printk(KERN_INFO "Mouse Pad Driver unloaded\n");

}

module_init(mpad_init);
module_exit(mpad_exit);
EXPORT_NO_SYMBOLS;

MODULE_AUTHOR("Olya <bolya@ukrpost.net>");
MODULE_DESCRIPTION("Generic driver for mouse pad");
MODULE_LICENSE("Public Domain");

==== end of file mpad.c ====

==== start of file Makefile ====
CC=gcc
MODCFLAGS := -Wall -I/usr/src/linux/include -DMODULE -D__KERNEL__ -DLINUX

mpad.o: mpad.c
#/usr/src/linux/include/linux/version.h
$(CC) $(MODCFLAGS) -c mpad.c
==== end of file Makefile ====
вверх^ к полной версии понравилось! в evernote
Комментарии (2):
wwk 01-06-2005-23:51 удалить
Я знал, что тебе понравится :)


Комментарии (2): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник У кого | wwk - Дневник Ленивого кота | Лента друзей wwk / Полная версия Добавить в друзья Страницы: раньше»