Как посмотреть драйвера в linux

Обновлено: 07.07.2024

Когда компьютеры назывались «электронно-вычислительными машинами», они были размерами в среднем с кухонный гарнитур и занимались почти исключительно вычислениями. Ввод и вывод данных воспринимался пользователями ЭВМ — учёными-математиками — как нечто необходимое, но к работе ЭВМ имеющее лишь косвенное отношение. Учёного было довольно просто обучить, чтобы он составлял программы и оформлял входные данные для расчётов одним каким-нибудь способом, например, при помощи перфокарт. Подключение к компьютеру какого-нибудь другого устройства было делом трудоёмким, так как требовало усилий и электронщика, и программиста. Да и нужно это было нечасто.

Нынешний компьютер — игрушка не учёного, а любого рядового обывателя. Это бытовой прибор. Мало того, компьютер — это «самый умный» бытовой прибор: если имеется какой-нибудь другой бытовой прибор (скажем, кофеварка), прогрессивный обыватель тут же задумывается, нельзя ли обучить компьютер управлять этим прибором (скажем, варить кофе за минуту до приезда хозяина). В идеале получается «электронный дом», в котором работу любого оборудования можно контролировать, не вставая из-за рабочего места, или даже не садясь за него — посредством сети Интернет.

Самое поверхностное суждение об оборудовании и компьютере — что для подключения прибора нужна волшебная субстанция по имени «драйвер». Есть драйвер — компьютер оборудование «видит», нет драйвера — «не видит».

Это суждение во многом неверно.

Что такое «оборудование»?

Что и как можно подключить к компьютеру? Во-первых, на поверхности его корпуса обычно наблюдается множество разнообразных отверстий и разъёмов, очевидно предназначенных для того, чтобы туда что-то подключали. Уже подключены: клавиатура, мышь, монитор, возможно — принтер, наушники или колонки. Много отверстий остаётся неиспользованными, но и аппаратуры в «электронном доме» ещё много — от КПК до той же кофеварки (если на ней есть соответствующий разъём).

Во-вторых, внутри компьютера имеются специальные разъёмы для подключения к ним плат расширения: устройств, выглядящих не как бытовой прибор, а скорее как деталь самого компьютера. Таковы видеоадаптеры, сетевые адаптеры, «внутренние» модемы и т. п. Эти устройства — главный источник «Саги о Драйверах», потому что их много, и создатели каждого такого устройства желают сохранить его устройство втайне от конкурентов, прилагая к ним вместо документации ту самую волшебную субстанцию с пометкой «нажмите кнопку “ Пуск ” и попытайтесь расслабиться: от вас уже ничего не зависит».

В-третьих, ещё более внутри компьютера есть какие-то устройства, которые нельзя ни отключить, ни подключить, однако они используются при работе, имеют какое-то название и на разных компьютерах могут весьма отличаться. Например, звуковые подсистемы могут быть интегрированными, а могут быть выполненными в виде платы расширения, отличаясь редкостным разнообразием моделей и однообразием функций (разъём для микрофона, разъём (ы) для колонок, линейный вход. что-то ещё?). Или устройство, к которому подключаются жёсткие диски: оно может быть рассчитано на 1 диск, 2, 4, иногда — более, иметь разные дополнительные свойства. и тоже требовать «драйвера» — по крайней мере, поддержки со стороны системы.

Что точно отличает один прибор от другого — это внешний вид разъёма, с помощью которого они подключаются к компьютеру. Очевидно, приборами, подключаемыми к разъёмам разного типа, машина управляет существенно по-разному. Более того, разъёмы настолько различны, что соединительный кабель одного типа просто не влезет в разъём другого 1 . Но всё равно, это не решает проблемы идентификации: например, мышь, подключённая к разъёму (порту) USB, отлично работает, а с цифровой фотокамерой как-то спроста не получается. Опять «драйвер» нужен?

Можно добавить, что некоторое оборудование вообще не нуждается в том, чтобы машине объявляли о его существовании: так, что бы ни подключалось к аналоговому звуковому входу, работать оно будет одинаково, компьютер не отличит колонки от наушников, да и отсутствия их не заметит. Словом, наружное наблюдение не даёт достаточно информации о том, как работать с оборудованием. На помощь должна прийти документация, но если в ней опять встретится слово «драйвер», оно может означать что угодно: слишком оно неопределённое.

Как распознаётся оборудование?

