Страницы

Поиск по вопросам

Показаны сообщения с ярлыком драйвер. Показать все сообщения
Показаны сообщения с ярлыком драйвер. Показать все сообщения

четверг, 19 марта 2020 г.

Написать драйвер PCI устройства в C# 5, используя WDK 7

#c_sharp #windows #драйвер


Вполняю задание по написанию PCI device драйвера. Язык реализации - C# 5. Возник
вопрос -есть ли какая-то документация для новичка по этой теме и как подключить WDK
в C# ?    


Ответы

Ответ 1



На сколько я помню, то никак. Драйвера работают в режиме ядра. C# не умеет компилировать "ядерные" программы. Драйвера пользовательского режима ограчены работой только с USB ( возможно, за 4 года что-то поменялось)

пятница, 14 февраля 2020 г.

Проблемы с Wi-fi на Ubuntu 18.04

#ubuntu #wifi #драйвер #dual_boot


Не коректно работает Wi-fi на Ubuntu 18.04, постоянно рвет интернет.

Комп - Lenovo z80-70

На компе на 2-х разных жестких дисках установлены 2 независимые системы: Windows
10  и Ubuntu 18.04. 

При тестировании скорости интернета с помощью http://www.speedtest.net/ru/ Windows
даёт скорость загрузки 20-30Мбит/с и отдачи 50-60Мбит/с, в то же время Ubuntu 5-7Мбит/с
и 7-10Мбит/с, иногда выдаёт ошибки типа нет связи.

На Windows сначало Wi-fi вообще не работал, но после скачвания из оф.сайта драйверов
матери и Wi-fi, всё стало нормально. Wi-fi определяется в системе как Intel(R) Dual
Band Wireless-AC 3160.

На Ubuntu по lshw -C network выводит:

*-network
       description: Wireless interface
       product: Wireless 3160
       vendor: Intel Corporation
       physical id: 0
       bus info: pci@0000:03:00.0
       logical name: wlp3s0
       version: 93
       serial: f4:06:69:64:1a:54
       width: 64 bits
       clock: 33MHz
       capabilities: bus_master cap_list ethernet physical wireless
       configuration: broadcast=yes driver=iwlwifi driverversion=4.15.0-45-generic
firmware=17.948900127.0 ip=192.168.1.101 latency=0 link=yes multicast=yes wireless=IEEE
802.11
       resources: irq:52 memory:c4000000-c4001fff


Проверил в оф.репозитории , там последняя версия iwlwifi-3160-17.ucode. Этот же файл
есть и в папке /lib/firmware


  UPDATE: роутер, к которому подключается комп - TP-LINK TL-WR841N.
  Согласно документации он работает только на частоте 2,4 ГГц.
  
  UPDATE2: 

lspci | grep Wireless
03:00.0 Network controller: Intel Corporation Wireless 3160 (rev 93)



Как исправить эту проблему?
    


Ответы

Ответ 1



Скорее всего убунту подключилась к точке доступа 2ГГц, а Виндовс переключилась на 5ГГц. BSSID посмотри этой командой и пропиши тот что на 5ГГц в свойствах соединения wifi через меню. iwlist wlp3s0 scanning | grep -C3

Ответ 2



Решение 1 sudo su & echo "options ath9k nohwcrypt=1" >> /etc/modprobe.d/ath9k.conf Это добавит дополнительную строку в файл конфигурации. Перезагрузите компьютер, и у вас все получится. Если это не помогает или у вас нет адаптера Wi-Fi Atheros, попробуйте другие решения. Решение 2 Отключить 802.11n sudo rmmod iwlwif sudo modprobe iwlwifi 11n_disable=1 Если вы не обнаружили значительного увеличения скорости беспроводного соединения, перезагрузите компьютер, чтобы отменить изменения и забыть об этом решении. НО, если у вас это работает и у вас более быстрый WiFi, вы должны сделать изменения постоянными, используя следующие команды: sudo su & echo "options iwlwifi 11n_disable=1" >> /etc/modprobe.d/iwlwifi.conf Решение 3 Исправление ошибки в Debian Avahi-daemon Проблема медленного WiFi в Ubuntu также может быть связана с ошибкой в Avahi-демоне Debian. Ubuntu и многие другие дистрибутивы Linux основаны на Debian, поэтому эта ошибка распространяется и на эти дистрибутивы Linux. Чтобы исправить эту ошибку, вы должны отредактировать файл конфигурации nsswitch. Откройте терминал и используйте следующую команду: sudo gedit /etc/nsswitch.conf Решение 4 Отключение IPv6 поддержки sudo su echo "#disable ipv6" >> /etc/sysctl.conf echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf echo "net.ipv6.conf.lo.disable_ipv6 = 1" >> /etc/sysctl.conf Решение 5 Больше мощности для беспроводного адаптера: sudo iwconfig Это даст вам имя вашего беспроводного устройства. Обычно это должен быть wlan0. Теперь используйте следующую команду sudo iwconfig wlan0 power off Источник: itsfoss

Не получается создать “простейший” драйвер в Ubuntu

#linux #c #драйвер


Не получается создать драйвер в Ubuntu (железный бобёр).

Makefile

# Makefile – makefile of our first driver

# if KERNELRELEASE is defined, we've been invoked from the
# kernel build system and can use its language.
ifneq (${KERNELRELEASE},)
    obj-m := ofd.o
# Otherwise we were called directly from the command line.
# Invoke the kernel build system.
else
    KERNEL_SOURCE := /lib/modules/4.15.0-47-generic/
    PWD := $(shell pwd)
default:
    ${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} modules

clean:
    ${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} clean
endif


ofd.c
    /* ofd.c - Код нашего первого драйвера */
    #include 
    #include 
    #include 

static int __init ofd_init(void) /* Конструктор */
{
    printk(KERN_INFO "dimon ^_^ : ofd registered");
    return 0;
}

static void __exit ofd_exit(void) /* Деструктор*/
{
    printk(KERN_INFO "pumba ;_; : ofd unregistered");
}

module_init(ofd_init);
module_exit(ofd_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("kaban ");
MODULE_DESCRIPTION("Moi perwii draiwer (Our First Driver)");


Получил такой результат 

Делал всё по статье написание простершего драйвера. не знаю почему несобралося :Р



Поправил и добавил ТАБы.

# Makefile – makefile of our first driver

# if KERNELRELEASE is defined, we've been invoked from the
# kernel build system and can use its language.
ifneq (${KERNELRELEASE},)
    obj-m := ofd.o
# Otherwise we were called directly from the command line.
# Invoke the kernel build system.
else
    KERNEL_SOURCE := /lib/modules/4.15.0-47-generic/
    PWD := $(shell pwd)
default:
    ${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} modules

clean:
    ${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} clean
endif


Вот вывод что мне дал компьютер 

comp@comp0:~$ make
make -C /lib/modules/4.15.0-47-generic/ SUBDIRS=/home/comp modules
make[1]: вход в каталог «/lib/modules/4.15.0-47-generic»
make[1]: *** Нет правила для сборки цели «modules».  Останов.
make[1]: выход из каталога «/lib/modules/4.15.0-47-generic»
Makefile:13: recipe for target 'default' failed
make: *** [default] Error 2


Странно,даёт ошибку, хотя ядро я указал верное.

comp@comp0:~$ uname -r 
4.15.0-47-generic

    


Ответы

Ответ 1



в начале строки с рецептом должен стоять символ табуляции. у вас в файле всего две такие строки (обе начинаются с ${MAKE}). проконтролируйте, что в их начале стоит именно символ табуляции, а не пробел. в дополнение: первая из строк, содержащая рецепт, может быть объединена с правилом (см. ссылку выше), через точку с запятой. т.е. вместо: цель: рецепт # здесь в начале строки — символ табуляции можно написать: цель: ; рецепт # здесь только пробелы, которые можно и убрать make -C /lib/modules/4.15.0-47-generic/ SUBDIRS=/home/comp modules make[1]: вход в каталог «/lib/modules/4.15.0-47-generic» make[1]: *** Нет правила для сборки цели «modules». Останов. ну, загляните в каталог, где вы пытаетесь выполнить цель modules: /lib/modules/4.15.0-47-generic/. видите там файл с именем [Mm]akefile или GNUmakefile? думаю, нет. возможно, в этом каталоге есть симлинк с именем build или source (или что-нибудь в этом духе), который указывает на нужный каталог (в котором есть какой-нибудь из перечисленных файлов). вот и попробуйте указать именно этот путь (/lib/modules/4.15.0-47-generic/build/) вместо /lib/modules/4.15.0-47-generic/

Ответ 2



Удалите пробелы - используйте вместо них TAB'ы.

пятница, 24 января 2020 г.

Успешно установлен драйвер неизвестного устройства

#windows #windows_7 #драйвер


После включения компьютера получил тултип о новом устройстве, а через некоторое время
увидел такое окно:



Как понять, что за драйвер был поставлен?

Скриншот из диспетчера устройств:



PS: Windows 7 x64
    


Ответы

Ответ 1



Всё просто - ищи в инете вот эти буквы и станет ясно какое устройство:

среда, 22 января 2020 г.

Написание драйвера Linux с работой с прикладным ПО [закрыт]

#linux #драйвер


        
             
                
                    
                        
                            Закрыт. На этот вопрос невозможно дать объективный ответ.
Ответы на него в данный момент не принимаются.
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            Хотите улучшить этот вопрос? Переформулируйте вопрос,
чтобы на него можно было дать ответ, основанный на фактах и цитатах, отредактировав его.
                        
                        Закрыт 3 года назад.
                                                                                
           
                
        
Здравствуйте.

Подскажите статьи/книги/треды форумов на тему написания драйверов сетевых устройств
под Linux. Интересно написать драйвер, который будет взаимодействовать с обычным пользовательским
приложением (наподобии FUSE, только сеть).

Спасибо.
    


Ответы

Ответ 1



Основная книжка по драйверам Linux: "Драйверы Устройств Linux, Третья Редакция". Это перевод книги "Linux Device Drivers, Third Edition" by Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman "Программирование модулей ядра Linux" Олег Цилюрик. "Linux PCI drivers" Michael Opdenacker Free Electrons. Поскольку практически все сетевые карточки - PCI-ные. Конкретно по сетевым драйверам: http://rus-linux.net/lib.php?name=/MyLDP/algol/realtekdriver.html Конкретно по FUSE: https://www.ibm.com/developerworks/ru/library/l-fuse/

скажите, как можно узнать дату установки драйвера флешки на компьютер

#windows #драйвер #железо #реестр


когда купленная флешка была вставлена в комьютер(гнездо)
началось установка её драйвера на комьютер.

скажите, как можно узнать дату установки драйвера флешки на компьютер
дата\время\год 
    


Ответы

Ответ 1



Дополню. Если необходимая информация о дате отсутствует в файлах, перечисленных Сергеем. То можно выгрузить информацию о создании ветви реестра, связанной с драйвером устройства. Средствами regedit: экспортировать нужную ветвь в txt-файл. В файле будет указано время модификации параметров. Ну и, конечно же, есть отличная бесплатная утилита USBDeview, с помощью которой можно ещё и автоматизировать процесс сбора информации.

Ответ 2



Если это Windows Vista или более поздние, то информацию найдете в C:\Windows\INF\setupapi.dev.log Для Windows XP можно в папке C:\Windows\INF поискать .inf файл установленного драйвера, затем проверить время создания .pnf файла с тем же именем.

воскресенье, 29 декабря 2019 г.

Для чего нужны файлы устройств?

#linux #c #драйвер


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

1) Это файл, который служит неким интерфейсом. Например, когда мы пишем такую команду
echo "hello" > /dev/my_driver, то строка "hello" пишется не в сам файл /dev/my_driver,
а в некий буфер, который нам предоставляет ядро. Так-же с функциями open, read и тд.,
они не открывают сам файл, а просто сигнализируют, что надо создать и открыть некий
файл или прочитать данные. 

2) Это обычный файл, в который мы записываем данные и читаем их оттуда же. При той
же команде echo "hello" > /dev/my_driver, строка "hello" запишется непосредственно
в файл /dev/my_driver. 
    


Ответы

Ответ 1



tl;dr Правильный вариант, скорее, — (1); чтение/запись обрабатывается непосредственно драйвером устройства, промежуточного буфера может и не быть (хотя обычно он есть в пространстве ядра). Что вообще происходит при вызовах open()/read() итд? При системном вызове open() в массив файловых дескрипторов (current->files->fdt->fd), связанный со структурой текущего работающего процесса (current), помещается новая запись (struct fd), которая содержит структуру отождествляемую с открытым файлом (struct file). При этом в поле данной структуры f_op записывается набор операций, которые можно делать с данным файлом (struct file_operations). В итоге вызов open() просто возвращает номер новой выделенной записи в вышеупомянутом массиве. Вызов read() по сути просто достаёт файловых дескриптор из массива с помощью fdgetpos(), проверяет права доступа на чтение/запись и вызывает уже заданную связанную с файлом операцию чтения. Аналогично работают и все прочие вызовы — write/mmap/ioctl итп. Так чем же отличается чтение из обычного файла и из файла-устройства? По сути ни чем: единственное различие в том, что набор операций (struct files_struct) при открытии берётся не от драйвера файловой системы, а от драйвера устройства. Аналогичным образом реализованы и файлы в псевдо-файловых-cистемах /proc и /sys.

