Как найти драйвер принтера в ядре linux
Существует два полностью отличающихся драйвера устройства для параллельного порта; что вы используете, зависит от версии ядра (которую вы можете узнать с помощью команды uname -a ). Драйвер изменен в Linux версии 2.1.33.
Несколько деталей одинаковы для обоих типов драйвера. Скорее всего, много людей обнаружат, что Linux не обнаруживает параллельного порта, до тех пор пока они не запретят «Plug and Play» в их PC BIOS. (это не является сюрпризом; отслеживание данных о PnP не-PCI устройствах в Windows и где-нибудь еще могут быть чем-то вроде бедствия).
Некоторые пользователи сообщили, что их двунаправленные lp порты не определяются, если они использовали старые однонаправленные кабеля. Проверьте, что вы используете нужный кабель.
Некоторые люди не могут запустить драйвера plip и lp в одно и тоже время на любом заданном порту (в любом случае под 2.0). Однако вы можете загрузить тот или иной драйвер вручную или с помощью kerneld для версий 2.x (и позже 1.3.x) в заданное время. При правильной установке прерываний и подобных вещей, вы по идее можете запустить plip на одном порту, а lp на другом. Некоторые люди делали это редактированием исходного текста драйверов; я с нетерпением ожидаю сообщение о том, что кто-то сделал это только с помощью правильной командной строки.
Существует маленькая утилита, названная tunelp , предназначенная для того, чтобы вы, как администратор, могли настроить для устройств lp Linux 2.0 используемые прерывания, скорость опроса и прочие опции.
Если драйвер встроен в ядро, то ядро может воспринимать опцию lp= для установки прерываний и адресов ввода/вывода:
Когда драйвер lp встроен в ядро, вы можете использовать командную строку LILO/LOADLIN для установки адресов портов и прерываний, которые будет использовать драйвер. Синтаксис: lp=port0[,irq0[,port1[,irq1[,port2[,irq2]]]]] Например: lp=0x378,0 or lp=0x278,5,0x378,7 ** Заметим, что если вы используете это свойство, вы должны указать *все* порты, которые вы хотите учитывать, значений по умолчанию не существует. Вы можете запретить встроенные драйвер с помощью опции lp=0.
Когда драйвер загружен как модуль, то возможно указать адреса ввода/вывода и прерывания в командной строке программы insmod (или в файле /etc/conf.modules , при использовании kerneld) используя обычный синтаксис. Параметры следующие: io=port0,port1,port2 и irq=irq0,irq1,irq2 . Прочитайте справочную страницу для команды insmod для более детальной информации об этом.
**Для тех из вас, кто (подобно мне) никогда не может найти номера стандартных портов когда это нужно, я привел два примера выше. Номер другого порта (для lp0 ) равен 0x3bc. У меня нет никаких идей о том какое прерывание обычно используется.
Исходный код для драйвера параллельного порта Linux 2.0 находится в файле /usr/src/linux/drivers/char/lp.c.
Начиная с ядра 2.1.33 (и доступно как заплатка к ядру 2.0.30), устройство lp является просто клиентом нового устройства parport. Добавление устройства parport исправляет некоторое количество проблем, которые были из-за старого устройства lp — оно может разделять порты с другими устройствами, оно динамически присваивает доступные параллельные порты номерам устройств, вместо использования фиксированных соотношений между адресами ввода/вывода и номером порта, и так далее.
Введение устройства parport позволило создать целую группу новых драйверов параллельного порта для устройств подобных дискам Zip, Backpack CD-ROM и дискам, и так далее. Некоторые из них доступны в ядрах версии 2.0; посмотрите в интернете.
Главное отличие, которое вы отметите, в том, что ядра, основанные на parport динамически присваивают устройства lp для параллельных портов. Так что, то что было lp1 в Linux 2.0 может оказаться lp0 в Linux 2.2. Убедитесь, что вы проверили это если вы делаете обновление с ядра, работающего с драйвером lp на ядро с драйвером parport.
Кажется, что основные проблемы с этим устройством проистекают от неправильной его настройки:
Некоторые дистрибутивы Linux продаются с неправильно настроенными /etc/modules.conf (или /etc/conf.modules), так что драйвер не загружается когда вам это нужно. При использовании недавних версий modutils, правильные строки в modules.conf должны выглядеть так:
alias /dev/printers lp # only for devfs? alias /dev/lp* lp # only for devfs? alias parport_lowlevel parport_pc # missing in Red Hat 6.0-6.1
Много BIOS для персональных компьютеров представляют параллельный порт как устройство Plug-and-Play. Это только добавляет ненужную сложность к великолепному простому устройству, которое почти всегда присутствует; отключите PnP настройки для вашего параллельного порта (который называется «LPT1» во многих BIOSах) в том случае если ваш параллельный порт не определяется драйвером Linux. Правильные настройки часто называются «legacy», «ISA», или «0x378», но скорее всего не «disabled».
Вы также можете прочитать файл Documentation/parport.txt в исходных текстах ядра, или посмотреть на сервере parport.
Последовательные устройства под Linux называются подобно /dev/ttyS1 . Утилита stty позволит вам интерактивно просмотреть или установить параметры последовательного порта setserial позволит вам контролировать некоторые расширенные атрибуты и настроить IRQ и адреса ввода/вывода для нестандартных портов. Дополнительные обсуждения последовательных портов в Linux вы можете найти в Serial-HOWTO.
При использовании медленных последовательных принтеров с контролем потока, вы можете обнаружить, что некоторые из ваших заданий оборваны. Это может быть из-за последовательного порта, чье действие по умолчанию — удалить любые не переданные символы из своего буфера через 30 секунд после того как устройство закрыто. Буфер может содержать до 4096 символов, и если ваш принтер использует контроль потока и медлен настолько, что не может принять все данные из буфера за 30 секунд после того как программа печати закрыла последовательный порт, то конец содержимого буфера будет потерян. Если команда cat file > /dev/ttyS2 делает полный печатный вывод для коротких файлов, но обрезает длинные файлы, то у вас может быть такая проблема.
30-ти секундный интервал может быть выровнен с помощью опции «closing_wait» командной строки программы setserial (версии 2.12 и поздних). Последовательные порты машины обычно инициализируются вызовом setserial в загрузочном файле rc.serial. Вызов для последовательного порта принтера может быть модифицирован для установки параметра closing_wait вместе с установкой других параметров.
Как узнать какой драйвер использует устройство в Ubuntu Linux
Пункт Kernel driver in use.
Автор Zeboton Опубликовано 05.02.2010 25.04.2020 Рубрики Заметки Метки hardware, lspci, драйвера
Как узнать какой драйвер использует устройство в Ubuntu Linux: 6 комментариев
Уведомление: «Я и Ubuntu» » Скорость работы WiFi
нихрена не работает этот способ, куча букв а какая версия драйвера нет
Вася, добавил в исходную заметку картинку, чтобы было понятно что нужно смотреть. Таким образом мы узнаём [b]какой именно драйвер[/b] (правильно всё-таки его называть модулем) использует Linux для устройства. Я не очень понимаю зачем нужна [b]именно версия драйвера[/b], так как она жёстка привязана к версии ядра и обычно для железа говорят, что оно поддерживается, начиная с такой-то версии ядра. Видимо это наследие M$. Если хотите узнать версию ядра, то в терминале нужно выполнить ( $ в начале строки означает, что команда вводится от обычного пользователя и не вводится в терминал. Со второй строки идёт результат выполнения команды. ) :
$ uname -a Linux asus 4.15.0-96-generic #97-Ubuntu SMP Wed Apr 1 03:25:46 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[i]4.15.0-96-generic[/i] и есть версия ядра. Если очень хочется узнать версию модуля, то можно узнать md4-хэш от исходников, использованных для компиляции модуля:
$ modinfo iwlwifi | grep -E '^(src|)version' srcversion: 85B6BF2737FFC0E2C190EE5
Поле version у некоторых модулей тоже присутствует, но редко. Правда, я не знаю для чего может понадобится эта информация.
Viktor :
Версия драйвера важна для видеодрайвера. Тут можно узнать, что для карточки используется драйвер nvidia, а версии нет.
Не забываем, что если устройство работает, то используется модуль, который поддерживает устройство. В случае с проприетарными модулями lspci -v покажет, что используется проприетарный модуль и какой именно. Относительно NVIDIA это должно быть что-то типа (проверить не могу, так как нет доступа к устройству с картой от NVIDIA): nvidia.ko Соответственно, версию нужно уже искать в самом проприетарном модуле:
# modinfo /usr/lib/modules/$(uname -r)/kernel/drivers/video/nvidia.ko | grep ^version
или
# find /usr/lib/modules -name nvidia.ko -exec modinfo <> \; Источник.
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.
Работа с оборудованием в Linux («Сага о Драйверах»)
Когда компьютеры назывались «электронно-вычислительными машинами», они были размерами в среднем с кухонный гарнитур и занимались почти исключительно вычислениями. Ввод и вывод данных воспринимался пользователями ЭВМ — учёными-математиками — как нечто необходимое, но к работе ЭВМ имеющее лишь косвенное отношение. Учёного было довольно просто обучить, чтобы он составлял программы и оформлял входные данные для расчётов одним каким-нибудь способом, например, при помощи перфокарт. Подключение к компьютеру какого-нибудь другого устройства было делом трудоёмким, так как требовало усилий и электронщика, и программиста. Да и нужно это было нечасто.
Нынешний компьютер — игрушка не учёного, а любого рядового обывателя. Это бытовой прибор. Мало того, компьютер — это «самый умный» бытовой прибор: если имеется какой-нибудь другой бытовой прибор (скажем, кофеварка), прогрессивный обыватель тут же задумывается, нельзя ли обучить компьютер управлять этим прибором (скажем, варить кофе за минуту до приезда хозяина). В идеале получается «электронный дом», в котором работу любого оборудования можно контролировать, не вставая из-за рабочего места, или даже не садясь за него — посредством сети Интернет.
Самое поверхностное суждение об оборудовании и компьютере — что для подключения прибора нужна волшебная субстанция по имени «драйвер». Есть драйвер — компьютер оборудование «видит», нет драйвера — «не видит».
Это суждение во многом неверно.
Что такое «оборудование»?
Что и как можно подключить к компьютеру? Во-первых, на поверхности его корпуса обычно наблюдается множество разнообразных отверстий и разъёмов, очевидно предназначенных для того, чтобы туда что-то подключали. Уже подключены: клавиатура, мышь, монитор, возможно — принтер, наушники или колонки. Много отверстий остаётся неиспользованными, но и аппаратуры в «электронном доме» ещё много — от КПК до той же кофеварки (если на ней есть соответствующий разъём).
Во-вторых, внутри компьютера имеются специальные разъёмы для подключения к ним плат расширения: устройств, выглядящих не как бытовой прибор, а скорее как деталь самого компьютера. Таковы видеоадаптеры, сетевые адаптеры, «внутренние» модемы и т. п. Эти устройства — главный источник «Саги о Драйверах», потому что их много, и создатели каждого такого устройства желают сохранить его устройство втайне от конкурентов, прилагая к ним вместо документации ту самую волшебную субстанцию с пометкой «нажмите кнопку “ Пуск ” и попытайтесь расслабиться: от вас уже ничего не зависит».
В-третьих, ещё более внутри компьютера есть какие-то устройства, которые нельзя ни отключить, ни подключить, однако они используются при работе, имеют какое-то название и на разных компьютерах могут весьма отличаться. Например, звуковые подсистемы могут быть интегрированными, а могут быть выполненными в виде платы расширения, отличаясь редкостным разнообразием моделей и однообразием функций (разъём для микрофона, разъём (ы) для колонок, линейный вход. что-то ещё?). Или устройство, к которому подключаются жёсткие диски: оно может быть рассчитано на 1 диск, 2, 4, иногда — более, иметь разные дополнительные свойства. и тоже требовать «драйвера» — по крайней мере, поддержки со стороны системы.
Что точно отличает один прибор от другого — это внешний вид разъёма, с помощью которого они подключаются к компьютеру. Очевидно, приборами, подключаемыми к разъёмам разного типа, машина управляет существенно по-разному. Более того, разъёмы настолько различны, что соединительный кабель одного типа просто не влезет в разъём другого 1 . Но всё равно, это не решает проблемы идентификации: например, мышь, подключённая к разъёму (порту) USB, отлично работает, а с цифровой фотокамерой как-то спроста не получается. Опять «драйвер» нужен?
Можно добавить, что некоторое оборудование вообще не нуждается в том, чтобы машине объявляли о его существовании: так, что бы ни подключалось к аналоговому звуковому входу, работать оно будет одинаково, компьютер не отличит колонки от наушников, да и отсутствия их не заметит. Словом, наружное наблюдение не даёт достаточно информации о том, как работать с оборудованием. На помощь должна прийти документация, но если в ней опять встретится слово «драйвер», оно может означать что угодно: слишком оно неопределённое.
Как распознаётся оборудование?
Попробуем внести определённость. Какую информацию относительно подключаемого прибора получает компьютер, и как он её получает?
- определяет тип подключённого устройства
- управляет им (может, например, выключить или включить)
- передаёт на это устройство данные и/или принимает их оттуда
Шин в компьютере несколько (грубо говоря — по количеству различных типов разъёмов). Есть совсем «глупые» шины — например, порт последовательного ввода-вывода (к нему подключаются мыши и прочая аппаратура «старого образца»). Глупость их в том, что информацию о типе подключённого оборудования приходится задавать вручную — либо заранее, либо с помощью наводящих вопросов пользователю.
Есть шины весьма умные, способные опросить и понять множество характеристик подключённого устройства. Такова, например, шина PCI — наиболее распространённое на сегодня оборудование для подключения плат расширения. Любопытный пользователь может посмотреть список устройств, подключённых к шине PCI с помощью команды lspci (от «list PCI», команда из пакета pciutils ):
[tmpuser@arnor tmpuser]$ lspci 0000:00:00.0 Host bridge: VIA Technologies, Inc. VT8377 [KT400/KT600 AGP] Host Bridge (rev 80) 0000:00:01.0 PCI bridge: VIA Technologies, Inc. VT8237 PCI Bridge 0000:00:0f.0 RAID bus controller: VIA Technologies, Inc. VIA VT6420 SATA RAID Controller (rev 80) 0000:00:0f.1 IDE interface: VIA Technologies, Inc. VT82C586A/B/VT82C686/A/B/VT823x/A/C PIPC Bus Master IDE (rev 06) 0000:00:10.0 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 81) 0000:00:10.1 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 81) 0000:00:10.2 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 81) 0000:00:10.3 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 81) 0000:00:10.4 USB Controller: VIA Technologies, Inc. USB 2.0 (rev 86) 0000:00:11.0 ISA bridge: VIA Technologies, Inc. VT8237 ISA bridge [KT600/K8T800/K8T890 South] 0000:00:11.5 Multimedia audio controller: VIA Technologies, Inc. VT8233/A/8235/8237 AC97 Audio Controller (rev 60) 0000:00:12.0 Ethernet controller: VIA Technologies, Inc. VT6102 [Rhine-II] (rev 78) 0000:01:00.0 VGA compatible controller: ATI Technologies Inc Radeon R100 QD [Radeon 7200]
Пример 1. Команда lspci
Из устройств на иллюстрации только одно — видеокарта Radeon 7200 2 — в действительности является платой расширения, все остальные интегрированы в системную плату (бывает и по-другому). Тип устройства — «Multimedia audio controller», «Ethernet controller», «VGA compatible controller» и т. п. — лишь небольшая часть информации, которую шине рассказали о себе подключённые к ней устройства.
К шине PCI в качестве устройства подключена другая шина — USB, служащая для подсоединения внешних устройств. Она тоже довольно умная, а ещё отличается тем, что устройства подключаются к ней и отключаются от неё довольно часто. Существует команда lsusb (из пакета, естественно, usbutils ), но ей, как и lspci приходится пользоваться нечасто (она даже убрана в каталог /usr/sbin , с глаз пользовательских долой):
[tmpuser@arnor tmpuser]$ /usr/sbin/lsusb Bus 005 Device 001: ID 0000:0000 Bus 004 Device 001: ID 0000:0000 Bus 003 Device 001: ID 0000:0000 Bus 002 Device 002: ID 046d:c00c Logitech, Inc. Optical Wheel Mouse Bus 002 Device 001: ID 0000:0000 Bus 001 Device 003: ID 08ec:0012 M-Systems Flash Disk Pioneers Bus 001 Device 001: ID 0000:0000
Пример 2. Команда lsusb
Пример показывает пять USB-шин (это совпадает с данными lspci ), к первой из которых подключён flash-диск, а ко второй — мышь 3 . Как правило, устройство определяется шиной, после чего специально обученная системная программа производит все действия, необходимые для того, чтобы этим устройством можно было воспользоваться. Например, для flash-диска потребовалось дополнительно загрузить модуль ядра usb_storage , да вдобавок смонтировать содержимое диска в каталог /media/usbdisk .
Специальный каталог /sys отражает представление системы о присоединённых к ней устройствах. В частности, все найденные на шинах устройства перечислены в виде подкаталогов /sys/bus/шина/devices . Если устройство установлено, а умная шина, наподобие PCI или USB, его не заметила — скорее всего неполадка аппаратная (несовместимое или неисправное устройство, таракан в разъёме и т. п.).
Увы. Бывает и так: устройство (видеокарта, модем, кофеварка) на шине появилось, а воспользоваться им не удаётся. Видимо, чего-то не хватает. драйвера?
Что такое «драйвер» и где он находится?
А в самом деле, чего может не хватать, если устройство распозналось, марка устройства — известна и как передавать данные по шине — тоже известно? Не хватает главного: сведений о том, какие данные надо передавать, чтобы добиться от устройства желаемого эффекта. Что передать по шине USB, чтобы кофеварка выключилась? Какие байты записать в последовательный порт модема, чтобы он повесил трубку? Что сделать с видеокартой, чтобы. всё было быстро и непременно 3d!?
- Драйвер — модуль ядра, подсказывающий шине, как правильно обращаться с устройством. Это, как правило, относится к PCI-устройствам и стандартным USB-устройствам. Подключается к ядру командой modprobe имя_модуля (или insmod ). Распознанные и классифицированные устройства (те, для которых есть драйвер-модуль ядра) отображаются в виде подкаталогов /sys/class/класс_устройства/ .
- Драйвер видеокарты — модуль графической подсистемы X11 (X.Org). Подгружается при старте графической оболочки, достаточно лишь указать его в настройках X.Org (с помощью конфигуратора или вручную, в файле /etc/X11/xorg.conf ). Часто требуется и специальный модуль ядра (возможно, несколько), организующий доступ к видеопамяти.
- Драйверы принтера и модема — описание характеристик для, соответственно, подсистемы печати и программы-«звонилки». Что с ними делать дальше, расскажет документация.
- Драйвер — прикладная программа или дополнение (plug-in) к ней (например, драйвер сканера — дополнение утилиты sane , а с некоторыми цифровыми проигрывателями звука «iRiver» можно взаимодействовать с помощью утилиты ifp из пакета ifp-line ). Здесь главное — название программы, а драйвер, скорее всего, уже включён в дистрибутив.
В последнем случае нет никакой зримой информации о том, что устройством действительно можно пользоваться — до тех пор, пока не запущена соответствующая прикладная программа с соответствующими настройками (особенно это касается «глупых» шин наподобие последовательного порта). И в любом случае самостоятельная установка «драйвера» должна сопровождаться вдумчивым чтением документации к нему.
Опять «устройство»?
В документации 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 — это файл-дырка шины, настолько простой, что дальнейшее выяснение типа устройства перекладывается на программу пользователя.
Другой пример — это работа с аппаратурой по шине USB. USB-шин в системе зарегистрировано несколько, и к каждому можно подключить одно или несколько устройств. Для них независимо от типа устройства заводятся файлы-дырки вида usbdev.шина.номер , где каждому новому подключённому устройству просто выдаётся очередной номер . Некоторые звуковые проигрыватели и цифровые фотокамеры распознаются как flash-диски; тогда в дополнение к нетипизированному файлу-дырке создаётся одна или даже несколько дисковых (допустим, само дисковое устройство /dev/sda и единственный раздел с файловой системой на нём /dev/sda1 , который и монтируется в /media/usbdisk ). Другие фотокамеры умеют больше, чем обычный диск: например, транслировать изображение и/или звук, и для них существуют специальные утилиты, например, gphoto2 . В этом случае никакого дополнительного файла-дырки, за исключением /dev/usbdev.шина.номер , не создаётся, и о типе подключённого аппарата догадывается сама gphoto2 .
Кто виноват и что делать?
- Для начала стоит посмотреть на системную консоль (клавиши Ctrl + Alt + F12 ) и в файл /var/log/messages , возможно, системная диагностика подскажет, в чём дело
- Неполадки могут быть аппаратными (проверяется в /sys/bus или с помощью lspci , как сказано выше).
- Hotplug или другая программа автораспознавания может не знать про конкретный подключённый прибор (придётся в режиме суперпользователя вручную загрузить модуль с помощью modprobe , а чтобы не делать этого каждый раз — отредактировать /etc/modules.conf ).
- Возможно, внешнее устройство распозналось и модуль для него есть, но служба udevd , которая заводит файлы-дырки в /dev , выбрала другое название или вовсе не завела нужного устройства (надо проанализировать содержимое /dev и, возможно, настроить udev или саму прикладную программу).
- Ваше устройство может быть слишком новым, а дистрибутив Linux — оказаться слишком старым. В этом случае рекомендуется обновить части системы, содержащие «драйвер» (в зависимости от ситуации — модуль ядра, само ядро, графическую оболочку или её библиотеку, прикладную программу, и т. п.).
- Стоит проверить, что сказано о вашем устройстве в сетевых информационных ресурсах (здесь поможет lspci или подобные ей утилиты, а также http://www.google.com ). Вполне вероятно, там посоветуют загрузить некий заранее собранный модуль ядра (назовут его, конечно, «драйвером») либо подскажут, какую именно программу следует использовать.
- Наконец, ваше устройство может просто не поддерживаться. Печально, но факт: некоторые производители аппаратуры настолько дорожат своими мелкими секретами, что не только не документируют устройство своих устройств, но тщательно скрывают его. Как следствие, Linux-сообщество не в состоянии быстро обеспечить поддержку таинственного прибора. Производители предпочитают писать «драйверы» — хорошие ли, плохие — за свои деньги, а особо жадные ограничиваются только одной, самой распространённой на сегодня пользовательской программной платформой. И это пока, к сожалению, не Linux.
Сказанное выше означает, что после каждого обновления системы устройство, ранее распознававшееся с трудом или вовсе не распознававшееся, может преспокойно заработать, особенно если это устройство относительно новое. Кроме того, стоит со всем вниманием относиться к ситуации, когда производитель прибора не просто анонсирует совместимость с Linux, а предлагает «драйверы» собственного изготовления. И последнее: если вы не в силах справиться с «драйвером» в одиночку — обращайтесь к Linux-сообществу! Вы или получите решение задачи, или в очередной раз подтвердите, что её стоит решать — и тем самым приблизите решение.
1Однако можно, например, подключить наушники вместо микрофона, причём они, скорее всего, будут работать микрофоном. правда, очень тихо.
2Она подключена к шине AGP, которая архитектурно похожа на PCI, поэтому система различия не делает.
3Некоторая путаница может возникнуть из-за того, что строгого соответствия между разъёмами на корпусе и номерами шин нет: «кто первый встал, того и тапки».
4Ну и где тогда находится «драйвер»? да какая разница.
Драйверы и файлы устройств в Linux
Архитектура операционной системы (ОС) Linux устроена таким образом, что весь её потенциал и полноценная работа всецело поддерживаются файловой системой (ФС) даже, когда такая закономерность не очевидна. Одним из таких случаев является, взаимодействие системы с оборудованием. Хотя подобное явление кажется нестандартным. Однако для Linux это основная архитектурная особенность — взаимодействие системы с составляющими её компонентами, оборудованием (его драйверами) происходит посредством ФС. Ключевым объектом взаимодействия, являются специальные файлы для работы оборудования (или устройств) — файлы устройств.
Что такое драйверы и файлы устройств?
При помощи специального системного программного обеспечения (ПО). Система «знает» как получить аппаратные ресурсы оборудования, т. е. «железа». Таким ПО являются драйверы. Основная задача — управление устройствами по командам системы (и/или микропрограммы самого устройства), трансляция команд между девайсом и программным интерфейсом приложения (API) системы. Благодаря драйверам системное ядро может разрабатываться независимо от оборудования. Но при этом разработчикам оборудования следует следить за изменениями и особенностями системных платформ.
Для современных ядер Linux не легко найти несовместимое из-за отсутствия драйверов оборудование. Поскольку многие «железные» новинки довольно быстро осваиваются членами огромного сообщества разработчиков Linux. Сами производители оборудования охотно идут на контакт, предоставляя необходимую информацию для создания ПО девайсов. Поэтому уже разработчиками ядра драйверы включаются в состав ядра Linux, являясь его неотъемлемыми компонентами. Однако, в качестве драйвера может служить пользовательская программа. Таким образом, драйвер может использоваться как из ядра, так и с помощью пользовательских инструкций в виде специальной программы. При использовании пользовательских драйверов (т. е., тех, которые не являются компонентами ядра). В каталоге /dev создаются и используются специальные файлы устройств. Действия, выполняемые с этими файлами отображаются на работу с оборудованием через программное обеспечение. Системное ядро интерпретирует работу с файлом конкретного девайса как специальные команды — вызовы функций драйвера.
При выборе оборудования следует обращать внимание на официальную информацию разработчиков, касательно поддержки оборудования для целевой системы. В систему можно устанавливать только специально разработанные поддерживаемые драйверы, т. е. для конкретного типа версии системы. Иногда можно также воспользоваться результатами работы энтузиастов, которые изучили работу устройства и смогли собрать для него неофициальную версию драйвера.
Взаимодействие системы с файлами устройств
Как уже было отмечено, Linux в каталоге /dev для устройств хранит соответствующие специальные файлы. Система связывает с каждым устройством специальные номера — старший, младший. С помощью этих номеров ядро определяет тип девайса, само устройство в системе, используя полученные данные, транслирует действия над файлом девайса в функции вызова этого устройства, задействовав соответствующий драйвер. Тип оборудования связан со старшим номером, конкретное девайса для данного типа (или драйвера) — с младшим, который еще называют номером модуля.
Файлы устройств подразделяются на два типа:
- блочные — чтение/запись файла производится блоками, размеры которых обычно кратны 512 байтам;
- символьные — чтение/запись осуществляется побайтово.
Для реализации взаимодействия с ядром, драйвера обычно используют стандартный интерфейс, которого достаточно для выполнения всех системных функций, самыми распространёнными являются: ioctl, probe, select, read, write, receive, close, stop, transmit и другие.
В момент, когда над файлом устройства производятся какие-либо операции, ядро их перехватывает в зависимости от типа этих операций вызывает соответствующую системную функцию и далее управление, работа с этой функцией передаются программному обеспечению. Таким образом, Linux работа с оборудованием сводится, по сути, к работе с файлами.
Установка драйверов в Linux
Когда драйверы (пользовательские) устанавливаются в ОС, обычно разработчиками предусматриваются скрипты, выполняющие все служебные действия установки и настройке ПО. Одним из таких действий является создание соответствующего файла устройства для устанавливаемого драйвера. В большинстве случаев пользователю по завершении работы скриптов установки больше ничего делать не нужно. Разве что перезапустить ОС.
Однако, когда например, драйвер собирается самостоятельно. Из исходных кодов или отсутствуют служебные скрипты, выполняющие автоматическую установку. Приходится добавлять файлы оборудования системы вручную. Используя команду mknod со следующим синтаксисом:
mknod имя_файла тип старший младший
Здесь указывается тип девайса: b – блочное устройство, c – символьное. В качестве параметров старший и младший определяются старший и младший номера файла оборудования соответственно.
Для Linux существует специальная система udev. Которая автоматически отслеживает изменения аппаратного обеспечения ОС и выполняет соответствующие действия (по-умолчанию создаёт файлы). Основой udev является демон udevd. Который прослушивает все сообщения от системного ядра. Которые содержат информацию о статусе оборудования. Используя эти данные, а также инструкции из конфигурации, хранящихся в каталогах /etc/udev/ и /lib/udev. Демон udev выполняет добавление, удаление или базовую настройку аппаратного обеспечения системы.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Похожие записи:
- Firewalld, установка и настройка, зоны, NAT, проброс портов
- Пользователи и группы в linux. Добавление удаление редактирование пользователей
- Команда cat в Linux
- Система контроля версий GIT