Попробуем внести определённость. Какую информацию относительно подключаемого прибора получает компьютер, и как он её получает?

  • определяет тип подключённого устройства
  • управляет им (может, например, выключить или включить)
  • передаёт на это устройство данные и/или принимает их оттуда

Шин в компьютере несколько (грубо говоря — по количеству различных типов разъёмов). Есть совсем «глупые» шины — например, порт последовательного ввода-вывода (к нему подключаются мыши и прочая аппаратура «старого образца»). Глупость их в том, что информацию о типе подключённого оборудования приходится задавать вручную — либо заранее, либо с помощью наводящих вопросов пользователю.

Есть шины весьма умные, способные опросить и понять множество характеристик подключённого устройства. Такова, например, шина PCI — наиболее распространённое на сегодня оборудование для подключения плат расширения. Любопытный пользователь может посмотреть список устройств, подключённых к шине PCI с помощью команды lspci (от «list PCI», команда из пакета pciutils ):


Из устройств на иллюстрации только одно — видеокарта Radeon 7200 2 — в действительности является платой расширения, все остальные интегрированы в системную плату (бывает и по-другому). Тип устройства — «Multimedia audio controller», «Ethernet controller», «VGA compatible controller» и т. п. — лишь небольшая часть информации, которую шине рассказали о себе подключённые к ней устройства.

К шине PCI в качестве устройства подключена другая шина — USB, служащая для подсоединения внешних устройств. Она тоже довольно умная, а ещё отличается тем, что устройства подключаются к ней и отключаются от неё довольно часто. Существует команда lsusb (из пакета, естественно, usbutils ), но ей, как и lspci приходится пользоваться нечасто (она даже убрана в каталог /usr/sbin , с глаз пользовательских долой):


Пример показывает пять USB-шин (это совпадает с данными lspci ), к первой из которых подключён flash-диск, а ко второй — мышь 3 . Как правило, устройство определяется шиной, после чего специально обученная системная программа производит все действия, необходимые для того, чтобы этим устройством можно было воспользоваться. Например, для flash-диска потребовалось дополнительно загрузить модуль ядра usb_storage , да вдобавок смонтировать содержимое диска в каталог /media/usbdisk .

Специальный каталог /sys отражает представление системы о присоединённых к ней устройствах. В частности, все найденные на шинах устройства перечислены в виде подкаталогов /sys/bus/шина/devices . Если устройство установлено, а умная шина, наподобие PCI или USB, его не заметила — скорее всего неполадка аппаратная (несовместимое или неисправное устройство, таракан в разъёме и т. п.).

Увы. Бывает и так: устройство (видеокарта, модем, кофеварка) на шине появилось, а воспользоваться им не удаётся. Видимо, чего-то не хватает. драйвера?

Что такое «драйвер» и где он находится?

А в самом деле, чего может не хватать, если устройство распозналось, марка устройства — известна и как передавать данные по шине — тоже известно? Не хватает главного: сведений о том, какие данные надо передавать, чтобы добиться от устройства желаемого эффекта. Что передать по шине USB, чтобы кофеварка выключилась? Какие байты записать в последовательный порт модема, чтобы он повесил трубку? Что сделать с видеокартой, чтобы. всё было быстро и непременно 3d!?

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

Опять «устройство»?

В документации Linux термин «устройство» (device) часто используется не в значении «прибор», а в значении «элемент каталога /dev ». Что это такое?

Прибор подключается к машине, как правило, для того, чтобы передавать на него какие-то данные и/или получать их оттуда. Если задача компьютера — управлять внешним устройством, это всё равно можно рассматривать как передачу управляющих данных и приём диагностических. Во многих случаях передачу данных проще всего вести в синхронном (поточном) режиме, точно так же, как это делается при работе с файлом: открыть файл — записать данные — закрыть файл или открыть — прочитать — закрыть. Если бы можно было представить внутренность прибора в виде файла, работа с ним пошла бы легче: это означало бы, что система знает, как и куда передавать данные, а дело пользовательской программы — эти данные понимать 4 .

В большинстве случаев именно так и устроено в Linux. После того, как система распознала внешнее устройство, а служба hotplug , при необходимости, загрузила соответствующий модуль ядра, в каталоге /dev заводится новый «файл», содержимое которого отражает содержимое подключённого устройства, не занимая при этом места на жёстком диске. Такой файл называется файлом-дыркой, его можно представить как отверстие в файловой системе, через которое видно не содержимое жёсткого диска, а данные, попадающие туда с «другой стороны» — со стороны подключённого внешнего устройства. Например, гибкий диск в дисководе представляется в виде файла-дырки /dev/fd0 , (от floppy disk 0), а мышь — в виде /dev/mouse (строго говоря /dev/mouse — этот обычно символьная ссылка на актуальный файл-дырку — скажем /dev/psaux , порт PS/2).