Ответ 2



Если говорить о файлах устройств (есть ещё и другие псевдофайлы), то отличие их от обычных ("регулярных") файлов заключается в том, что: регулярные файлы существуют в физической реальности. После записи байта в такой файл мы можем найти место в физическом мире, где этот байт лежит. псевдофайлы (в том числе и файлы устройств) физически не существуют. После записи байта в файл /dev/ttys0 этот байт не присутствует нигде в реальном мире. Совершенно аналогичная ситуация с псевдофайлами из каталогов /proc, /sys и т.д. Запись в эти файлы (при наличии прав доступа) приводит к измению поведения ОС, а вовсе не к тому, что записанный (якобы) байт где-то сохранился. Несколько особая ситуация с псевдофайлами устройств дисковых накопителей. Хотя для /dev/sda1 можно выполнять операции чтения/записи, вот только результат будет довольно неожиданный, так как операции ввода/вывода будут выполняться не с файлами (расположенными ВНУТРИ диска), а с блоками, образующими ФС этого диска. Совершенно особая песня - псевдофайлы сетевых карточек, разделяемой памяти и т.д. которые используются исключительно для управления этими устройствами, а операции ввода/вывода выполняются специальными IOCTL командами, образующими систему сокетов. Короче - это всё сложная и большая тема.

понедельник, 16 декабря 2019 г.

Как написать драйвер клавиатуры под Mac, Win и Linux?

#драйвер #клавиатура


Есть специфическая железка самодельная, с клавиатурой. Есть желание написать драйвер,
чтобы, набирая текст на этой чудо-клаве, текст появлялся в редакторе. Соответственно
чтобы работала в разных ОС.
К сожалению, пока никакой информации про разработку клавиатуры, драйвер клавы под
ОС не нашёл.
Пока не понятно, как решить вопрос с кодировкой, символами, раскладкой и как весь
процесс происходит от нажатия до появления символа на экране.
Прошу подсказать, что почитать, поизучать, и есть ли какие-нибудь наработки.    


Ответы

Ответ 1



Никаких драйверов не нужно. USB устройство, а именно микроконтроллер, должно уметь общаться по USB HID. Если устройство на базе AVR, посмотрите конструктор tmk_keyboard или библиотеки V-USB, LUFA и т.п. В ВК есть сообщество, где вы можете спросить, найти помощь по вопросу. Разрешите полюбопытствовать, что за устройство?

понедельник, 9 декабря 2019 г.

Книги по написанию драйверов под Windows

#windows #драйвер #c #cpp #ассемблер


Доброго времени суток. Задался я тут целью написать драйвер под Windows, да и вообще
разобраться с этим, поэтому прошу у Вас помощи. Подскажите статьи, книги по написанию
драйверов под Windows. Сразу оговорюсь я подхожу к этому серьезно, поэтому готов перелопатить
кучу материала, который хоть как то связан с данной темой. Наверное, мне понадобиться
знание asm и С++ (С я неплохо знаю). Поэтому прошу так же посоветовать дельные книги
по asm.     


Ответы

Ответ 1



Начните с скачивания WinDDK и изучения сэмплов, идущих в поставке. Их довольно-таки много и они неплохо задокументированы. Это даст хороший толчок для старта, ну а дальше — MSDN, — содержит более чем исчерпывающую документацию по вопросам разработки драйверов. Часть вызовов недокументированна и относится к Private API, но использовать их, тем не менее, приходится часто. В этом случае вам понадобятся .dbg файлы соответствующих библиотек для извлечения информации о смещениях в структурах.

Ответ 2



Мне кажется, что вам может пригодиться следующее: Почитать: Уолтер Они. "Использование Microsoft Windows Driver Model" Марк Руссинович, Дэвид Соломон. "Внутреннее устройство Microsoft Windows" "Everything Windows Driver Development". http://www.osronline.com/ Блог: http://redplait.blogspot.ru/ Блог: http://sww-it.ru/ Для разработки: WinDBG -> Virtual KD -> VmWare Workstation с Windows Настроенная переменная _nt_symbol_path Возможно пригодится pykd. Модуль к Windbg для автомазации на Python Исходники некоторых частей Windows, опытные знают где и что взять. Здесь приводить не имеет смысла Рекомендации: Читайте MSDN Если плохо понимаете в MSDN читайте в книгах, но предпочитайте англоязычные Не читайте книги Солдатова Не пытайтесь использовать SoftICE. Он замечателен, но умер. Остался убогий, но всегда актуальный Windbg.

Ответ 3



Из классики вспоминается, например Walter Oney - Programming the Microsoft Windows Driver Model (Уолтер Они - Использование Microsoft Windows Driver Model)

Ответ 4



Если Вам нужно пока только "потренироваться на кошечках", то можно попробовать использовать NuMega DriverStudio - статейка, для написания простейших драйверов и получения представления, она подойдет, хоть и уже малость устарела. А если серьезно драйверами заниматься - то да, - WinDDK.

воскресенье, 8 декабря 2019 г.

Полное блокирование Windows

#cpp #c #winapi #драйвер


Есть задача разработать софт, который полностью блокирует рабочую станцию, показывая
уведомление. Не должны работать никакие Alt+Tab, Ctrl+Alt+Del и т. д., и фокус должен
быть на окне. Пользователь читает уведомление, и после окно закрывается. User32 подтупляет,
и не совсем удобно.

Есть какие-то способы, как, например, работают антивирусы? Как работает UAC? В какую
сторону копать? Стоит требование, чтобы приложение работало на любой Windows. Без библиотек
Windows путь к написанию драйвера?
    


Ответы

Ответ 1



... софт который полностью блокирует рабочую станцию показывая уведомление. Переключите пользователя на свой рабочий стол. Дело в том, что в рамках оконной станции (грубо говоря, одного рабочего места) можно иметь несколько рабочих столов. Они изолированы друг от друга (у каждого есть свой, независимый, список окон). Более того, текущий стол ведёт себя так, будто других столов не существует. Он захватывает весь пользовательский ввод и занимает всю площадь экрана. Кстати, окна UAC (запрос повышения привилегий на затемнённом фоне) как раз и создают для своих нужд отдельный рабочий стол, чтобы ни одна программа не могла перехватить вводимый пароль. Итак, что надо делать: Сохранить дескриптор текущего рабочего стола, чтобы к нему можно было бы вернуться (сам пользователь сможет это сделать только путём выхода из системы): const HDESK hOld = GetThreadDesktop(GetCurrentThreadId()); Создать рабочий стол (в нашем случае с именем reminder): const HDESK hNew = CreateDesktop( TEXT("reminder"), NULL, NULL, 0, DESKTOP_SWITCHDESKTOP | DESKTOP_WRITEOBJECTS | DESKTOP_READOBJECTS | DESKTOP_CREATEWINDOW, NULL ); Переключиться на него, заодно указав, что и все дальнейшие окна мы будем создавать на нём же: SetThreadDesktop(hNew); SwitchDesktop(hNew); ВАЖНО: нам нельзя создавать какие-либо окна на основном рабочем столе, иначе SetThreadDesktop() работать не будет: The SetThreadDesktop function will fail if the calling thread has any windows or hooks on its current desktop (unless the hDesktop parameter is a handle to the current desktop). Создать диалог с напоминанием. Пусть это будет блокирующий MessageBox(): MessageBox(NULL, TEXT("Текст напоминания"), TEXT("Напоминание"), MB_ICONWARNING); Вернуться на исходный рабочий стол: SwitchDesktop(hOld); По окончании работы рабочий стол надо закрыть во избежание утечки ресурсов: CloseDesktop(hNew); Не должны работать никакие Alt+Tab, Ctrl+Alt+Del и т. д. По определённым причинам окно диспетчера задач привязывается не к текущему, а к основному рабочему столу. Поэтому Ctrl+Shift+Esc и даже безопасный Ctrl+Alt+Delete хоть и открывают диспетчер задач, но он станет доступным только после возврата на основной рабочий стол, то есть тогда, когда вы и только вы этого захотите. ...и фокус должен быть на окне. Так как наш диалог является единственным на текущем рабочем столе, он автоматически получит фокус. Вот полный и готовый демонстрационный пример: #include int CALLBACK WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { const HDESK hOld = GetThreadDesktop(GetCurrentThreadId()); const HDESK hNew = CreateDesktop( TEXT("reminder"), NULL, NULL, 0, DESKTOP_SWITCHDESKTOP | DESKTOP_WRITEOBJECTS | DESKTOP_READOBJECTS | DESKTOP_CREATEWINDOW, NULL ); SetThreadDesktop(hNew); SwitchDesktop(hNew); MessageBox(NULL, TEXT("Reminder text"), TEXT("Reminder"), MB_ICONWARNING); SwitchDesktop(hOld); CloseDesktop(hNew); return 0; }

Ответ 2



Сделать универсальной такую программу "легально" - невозможно. Как минимум, столкнетесь с ограничениями прав (в любой нормальной организации все пользователи сидят в домене с очень ограниченными правами.) Соответственно, не сможете программой, запущенной от имени пользователя: Вешать хуки Управлять процессами Управлять сетевой активностью А вот нелегально - пожалуйста. Все просто: Ищете в любом драйвере уязвимость Пишете эксплоит Распространяете Получаете новый WannaCry :)

четверг, 6 июня 2019 г.

Написать драйвер PCI устройства в C# 5, используя WDK 7

Вполняю задание по написанию PCI device драйвера. Язык реализации - C# 5. Возник вопрос -есть ли какая-то документация для новичка по этой теме и как подключить WDK в C# ?


Ответ

На сколько я помню, то никак. Драйвера работают в режиме ядра. C# не умеет компилировать "ядерные" программы. Драйвера пользовательского режима ограчены работой только с USB ( возможно, за 4 года что-то поменялось)

среда, 13 марта 2019 г.

Написание драйвера Linux с работой с прикладным ПО [закрыт]

Здравствуйте.
Подскажите статьи/книги/треды форумов на тему написания драйверов сетевых устройств под Linux. Интересно написать драйвер, который будет взаимодействовать с обычным пользовательским приложением (наподобии FUSE, только сеть).
Спасибо.


Ответ

Основная книжка по драйверам Linux: "Драйверы Устройств Linux, Третья Редакция". Это перевод книги "Linux Device Drivers, Third Edition" by Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman "Программирование модулей ядра Linux" Олег Цилюрик. "Linux PCI drivers" Michael Opdenacker Free Electrons. Поскольку практически все сетевые карточки - PCI-ные.
Конкретно по сетевым драйверам: http://rus-linux.net/lib.php?name=/MyLDP/algol/realtekdriver.html
Конкретно по FUSE: https://www.ibm.com/developerworks/ru/library/l-fuse/

суббота, 27 октября 2018 г.

Как написать драйвер клавиатуры под Mac, Win и Linux?

Есть специфическая железка самодельная, с клавиатурой. Есть желание написать драйвер, чтобы, набирая текст на этой чудо-клаве, текст появлялся в редакторе. Соответственно чтобы работала в разных ОС. К сожалению, пока никакой информации про разработку клавиатуры, драйвер клавы под ОС не нашёл. Пока не понятно, как решить вопрос с кодировкой, символами, раскладкой и как весь процесс происходит от нажатия до появления символа на экране. Прошу подсказать, что почитать, поизучать, и есть ли какие-нибудь наработки.


Ответ

Никаких драйверов не нужно. USB устройство, а именно микроконтроллер, должно уметь общаться по USB HID. Если устройство на базе AVR, посмотрите конструктор tmk_keyboard или библиотеки V-USB, LUFA и т.п. В ВК есть сообщество, где вы можете спросить, найти помощь по вопросу. Разрешите полюбопытствовать, что за устройство?

пятница, 19 октября 2018 г.

Книги по написанию драйверов под Windows

Доброго времени суток. Задался я тут целью написать драйвер под Windows, да и вообще разобраться с этим, поэтому прошу у Вас помощи. Подскажите статьи, книги по написанию драйверов под Windows. Сразу оговорюсь я подхожу к этому серьезно, поэтому готов перелопатить кучу материала, который хоть как то связан с данной темой. Наверное, мне понадобиться знание asm и С++ (С я неплохо знаю). Поэтому прошу так же посоветовать дельные книги по asm.


Ответ

Начните с скачивания WinDDK и изучения сэмплов, идущих в поставке. Их довольно-таки много и они неплохо задокументированы. Это даст хороший толчок для старта, ну а дальше — MSDN, — содержит более чем исчерпывающую документацию по вопросам разработки драйверов. Часть вызовов недокументированна и относится к Private API, но использовать их, тем не менее, приходится часто. В этом случае вам понадобятся .dbg файлы соответствующих библиотек для извлечения информации о смещениях в структурах.