
Комментарии 5
Но ведь это совсем не драйвер, а пользовательское ПО, обменивающееся данными с устройством через готовый механизм ОС.
ПО, обменивающееся данными с устройством через готовый механизм ОС.
Выглядит как определение драйвера, имхо
Драйвер не только обменивается данными, но и предоставляет сервис для конечного ПО в том виде, как это принято в данной конкретной ОС. Ну типа /sys/class/blablabla во всяких линуксах, набор функций API в baremetal (если считать это тоже как бы ОС) и т.п.
Можно, конечно, считать driver.exe с набором ключей тоже драйвером, но это явно не типичный случай.
Я не великий специалист, конечно, но
предоставляет сервис для конечного ПО в том виде, как это принято в данной конкретной ОС
вот тут ошибочка закралась, имхо. Драйвер для конечного ПО никакого сервиса не предоставляет. Конечное ПО не в курсе, какой драйвер получает команды - оно с ОС общается.
Если предположить, что это первая статья из цикла - то вполне ок. Ровно из этого кода можно собрать рабочий модуль ядра, который будет что-то полезное делать.
А по поводу того что "пользовательское ПО" - тут по реализации вообще разницы нет, пользовательское оно или в ядре живет. Например, если нам понадобится драйвер USB-мыши написать, мы просто напишем буквально софтину, которая будет по некоторому таймеру опрашивать мышь по USB на тему "куда тебя там шевелили" и писать результат в /dev/mouse. Оно в линуксе прям настолько просто, драйвер - вполне обычная софтина.
Тут всё немного сложнее. На примере windows скажу так: ваш winusb.sys это настоящий драйвер, который вы используете. Но в случае с USB эта кроличья нора ещё глубже.
На самом деле, когда вы подключаете физическое USB устройство в дело вступает драйвер USB Host контроллера, который есть в системе всегда (и даже на Linux). Без этого драйвера ни одно USB устройство работать не будет и именно он предоставляет базовый сервис передачи данных с функцией редиректора (он общий для всех USB устройств). Это с ним работает ваш lsusb, выдавая сырые дескрипторы.
Схожий редиректор у сетевой карты, который может связывать логические TCP порты (просто число в пакете данных) с конкретным приложением, открывшим сокет.
USB для разработчиков ПО: введение в создание драйверов