В документации вместо «файл-дырка» чаще всего пишут просто «устройство» (device), а устройство-прибор — «внешним устройством». Если соответствующего устройства в каталоге /dev/ нет — значит, в цепочке его распознавания есть слабое звено.

Стоит напомнить, что файл-дырка, однако, не обязан существовать и непременно соответствовать одному внешнему устройству. Устройства, подключаемые ко второму последовательному порту, например, всегда видны как /dev/ttyS1 (а к первому — как ttyS0 ). Фактически, ttyS — это файл-дырка шины, настолько простой, что дальнейшее выяснение типа устройства перекладывается на программу пользователя.

Кто виноват и что делать?

1Однако можно, например, подключить наушники вместо микрофона, причём они, скорее всего, будут работать микрофоном. правда, очень тихо.

2Она подключена к шине AGP, которая архитектурно похожа на PCI, поэтому система различия не делает.

3Некоторая путаница может возникнуть из-за того, что строгого соответствия между разъёмами на корпусе и номерами шин нет: «кто первый встал, того и тапки».

Драйверы - это программы подобные обычному программному обеспечению. Разница лишь в том, что для их работы не требуется постоянное вмешательство пользователя. Они служат для взаимодействия ваших аппаратных средств между собой. Как все просто. Вам необходимо улучшить их использование операционной системой.

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

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

Установка

Подобно любому программному обеспечению, драйверы могут быть скомпилированными или нет. Обычно они не скомпилированы. Драйверы обычно распространяются в виде исходных текстов, с целью достижения максимально возможной совместимости аппаратных средств на установленной платформе. Это значит, что вам придется компилировать их из исходных текстов. Элементарно! Мы уже знаем как это сделать.

Если поставщик оборудования является щедрым, он, возможно, дополнит поставляемый драйвер само-устанавливающим скриптом. Другими словами, вам будет нужно только запустить одну команду, которая выполнит: распаковку архива, компиляцию, установку и загрузку драйвера. Но это может не работать. Я был свидетелем как само-устанавливающийся скрипт драйвера работал неверно. По этой причине, для всех практических задач, вам следует устанавливать драйвер вручную.

После успешной распаковки из архива и компиляции исходников (./configure, make, make install), вы, скорее всего, столкнетесь с выбором из трех вариантов:

  • Драйвер будет полностью сконфигурирован и скопирован в папки, выбранные по умолчанию, и системные пути будут обновлены. В этом случае, вам не нужно ничего делать, чтобы использовать драйвер.
  • Драйвер будет сконфигурирован автоматически, и системные пути будут обновлены. Это значит, что вы только добавите имя драйвера в список загружаемых драйверов начальной загрузки, чтобы он загружался автоматически при запуске системы.
  • Драйвер будет готов к использованию, но не будет сконфигурирован, системные пути не будут обновлены. Вам придется вручную загрузить драйвер и затем обновить список загружаемых драйверов начальной загрузки, чтобы он загружался автоматически при запуске системы.

При втором варианте, процесс установки, будет выглядеть следующим образом:

Теперь только остается добавить этот драйвер в список загружаемых драйверов при запуске системы. В Linux драйвера часто называют модулями .

Вам нужно открыть конфигурационный файл, содержащий список модулей. Также необходимо знать его точное имя и размещение файла в вашем дистрибутиве. В Ubuntu этот файл называется modules.conf и размещается в /etc каталоге ( /etc/modules.conf ). Мы обновим этот файл, но вначале мы сделаем его резервную копию. Пожалуйста помните, что для изменения конфигурационных файлов нужны права суперпользователя.

Так будет выглядеть эта процедура:

Приведенные выше команды откроют файл modules.conf в текстовом редакторе gedit. Теперь, просто добавьте драйвер в пустую строку ниже существующих драйверов, сохраните файл, выйдите из текстового редактора и перезагрузите систему, чтобы изменения вступили в силу. Это все!

Вот пример, файла modules.conf для Kubuntu Linux, установленной на виртуальной машине. Добавим новый драйвер. Мы просто запишем его имя ниже существующих записей. Конечно, необходимо знать ТОЧНОЕ имя соответствующего драйвера.


Третий вариант немного более сложный.

Загрузка драйверов

Вы успешно скомпилировали драйвер, но ничего не произошло. Это получилось потому, что драйвер еще не включен. Посмотрев внутрь каталога, вы заметите файл с расширением .ko . Это и есть ваш драйвер, и его необходимо загрузить вручную.

Нам нужно установить драйвер в ядро. Это можно сделать с помощью команды insmod .

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

Если вы случайно сделали серьезную ошибку и хотите удалить драйвер, то можете воспользоваться командой rmmod :

Конфигурирование драйверов

Конфигурирование драйвера требует немного знаний о его функциональности. Чаще всего инструкции находятся в текстовых файлах how-to руководства.

Ниже приведенный пример показывает как конфигурировать сетевую карту после загрузки сетевого драйвера. Сетевой карте присвоен идентификатор и IP адрес. В данном случае, eth0 - имя выбранного устройства, но оно может быть другим, например: eth1, eth2 и т. д. . Назначенный IP адрес показывает нам, что машина будет частью локальной сети.

После перезагрузки вы увидите, что сетевое подключение отсутствует. Это происходит из-за того, что драйвер отсутствует в общем каталоге по умолчанию, и система не знает, где его искать. Вам придется повторить всю процедуру снова:

Скрипты

Как и в системах DOS и Windows, скрипты могут быть написаны в текстовом редакторе. Учитывая внутренние различия между текстовыми файлами и скриптами, необходимо различать текстовые файлы и скрипты. В системе Windows достаточно изменить расширение .txt на .bat и файл станет скриптом. В Linux немного по-другому.

Командная строка Linux находится внутри оболочки или, точнее сказать, и есть сама оболочка или Шелл (Shell). Существует несколько оболочек, каждая со своим уникальным набором команд. Самая популярная (устанавливается по умолчанию) оболочка Linux это BASH . Нам необходимо добавить информацию в наш скрипт, если хотим сделать его связанным с нашей оболочкой.

Таким образом, записав в файл приведенные выше команды плюс ссылка на оболочку, получим следующий скрипт:

Можно сделать это короче:

Теперь у нас есть рабочий скрипт. Или точнее текстовый файл, который содержит соответствующие команды. Нам необходимо сделать его исполняемым файлом. Во-первых, нужно сохранить этот файл. Назовем его network_script .

Сделаем скрипт исполняемым.

Теперь у нас есть работающий скрипт. Нам нужно разместить его в каталоге /etc/init.d и он будет запускаться во время начальной загрузки системы.

В завершение нужно обновить систему для активации скрипта.

После перезагрузки вы поймете, что драйвер загружен автоматически и сетевая карта сконфигурирована! Возможен и другой вариант, make install и драйвер будет помещен в каталог по умолчанию:

Или вы могли разместить драйвер в этом каталоге сами. Таким образом, вы могли бы избежать написания скрипта.

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

Вообще говоря, в Ubuntu по умолчанию присутствуют все необходимые драйверы для всех поддерживаемых устройств. Однако для некоторых устройств существуют так же проприетарные драйверы от производителя, которые из-за забористых лицензий необходимо устанавливать отдельно.

Что бы посмотреть список доступных для вашей системы проприетарных драйверов зайдите в меню Система-Администрирование-Драйверы устройств. У вас должно быть рабочее подключение к интернету, поскольку поиск драйверов происходит именно в нём. После поиска система покажет вам список всех доступных драйверов, в моём случае он выглядит так:


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

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


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


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

Кроме того, к сожалению, до сих пор встречаются случаи, когда из-за некорректной по отношению к конечному пользователю политики производителей оборудования драйверов для определённых устройств в Ubuntu нет и получить их через программу поиска так же нельзя. В этом случае стоит попробовать поискать в интернете, зачастую существуют сторонние драйвера, которые можно установить вручную. Либо же обратиться в техподдержку производителя, попросив у них хотя бы необходимую для работы устройства документацию, называемую спецификациями, при наличии спецификаций огромное количество программистов с радостью напишут для вас всё необходимое для работы вашего устройства.

Не пугайтесь, если вы только ещё планируете поставить Ubuntu и читаете эту статью, большинство устройств работает в Ubuntu что называется «из коробки», то есть сразу после установки безо всяких дополнительных манипуляций. И с каждым новым выпуском Ubuntu остаётся всё меньше и меньше неподдерживаемых устройств, сейчас уже это в подавляющем большинстве отдельные модели периферии, то есть подключаемых дополнительных устройств вроде принтеров или сканеров. Но перед покупкой нового оборудования стоит всё-таки воспользоваться поиском и посмотреть, поддерживается ли желаемое устройство в Linux, потому что шанс нарваться на неподдерживаемое «железо» всё-таки есть.

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

Как я могу узнать, какой модуль /драйвер «управляет»?

Можно ли вставить код /sys или /proc , чтобы узнать это?

4 ответа

Чтобы получить эту информацию из sysfs для файла устройства, сначала определите основной /младший номер, просмотрев вывод ls -l , например

8, 0 сообщает нам, что основное число 8 , а младший - 0 . b в начале списка также сообщает нам, что это блок-устройство. Другие устройства могут иметь c для символьного устройства в начале.

Если вы посмотрите в /sys/dev , вы увидите, что есть два каталога. Один называется block и один называется char . Бесполезность здесь заключается в том, что они предназначены для блочных и символьных устройств соответственно. Каждое устройство затем доступно по его основному /второстепенному номеру этого каталога. Если для устройства имеется доступный драйвер, его можно найти, читая цель ссылки driver в этом подкаталоге device . Например, для моего /dev/sda я могу просто сделать:

Это показывает, что для устройства используется драйвер sd . Если вы не уверены, что устройство является блочным или символьным устройством, в оболочке вы можете просто заменить эту часть на * . Это работает так же хорошо:

Блочные устройства также могут быть доступны непосредственно через их имя через /sys/block или /sys/class/block . Например:

Обратите внимание, что существование различных каталогов в /sys может меняться в зависимости от конфигурации ядра. Кроме того, не все устройства имеют подпапку device . Например, это касается файлов устройств разделов, таких как /dev/sda1 . Здесь вам нужно получить доступ к устройству для всего диска (к сожалению, для этого нет ссылок sys ).

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

Наконец, чтобы немного отклониться от вопроса, я добавлю еще один трюк /sys , чтобы получить гораздо более широкую перспективу, по которой используются драйверы, с помощью которых (хотя и не обязательно с файл устройства):

Update

Более внимательно рассмотрев вывод udevadm , он работает, найдя канонический каталог /sys (как вы бы это сделали, если вы разыменовали основные /младшие каталоги выше), затем прокладывая путь к дереву каталогов, распечатывая любую информацию, которую он находит. Таким образом, вы получаете информацию о родительских устройствах и любых драйверах, которые они используют.

Чтобы поэкспериментировать с этим, я написал сценарий ниже, чтобы подойти к дереву каталогов и отобразить информацию на каждом соответствующем уровне. udev , похоже, ищет читаемые файлы на каждом уровне, причем их имена и содержимое включены в ATTRS . Вместо этого я показываю содержимое файлов uevent на каждом уровне (видимо, наличие этого определяет отличный уровень, а не только подкаталог). Я также показываю базовое имя любых подсистемных ссылок, которые я нахожу, и это показывает, как устройство соответствует этой иерархии. udevadm не отображает одну и ту же информацию, поэтому это хороший дополнительный инструмент. Информация родительского устройства (например, PCI ) также полезна, есливы хотите совместить выходные данные других инструментов, таких как lshw , с устройствами более высокого уровня.

Вы можете использовать инструмент udevadm , чтобы обнаружить это.
Команда будет udevadm info -a -n /dev/sda , а затем просмотрите параметры DRIVER== .

Это показывает, что на самом деле в этом устройстве есть 2 драйвера, sd и ahci . Первый, sd несет прямую ответственность за устройство /dev/sda , но он использует драйвер ahci .

Результат команды udevadm выглядит так и включает описание того, как это работает.

Используйте команду hwinfo и модель вывода и драйвер. Если драйвер отсутствует, он не будет показан. Например, для дисков:

Для сетевых карт:

Для устройств USB:

Используйте hwinfo --help, чтобы узнать, какие другие типы устройств вы можете запросить. hwinfo устанавливается по умолчанию, например. на SUSE Linux.

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

Используйте yum или apt-get в зависимости от используемой системы. Затем, чтобы конкретно указать оборудование для хранения:

Вы можете запустить его как root , чтобы вернуть всю информацию.

В противном случае lspci также может предоставить информацию о вашем оборудовании:

Чтобы узнать основной и младший номер устройства, просто запустите ls .

В этом выводе b в brw-rw----. означает, что это блочное устройство. Цифрами 8 и 0 являются соответственно основной и младший номер устройства.

Читайте также: