- Добавление драйвера устройства в Linux
- Способы установки драйверов
- Ручная установка драйвера
- Использование нового драйвера
- Как в Linux установить пакет (драйвер) если нет Интернет-подключения
- 1. Использование проводного соединения
- 2.Подключить USB адаптер для которого драйвера присутствуют в ядре Linux
- 3. Офлайн установка пакетов
- 4. Установка пакетов с Live или установочного диска
- Драйверы устройств в Linux
- Часть 1: Драйверы устройств Linux для вашей знакомой
- О драйверах / водителях (drivers) и шинах / автобусах (buses)
- Драйверы состоят из двух частей
- Вертикали
- Драйверы со множественными вертикалями
- Подведем итог
Добавление драйвера устройства в Linux
Обычно в системах Unix и Linux установка драйверов для новых устройств не вызывает трудностей. Даже для неопытных пользователей этих систем. Но это в том случае, если производители устройства (и/или разработчики драйверов) позаботились об этом. И оснастили пакет драйвера специальными установочными и конфигурационными скриптами. А также протестировали всё это в нескольких системах. Однако бывают случаи, когда «удобной» возможности установить драйвер устройства нет, но есть исходные коды драйвера. В таком случае можно попытаться собрать драйвер самостоятельно. Конечно, это далеко не так просто, нужно поэкспериментировать. Но успешный результат возможен с высокой вероятностью. И главное, что для этого требуется — это знать и понимать общий порядок действий в случае ручной сборки драйвера. С такими задачами часто сталкиваются администраторы систем, обслуживающих технологические процессы на производствах, хостинг-площадки и т. д.
Способы установки драйверов
Для Linux-систем установка драйверов устройств происходит тремя основными способами:
- установка патча для определённых версий ядра;
- использование специальных сценариев для установки и конфигурации драйвера;
- с помощью загружаемого модуля ядра.
Надо признать, что для Linux ручная установка драйверов представляет собой довольно сложную и трудоёмкую работу. Поэтому разработчики стремятся всё чаще обеспечивать автоматическую установку и настройку для своих драйверов/устройств. Ведь они заинтересованы в максимально эффективном распространении своих разработок. По этой причине самым распространённым способом установки драйверов является использование сценариев установки. Для самых популярных типов устройств, например для видеокарт, аудиоустройств и даже для сетевого оборудования в настоящее время трудно найти драйверы без автоматической установки.Установка таких драйверов ничем не отличается от установки обычных пакетов. Вся инструкция описана в файле README, подробнее об установке из исходников читайте здесь.
Но есть оборудование (всевозможные адаптеры, преобразователи интерфейсов) и ситуации, для которых есть только исходные коды драйвера (часто не официальные) и необходимость интеграции его с ядром.
Если в качестве драйвера используются патчи ядра, то установить их (собственно и сам драйвер) можно выполнив следующие команды:
Расположение «каталог_исходных_кодов_ядра» зависит от системы, в CentOS это /usr/lib/modules/ /kernel, Например
В случае с ручной установкой, необходимо для начала интегрировать драйвер некоего устройства (исходные коды) в дерево каталогов исходных кодов ядра.
Ручная установка драйвера
Для примера, пусть требуется добавить в ядро драйвер некоего сетевого устройства netdevice. Драйвер этого устройства нужно (как уже известно) поместить в один из каталогов с исходными кодами ядра. А именно — в каталог drivers, внутри которого может быть следующее содержимое:
Драйверы чаще всего помещаются в подкаталоги scsi, char, block, net, а также sound и usb. Эти подкаталоги отражают схему размещения драйверов в зависимости от их типа: блочные — для дисков IDE, символьные — для последовательных портов например, для сетевых устройств, звуковых плат и USB-устройств — USB-адаптеры, USB-модемы и т. д. Другие подкаталоги служат для размещения драйверов других категорий, в частности для системных и разного рода шин (pci, pcie, nubus, zorro), а также для платформенно-зависимых драйверов — acorn, macintosh.
Таким образом, драйверы для сетевого устройства netdevice следует поместить в следующий каталог:
Исходные коды драйвера представляют собой набор файлов *.c, *.cpp и *.h, которые могут быть объединены в дерево каталогов, в зависимости от того, как составлен проект «исходников» драйвера.
Теперь необходимо включить исходные коды драйвера netdevice в процесс компиляции ядра. Для этого нужно отредактировать следующие файлы:
- /drivers/net/Makefile – для сборки самого драйвера;
- /drivers/net/Kconfig – для того, чтобы имя нового устройства было доступно для конфигурирования.
Файлы Makefile и Kconfig содержатся в каждом каталоге дерева каталогов с исходными кодами ядра Linux. Это необходимо для организации универсальной разработки и расширения функционала и возможностей ядра при его сборке из исходных кодов путём независимого дополнения новым кодом. В данном случае кодом драйвера для устройства netdevice.
В файл Makefile следует добавить следующий код:
Таким образом, при сборке ядра в его составе будет собран и сам драйвер netdevice. После дополнения файла Kconfig следующим кодом:
устройство netdevice будет доступно для использования конфигурационным макросом (необходимо на этапе конфигурирования сборки ядра). Здесь команда config использует ключевое слово NETDEVICE_DEV, которое обязательно должно совпадать с фразой, следующей после CONFIG, которое ранее было указано в файле Makefile.
Команда tristate указывает, что драйвер может быть собран как загружаемый модуль, если это поддерживается. Если нет, то вместо tristate следует указать bool – драйвер будет частью ядра. Фраза ‘Netdevice support’ будет отображаться в выводе конфигурационного скрипта на этапе конфигурирования сборки ядра. Это может быть любой текст, идентифицирующий устройство, для которого добавляется драйвер.
Использование нового драйвера
В современных версиях ядра Linux задействование новых драйверов существенно упрощено. В отличие версий, выпущенных раньше 2.6. Тогда это было настоящей головоломкой и требовало знаний в программировании. Но архитектурные изменения в модели драйверов и устройств, пришедшие в версии 2.6 позволяют теперь связывать драйверы с ядром на более высоком «общепользовательском» уровне. Для этого используется специальный конфигурационный макрос MODULE_DEVICE_TABLE. Он создаёт соответствия, которые позволяют утилите modprobe (и ей подобным) задействовать новые драйверы ядра.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник
Как в Linux установить пакет (драйвер) если нет Интернет-подключения
В настоящее время при работе с операционными системами подразумевается, что она всегда подключена к Интернету. Поэтому диски с драйверами сетевых карт больше не входят в комплект при продаже. И может возникнуть ситуация, что невозможно установить драйвер устройства, поскольку нет сетевого соединения, а сетевого соединения нет, потому что невозможно установить драйвер устройства. Рассмотрим несколько способов, как вырваться из этого замкнутого круга.
1. Использование проводного соединения
Если вы не можете настроить Wi-Fi подключение, то соедините компьютер с роутером проводом. Обычно Ethernet кабели уже входят в комплект роутеров. Есть высокий шанс, что ваш Linux поддерживает чипсет Ethernet гнезда и он работает без дополнительных пакетов. Обычно проводные соединения не требуют особой настройки.
2.Подключить USB адаптер для которого драйвера присутствуют в ядре Linux
Подойдёт практически любой USB адаптер кроме самых экзотических — в ядре Linux есть драйвера практически для всего. То есть вы получите Интернет и сможете сделать обычную установку.
3. Офлайн установка пакетов
На Linux с Интернетом вы можете скачать пакеты вручную:
А затем установить их на компьютере без Интернета:
В теории это всего две команды, но на практике возможны следующие проблемы:
Чтобы пакеты подошли, дистрибутив, на котором вы скачиваете должен быть таким же и такой же версии, где вы затем будете устанавливать пакеты. Иначе вам нужно искать ссылки для каждого пакета для вашего дистрибутива и скачивать вручную
У каждого из этих пакетов могут быть зависимости, а у тех зависимостей могут быть другие зависимости…
В общем, посмотреть зависимости можно командой:
Или вариант попроще, запустите команду (делать установку необязательно):
и посмотрите, какие пакеты будут предложены для установки. Скопируйте названия этих пакетов и загрузите с помощью «apt download».
4. Установка пакетов с Live или установочного диска
В репозиториях в качестве источника пакетов нужно прописать CD диск.
Для этого выполните команду:
Если, например, вы добавляете образ Wheezy, будет сгенерирован следующий результат:
Источник
Драйверы устройств в 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, если он используется в контексте обычного разговора, можно перевести и как «водитель автобуса» — прим.пер.).
К числу обычных примеров контроллеров устройств относятся контроллеры жестких дисков, контроллеры дисплеев и контроллеры аудиоустройств, с помощью которых осуществляется управление устройствами, подключаемыми к контроллерам. В качестве более подробных технических примеров можно рассмотреть контроллер IDE, контроллер PCI, USB-контроллер, контроллер SPI, контроллер I2C и т.д. Графически, вся эта концепция может быть изображена так, как показано на рис.1.
Рис.1: Взаимодействие устройств и драйверов
Контроллеры устройств, как правило, подключаются к процессору через шины, имеюшие определенное название (набор физичсеких линий подключения) — например, шина PCI, шина IDE, и т.д. В современном мире встроенных технологий мы чаще сталкиваемся с микроконтроллерами, а не процессорами; это те же самые процессоры и плюс контроллеры различных устройств, реализованные на одном чипе. Такая встроенная реализация контроллеров устройств в первую очередь снижает стоимость и уменьшает занимаемое пространство, что делает микроконтроллер удобным для использования во встраиваемых системах. В таких случаях шины интегрированы в сам чип. Меняет ли это что-либо для драйверов или, в более общем случае, в используемом программном обеспечении?
Ответ на этот вопрос не так уж сложен — разве что драйверы шин для контроллеров соответствующих встроенных устройств будут теперь разрабатываться под зонтиком конкретной архитектуры.
Драйверы состоят из двух частей
В драйверах шин предоставляются специальные аппаратные интерфейсы для соответствующих аппаратных протоколов оборудования и эти драйверы являются самыми нижними горизонтальными программно реализуемыми слоями операционной системы (ОС). Над ними расположены драйверы конкретных устройств. Они работают с лежащими ниже устройствами через горизонтальный слой интерефейсов и разрабатываются для каждого конкретного устройства. Тем не менее, сама идея написания таких драйверов позволяет предоставить пользователю абстрагированный доступ и, тем самым, реализовать на другом «конце» интерфейс (который будет варьироваться в зависимости от ОС). Короче говоря, драйвер устройства состоит из двух частей, одна из которых а) является специфической для конкретного устройства, а другая б) является специфической для ОС. Смотрите рис.2.
Рис.2: Отдельные части драйвера Linux
Часть драйвера устройства, характерная для конкретного устройства, будет одной и той же во всех операционных системах и в большей мере она связана с анализом и пониманием спецификаций устройства, а не с программированием. Спецификации устройства представляют собой документ, в котором описываются технические особенности устройства, в том числе его функционирование, пропускную способность, программирование и т.д. — в общем, это — руководство пользователя устройства.
Позже я также приведу несколько примеров расшифровки спецификации. Тем не менее, та часть драйвера, которая зависит от ОС, тесно взаимодействует с механизмами ОС, реализующими пользовательский интерфейс, и, поэтому, она будет отличаться в драйверах устройств для Linux, в драйверах устройств для Windows и в драйверах устройств для MacOS.
Вертикали
В Linux драйвер устройства предоставляет пользователю интерфейс «системного вызова»; в Linux это граница между так называемым пространством ядра и пользовательским пространством, что и показано на рис.2. На рис.3 представлена более подробная классификации.
Рис.3: Общая схема ядра Linux
Если рассматривать интерфейс драйвера с учетом специфики использования драйверов в ОС, то в системе Linux драйверы можно по вертикали грубо разделить на три группы:
- Пакетно-ориентированная или сетевая вертикаль
- Блочно-ориентированная вертикаль или вертикаль хранения данных
- Байт-ориентированная вертикаль или вертикаль работы с символами
Вертикаль процессора и вертикаль памяти, рассматриваемые вместе с этим тремя вертикалями, дают полное представление о ядре Linux, соответствующее определению ОС, которое есть в любом учебнике: «В операционной системе реализуется 5 основных функций управления: управление процессором / процессом, памятью, сетью, средствами хранения данных, устройствами ввода / вывода». Хотя эти вертикали процессора и памяти можно классифицировать как драйверы устройств, где процессор и память будут соответствующими устройствами, их, по ряду причин, трактуют по-другому.
Таковы основные функциональные возможности любой ОС, будь то микроядро или монолитное ядро. Чаще всего добавление кода именно в эти области представляет собой основную часть работы по портированию 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 и т.д. Таким образом, все драйверы устройств являются драйверами, но не все драйверы являются драйверами устройств.
«Эй, Пагс, остановись; мы опаздываем на занятия, и ты знаешь, какие из-за этого могут возникнуть проблемы. Давай позже продолжим с этого места» — воскликнула Светлана.
Вскочив, Пагс закончил свое объяснение: «Хорошо. Это основа теории о драйверах устройств. Если тебе интересно, я позже могу показать тебе код, и все, что мы делали для различных драйверов». И они поспешили к своей аудитории.
Источник