Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 3

Написать модуль ядра, который будет блокировать определённые кнопки мыши

28.03.2012, 14:02. Показов 2003. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

По заданию нужно написать модуль ядра Linux,который будет блокировать определённые кнопки мыши и при нажатии на заблокированную кнопку выводить сообщение(достаточно использовать обычный printk).

Я по интернету полазил, кой какую информацию-то нашёл... В частности полезным для понимания оказалось: Модуль ядра, работа с мышью
Главной проблемой становится то, как разобрать и переиначить(или что-то подменить) стандартный драйвер мыши... Подскажите пожалуйста.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.03.2012, 14:02
Ответы с готовыми решениями:

Написать модуль ядра, который сохраняет в файле журнала все операции изменения файлов внутри заданного каталог
Написать модуль ядра, который сохраняет в файле журнала все операции изменения файлов внутри заданного каталог(платформа разработки - oc...

Написать простейший модуль ядра
Привет. Необходимо написать простейший модуль ядра. Имеются следующие исходники: #include <linux/module.h> #include...

Написать модуль ядра, который сохраняет в файле журнала все операции изменения файлов внутри заданного каталог
Написать модуль ядра, который сохраняет в файле журнала все операции изменения файлов внутри заданного каталога(платформа разработки - oc...

4
Заблокирован
28.03.2012, 20:16
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

когда первый раз читал, подумал, что нужно добавить что то в код ядра, но когда читал второй раз понял, что это не нужно, ну ладно не пропадать же добру...
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
*** linux-3.2.6/drivers/input/input.c   Tue Feb 14 02:17:29 2012
--- linux-3.2.6-test/drivers/input/input.c  Wed Mar 28 22:54:37 2012
***************
*** 32,37 ****
--- 32,39 ----
  MODULE_DESCRIPTION("Input core");
  MODULE_LICENSE("GPL");
  
+ bool block_right_button = false;
+ module_param(block_right_button, bool, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
  #define INPUT_DEVICES 256
  
  static LIST_HEAD(input_dev_list);
***************
*** 349,354 ****
--- 351,361 ----
  {
    unsigned long flags;
  
+   if (block_right_button && code == BTN_RIGHT && value == 1) {
+       pr_info("Right button of device %s blocked", dev->name);
+       return;
+   }
+   
    if (is_event_supported(type, dev->evbit, EV_MAX)) {
  
        spin_lock_irqsave(&dev->event_lock, flags);
***************
*** 2138,2143 ****
--- 2145,2151 ----
  
  static int __init input_init(void)
  {
+   /*block_right_button = false;*/
    int err;
  
    err = class_register(&input_class);

Я не понимаю чем тебя не устраивает мой второй вариант из Модуль ядра, работа с мышью, чтобы блокировал нужно просто добавить одну строчку
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
static void new_event(struct input_handle *handle, unsigned int type, unsigned int code, int value)
{
  switch (code) {
    case BTN_LEFT:
      pr_info("Left");
      break;
    case BTN_RIGHT:
      pr_info("Right");
      return; /*Right button blocked*/
      break;
    case BTN_MIDDLE:
      pr_info("Middle");
      break;      
  }
  
  old_event(handle, type, code, value);
}
1
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 3
30.03.2012, 00:21  [ТС]
Спасибо огромное за помощь! Всё работает! Очень простое и очевидное решение с добавлением return'а...

Хотя без приключений не обошлось: в виртуалке не заработало совсем.. не ловит нажатия мыши=// А как только скомпилил модуль под нормальной системой - всё отлично... нужные кнопки блокирует, сообщения выводит(единственное, приходится лезть в var/log/kernel.log чтобы увидеть сообщения...)
Один нюанс: тачпад нетбука всё равно не виден(кнопки при тачпаде - блокируются, но не он сам).

Вопрос уже для большего понимания... где можно почитать про функции, использованные в данном модуле? А то пока понимание кода "в целом" есть, но не "конкретно"=(
0
Заблокирован
30.03.2012, 17:27
Цитата Сообщение от paztedd Посмотреть сообщение
единственное, приходится лезть в var/log/kernel.log чтобы увидеть сообщения...
cat /proc/kmsg

Цитата Сообщение от paztedd Посмотреть сообщение
Один нюанс: тачпад нетбука всё равно не виден(кнопки при тачпаде - блокируются, но не он сам).
нажатие по тачпаду обрабатывается BTN_TOUCH, если речь об этом

Цитата Сообщение от paztedd Посмотреть сообщение
Вопрос уже для большего понимания... где можно почитать про функции, использованные в данном модуле?
http://lxr.linux.no/#linux+v3.3/
1
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 3
01.04.2012, 00:19  [ТС]
Спасибо!
Чего-то подобное я и искал, но, как-то видимо, слишком лениво и неправильно... Наконец-то нашёл описание структуры input_dev.
Могу сказать, что вроде полезно ещё почитать:
http://www.kernel.org/doc/Docu... amming.txt
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.04.2012, 00:19
Помогаю со студенческими работами здесь

Создайте обработчик события нажатия кнопки мыши на форме (Click), который будет очищать поле ввода
Делаю лабу: Разместите на форме поле ввода (TextBox), метку (Label) и кнопку (Button). Создайте обработчик события нажатия на кнопку,...

Массив: написать модуль, который будет находить максимальный элемент в массиве.
Хочу написать модуль, который будет находить максимальный элемент в массиве. Вот модуль: Unit poisk_max; Interface Type...

Фаервол для ubuntu, который по умолчанию будет блокировать весь трафик
Нужен фаервол для ubuntu который по умолчанию будет блокировать весь трафик

Напишите скрипт, который поможет откл. определённые кнопки на сайте
В вопросе все описал.:coffee2:

Создать приложение в котором в левой чисти экрана будет куб который будет вращаться с помощью "перетаскивания мыши"
Дали задание, не знаю как делать, подскажите пожалуйста. Вот текст задания: Создать приложение в котором в левой чисти экрана будет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru