Что такое драйверы устройств линукс

Драйвер Linux для устройства.

Многие новички интересуются как установить драйвер для железяки в Linux.
То есть проводят аналогию с MS Windows, в которой для оборудования требовались многочисленные Далее-Далее в дистрибутивах драйверов.

Дело в том, что в мире Windows принято устанавливать драйвера от производителя железяки и это кажется естественным и разумным. Но в мире Linux, исторически сложилась по другому приципу модель «драйверов».

Но сначала напомню, а что же такое драйвер.

— это программа (некий программный код), который «обслуживает» железяку и служит «прослойкой» между железякой и операционной системой.

Эта модель эффективна, так как операционной системе не нужно знать, как общаться с миллионами устройств по всему миру. Операционная система будет общаться с драйвером по согласованным правилам, а уже драйвер будет общаться с железякой, для которой он и был написан.

А теперь историческая сводка, почему в Линуксе чуть другая система работы с драйверами.

Вы думаете, что когда Линукс делал свои первые шаги, все производители своих железяк бросились писать драйвера для Линукс? Нет. Этого не случилось. Многие не верили в будущий успех Linux на рынке Desktop систем и прямо заявляли, что не станут тратить время своих программистов на написание кода драйвера под Linux, который на рынке занимал маленький процент.

Поэтому драйвера писали энтузиасты, которые хотели видеть работающей в Линуксе ту или иную железяку. Иногда фирмы всё таки помогали так или иначе энтузиастам. Например, публиковали спецификации на свои устройства, чтобы программистам было проще понять логику работы железяки и не мучатся со сложной «обратной разработкой» (reverse engineering).

С ростом популярности Линукс, многие фирмы даже стали выделяли часть сотрудников, которые так или иначе занимались вопросом работоспособности устройства в Линуксе.

Но факт есть факт, исторически так получилось, что открытое сообщество, работающее над ядром линукс во главе с Линусом Торвальдсом, включало после проверки код драйвера в ядро linux. Так как устройствами в системе линукс занимается именно его ядро. То есть, постепенно всё больше и больше писалось драйверов и все они в своё время были включены в ядро. Поэтому, чем новее используемое вами ядро, тем выше шанс, что железяка «запустится».

Раньше традиционно все драйвера, а точнее их код, «размещался» в ядре. Позднее код драйверов стали выносить в отдельные «модули ядра» и загружать в основное ядро с помощью специального механизма.

Любой спросит, а можно ли драйвера устройства написанные для MS Windows, как-нибудь «прикрутить» в Linux. Проведу вам аналогию. Если операционную систему сравнить с «матерью», то у «мамы Windows» свои дети-программы, а следовательно и дети-драйвера. У «мамы Linux» свои.

Есть проекты типа NDISwrapper, которые пытаются использовать не родной код драйвера. В случае с NDISwrapper — это попытка использовать драйверы беспроводных устройств Wi-Fi, предназначенные для операционной системы Microsoft Windows в операционной системе Linux.

Но вы должны понимать, это не просто и лучший вариант всё таки родной драйвер.

Дак как же «поставить драйвер в Linux»?
Самое лучшее — проверить штатными средствами вашей системы, что определилось и что уже работает сразу «искаропки». Помните, что 99-ю процентами устройств в линуксе занимается ядро линукс.

В Ubuntu есть Менеджер драйверов (Драйверы Устройств), которые покажет те устройства, для которых есть проприетарные (закрытые) драйвера от производителя. Если производители не закрывали бы коды своих драйверов, как они делают это в MS Windows, то у вас не было бы никаких проблем и всё было оформлено заранее в виде соответствующих модулей ядра.

Не нужно ничего устанавливать вручную, если не понимаете, что делаете. Это чревато тем, что при вашем обновлении новыми ядрами — 99% что ваш вручную установленный драйвер «слетит». Новое ядро не будет уведомлено о ваших вручную сделанных изменениях-костылях и многое «рухнет». Например, вручную установленный непонятно откуда взятый драйвер видеокарты при обновлении ядра может «слететь» и следующая загрузка в ваше графическое окружение может закончиться неудачно.

Читайте также:  По для майнинга под линукс

Для искоренения этой ситуации во многих дистрибутивах линукс используется система DKMS, которая при выходе новых ядер перекомпилирует код драйверов.

Утомил?
Кратко! Обновляйтесь и не используйте старые версии вашего дистрибутива. Одно дело использовать стабильные долгоподдерживаемые релизы Ubuntu LTS, а другое дело просто сидеть на старом релизе, боясь обновлений.

Помните! Новее ядро — выше шанс, что железяка заработает.

При прочтении каких-либо советов из Интернета — будьте предельно аккуратны! Наши друзья это — репозитория и/или deb пакеты.
Не нужны всякие make install в современных системах Linux, основанных на идеи пакетного менеджмента, в таких как Ubuntu Linux.

Похожие материалы:
Установка программ в Ubuntu
Репозитории Ubuntu
Делаем отчёт по оборудованию в MS Windows — получаем результат о поддержке Линуксом Linux HCL : поддерживаемое оборудование

Источник

Драйверы устройств в Linux

Часть 1: Драйверы устройств Linux для вашей знакомой

Оригинал: «Device Drivers, Part 1: Linux Device Drivers for Your Girl Friend»
Автор: Anil Kumar Pugalia
Дата публикации: November 1, 2010
Перевод: Н.Ромоданов
Дата перевода: июнь 2012 г.

Цель этой серии статей о драйверах Linux — рассказать об обычной технической теме так, чтобы она была интересна более широкому кругу читателей.

«После недели напряженной работы, мы, наконец, добились, что теперь наш driver (драйвер / водитель) работает» — были первые слова Пагса, когда он встретил свою знакомую Светлану.

«Почему? Какой твой driver (драйвер / водитель)? Что, он был болен? И что за тяжелую работу ты сделал?», — спросила Светлана. Растерявшись, Пагс, в свою очередь, спросил: «О чем ты говоришь?»

Теперь настала очередь Светланы быть озадаченной и она ответила: «Почему ты меня спрашиваешь? Ты сказал мне — о каком из твоих driver (драйверов / водителей) ты говоришь? «

Когда Пагс понял, о чем идет речь, он застонал: «Ах, да! Это не driver (драйвер / водитель) моей машины — я говорю о driver (драйвере / водителе) устройства на моем компьютере «.

«Я знаю о driver (драйверах / водителах) машин и автобусов, о летчиках и даже об отвертках; но что это за «driver (драйвер / водитель) устройства» — озадаченно спросила Светлана.

Этого было достаточно, чтобы Пагс погрузился в страстное объяснение драйверов устройств для новичка — в частности, драйверов устройств для Linux, с которыми он работал на протяжении многих лет.

Этот диалог мог в англоязычной среде вызвать непонимание между собеседниками. Дело в том, что в обыденной речи в англоязычной среде слово driver означает — водитель, например, водитель машины, тогда как если слово driver употребляется при обсуждении оборудования и программного обеспечения компьютеров, то оно почти наверняка означает — драйвер, т. е. специальный модуль, с помощью которого происходит управление некоторым устройством, для которого написан конкретный драйвер. Т.е., в некотором смысле это тоже «водитель» устройства, с помощью которого происходит управление, но в русскоязычной среде для этого используется прямая калька с английского driver — драйвер.

Аналогичное смешение понятий может вызвать английское слово bus, которое в обыденной речи переводится как «автобус», например, school-bus – школьный автобус или автобус для школьников. Но при обсуждении компьютерного оборудования термином bus называют шину, которая обычно представляет собой некоторое количество соединительных линий, к которым подключаются отдельные устройства.

О драйверах / водителях (drivers) и шинах / автобусах (buses)

Драйвер управляет, контролирует, ведет, следит за работой объекта, который подчиняется командам драйвера. Драйвер шины управляет работой шины, драйвер устройства управляет работой устройства (частью оборудования, подключенного к компьютеру), например, мышью, клавиатурой, монитором, жестким диском, веб-камерой, часами и многим другим.

Кроме того, «водителем» может быть человек или даже автоматическая система, управление которой возложено на человека (например, система автопилота в самолете). Аналогичным образом управление определенной частью аппаратных средств может осуществляться некоторой частью программного обеспечения (драйвером устройства), или может осуществляться другим устройством, управление которым, в свою очередь, может выполняться программой — драйвером устройства. В последнем случае, такое управляющее устройство обычно называется контроллером устройств. Для него, поскольку оно само является устройством, необходим драйвер, который обычно называют bus driver или драйвер шины (термин bus driver, если он используется в контексте обычного разговора, можно перевести и как «водитель автобуса» — прим.пер.).

Читайте также:  Windows named pipe name

К числу обычных примеров контроллеров устройств относятся контроллеры жестких дисков, контроллеры дисплеев и контроллеры аудиоустройств, с помощью которых осуществляется управление устройствами, подключаемыми к контроллерам. В качестве более подробных технических примеров можно рассмотреть контроллер IDE, контроллер PCI, USB-контроллер, контроллер SPI, контроллер I2C и т.д. Графически, вся эта концепция может быть изображена так, как показано на рис.1.

Рис.1: Взаимодействие устройств и драйверов

Контроллеры устройств, как правило, подключаются к процессору через шины, имеюшие определенное название (набор физичсеких линий подключения) — например, шина PCI, шина IDE, и т.д. В современном мире встроенных технологий мы чаще сталкиваемся с микроконтроллерами, а не процессорами; это те же самые процессоры и плюс контроллеры различных устройств, реализованные на одном чипе. Такая встроенная реализация контроллеров устройств в первую очередь снижает стоимость и уменьшает занимаемое пространство, что делает микроконтроллер удобным для использования во встраиваемых системах. В таких случаях шины интегрированы в сам чип. Меняет ли это что-либо для драйверов или, в более общем случае, в используемом программном обеспечении?

Ответ на этот вопрос не так уж сложен — разве что драйверы шин для контроллеров соответствующих встроенных устройств будут теперь разрабатываться под зонтиком конкретной архитектуры.

Драйверы состоят из двух частей

В драйверах шин предоставляются специальные аппаратные интерфейсы для соответствующих аппаратных протоколов оборудования и эти драйверы являются самыми нижними горизонтальными программно реализуемыми слоями операционной системы (ОС). Над ними расположены драйверы конкретных устройств. Они работают с лежащими ниже устройствами через горизонтальный слой интерефейсов и разрабатываются для каждого конкретного устройства. Тем не менее, сама идея написания таких драйверов позволяет предоставить пользователю абстрагированный доступ и, тем самым, реализовать на другом «конце» интерфейс (который будет варьироваться в зависимости от ОС). Короче говоря, драйвер устройства состоит из двух частей, одна из которых а) является специфической для конкретного устройства, а другая б) является специфической для ОС. Смотрите рис.2.

Рис.2: Отдельные части драйвера Linux

Часть драйвера устройства, характерная для конкретного устройства, будет одной и той же во всех операционных системах и в большей мере она связана с анализом и пониманием спецификаций устройства, а не с программированием. Спецификации устройства представляют собой документ, в котором описываются технические особенности устройства, в том числе его функционирование, пропускную способность, программирование и т.д. — в общем, это — руководство пользователя устройства.

Позже я также приведу несколько примеров расшифровки спецификации. Тем не менее, та часть драйвера, которая зависит от ОС, тесно взаимодействует с механизмами ОС, реализующими пользовательский интерфейс, и, поэтому, она будет отличаться в драйверах устройств для Linux, в драйверах устройств для Windows и в драйверах устройств для MacOS.

Вертикали

В Linux драйвер устройства предоставляет пользователю интерфейс «системного вызова»; в Linux это граница между так называемым пространством ядра и пользовательским пространством, что и показано на рис.2. На рис.3 представлена более подробная классификации.

Рис.3: Общая схема ядра Linux

Если рассматривать интерфейс драйвера с учетом специфики использования драйверов в ОС, то в системе Linux драйверы можно по вертикали грубо разделить на три группы:

  • Пакетно-ориентированная или сетевая вертикаль
  • Блочно-ориентированная вертикаль или вертикаль хранения данных
  • Байт-ориентированная вертикаль или вертикаль работы с символами

Вертикаль процессора и вертикаль памяти, рассматриваемые вместе с этим тремя вертикалями, дают полное представление о ядре Linux, соответствующее определению ОС, которое есть в любом учебнике: «В операционной системе реализуется 5 основных функций управления: управление процессором / процессом, памятью, сетью, средствами хранения данных, устройствами ввода / вывода». Хотя эти вертикали процессора и памяти можно классифицировать как драйверы устройств, где процессор и память будут соответствующими устройствами, их, по ряду причин, трактуют по-другому.

Читайте также:  Прог для windows mobile

Таковы основные функциональные возможности любой ОС, будь то микроядро или монолитное ядро. Чаще всего добавление кода именно в эти области представляет собой основную часть работы по портированию Linux, что обычно делается для нового процессора и архитектуры. Более того, код в этих двух вертикалях нельзя, в отличие от трех других вертикалей, загружать или выгружать «на лету». Так что когда мы теперь будем говорить о драйверах устройств в Linux, мы будем говорить только о тех трех вертикалях, которые расположены на рис.3 справа.

Давайте заглянем немного глубже внутрь этих трех вертикалей. Сетевая вертикаль состоит из двух частей: а) стек сетевых протоколов и б) драйверы устройств карт сетевых интерфейсов (NIC) или просто драйверы сетевых устройств, которые могут предназначаться для Ethernet, Wi-Fi или любой другой сетевой горизонтали. Вертикаль хранения данных, опять же, состоит из двух частей: а) драйверов файловых систем, предназначенных для декодирования разнообразных форматов данных в различных разделах файловых систем, и б) драйверов блочных устройств для различных (аппаратных) протоколов хранения данных, т.е. горизонталей, таких как IDE, SCSI, MTD и т.д.

При этом, вы можете задать вопрос, действительно ли это только набор устройств, для которых нужны драйвера (или, для которых в Linux драйвера уже есть). Имейте терпение, вам, конечно, нужны драйверы для всей этой массы устройств, которые взаимодействуют с системой, и в Linux действительно есть для них драйверы. Однако из-за их байт-ориентированного доступа все они попадают в вертикаль работы с символами — их, на самом деле, огромное количество. В действительности из-за огромного количества драйверов в этой вертикали, для драйверов, предназначенных для работы с символьными устройствами, используется дополнительная подклассификация — так что у вас есть драйверы терминалов, драйверы ввода/вывода, драйверы консоли, драйверы фрейм-буфера, звуковые драйверы и т.д. Типичными горизонталями здесь будут RS232, PS/2, VGA, I2C, I2S, SPI и т.д.

Драйверы со множественными вертикалями

Последнее замечание относительно полной картины (размещения всех драйверов в экосистеме драйверов Linux): такие горизонтали, как USB, PCI и т.д., расширяются ниже на несколько вертикалей. Почему это происходит?

Очень просто — вы уже знаете, что у вас может быть флешка-ключ USB Wi-Fi, флешка USB и преобразователь USB-последовательный порт, но все эти три устройства USB попадают в три различные вертикали!

В Linux драйвера шин или горизонтали часто подразделяются на две части, или даже на два драйвера: а) контроллер конкретного устройства и б) абстрактный слой, находящийся над ним и используемый в качестве интерфейсам к вертикалям, обычно называемыми ядрами. Классическим примером могут быть драйвера USB-контроллера ohci, ehci и т.д. и USB-абстракция — usbcore.

Подведем итог

Итак, в заключение, драйвер устройства представляет собой часть программного обеспечения, с помощью которого осуществляется управление устройством (хотя есть очень много других классификаций). В случае, если с его помощью осуществляется управление только другой частью программного обеспечения, мы называем его просто драйвером. Примерами являются драйверы файловой системы, драйвер usbcore и т.д. Таким образом, все драйверы устройств являются драйверами, но не все драйверы являются драйверами устройств.

«Эй, Пагс, остановись; мы опаздываем на занятия, и ты знаешь, какие из-за этого могут возникнуть проблемы. Давай позже продолжим с этого места» — воскликнула Светлана.

Вскочив, Пагс закончил свое объяснение: «Хорошо. Это основа теории о драйверах устройств. Если тебе интересно, я позже могу показать тебе код, и все, что мы делали для различных драйверов». И они поспешили к своей аудитории.

Источник

Оцените статью