Обновить

Комментарии 5

Но ведь это совсем не драйвер, а пользовательское ПО, обменивающееся данными с устройством через готовый механизм ОС.

ПО, обменивающееся данными с устройством через готовый механизм ОС.

Выглядит как определение драйвера, имхо

Драйвер не только обменивается данными, но и предоставляет сервис для конечного ПО в том виде, как это принято в данной конкретной ОС. Ну типа /sys/class/blablabla во всяких линуксах, набор функций API в baremetal (если считать это тоже как бы ОС) и т.п.

Можно, конечно, считать driver.exe с набором ключей тоже драйвером, но это явно не типичный случай.

Я не великий специалист, конечно, но

предоставляет сервис для конечного ПО в том виде, как это принято в данной конкретной ОС

вот тут ошибочка закралась, имхо. Драйвер для конечного ПО никакого сервиса не предоставляет. Конечное ПО не в курсе, какой драйвер получает команды - оно с ОС общается.

Если предположить, что это первая статья из цикла - то вполне ок. Ровно из этого кода можно собрать рабочий модуль ядра, который будет что-то полезное делать.

А по поводу того что "пользовательское ПО" - тут по реализации вообще разницы нет, пользовательское оно или в ядре живет. Например, если нам понадобится драйвер USB-мыши написать, мы просто напишем буквально софтину, которая будет по некоторому таймеру опрашивать мышь по USB на тему "куда тебя там шевелили" и писать результат в /dev/mouse. Оно в линуксе прям настолько просто, драйвер - вполне обычная софтина.

Тут всё немного сложнее. На примере windows скажу так: ваш winusb.sys это настоящий драйвер, который вы используете. Но в случае с USB эта кроличья нора ещё глубже.

На самом деле, когда вы подключаете физическое USB устройство в дело вступает драйвер USB Host контроллера, который есть в системе всегда (и даже на Linux). Без этого драйвера ни одно USB устройство работать не будет и именно он предоставляет базовый сервис передачи данных с функцией редиректора (он общий для всех USB устройств). Это с ним работает ваш lsusb, выдавая сырые дескрипторы.

Схожий редиректор у сетевой карты, который может связывать логические TCP порты (просто число в пакете данных) с конкретным приложением, открывшим сокет.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации