Установка новых устройств linux

Добавление драйвера устройства в 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’ будет отображаться в выводе конфигурационного скрипта на этапе конфигурирования сборки ядра. Это может быть любой текст, идентифицирующий устройство, для которого добавляется драйвер.

Читайте также:  Disk error mac os

Использование нового драйвера

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Подключение и конфигурация устройств в операционной системе Linux. Установка программ и компонентов в операционной системе Linux

Цель работы: Получить навыки подключения и конфигурирования устройств, установки программ и компонентов в ОС Linux.

    1. Краткие теоретические сведения

Linux не является операционной системой, в полной мере поддерживающей технологию самоконфигурирования Plug-and-Play (PnP). Но в состав Linux входят средства, обеспечивающие обнаружение и распознавание устройств, подключенных к системе. Это противоречие (по крайней мере, с первого взгляда) требует пояснений.

Plug and Play представляет собой технологию самоконфигурирования, призванную автоматически обнаруживать и конфигурировать подсоединенные к компьютеру устройства. Полностью соответствующая требованиям РпР система включает четыре разновидности компонентов: PnP BIOS, материнская плата РnР, PnP-устройства, и операционная система РnР.

Большинство современных BIOS и устройств удовлетворяют требованиям самоконфигурирования Plug and Play. Если у вас к тому же и материнская плата РпР, то BIOS установит каналы, порты и адреса для таких устройств, как накопители, мышь и клавиатура. Это конфигурирование завершается еще до начала загрузки операционной системы. Linux может использовать эти каналы для обнаружения и распознавания аппаратуры компьютера с разной степенью достоверности. Успех распознавания в частности зависит от типа устройства.

Технология самоконфигурирования Plug and Play устанавливает связь между устройствами и базовыми компонентами компьютера, такими как процессор и оперативная память. Устройства компьютера обмениваются, используя различные каналы, адреса и порты:

— IRQ (Запросы прерываний). Устройства могут использовать IRQ-порты запросов прерываний, чтобы получить доступ к процессору.

— I/O (Ввод-вывод). Для обмена между отдельными компонентами компьютера необходимо место в адресном пространстве. Это место определяется адресами ввода-вывода (I/O).

— DMA (Прямой доступ к памяти). Некоторые устройства могут обмениваться с памятью посредством каналов прямого доступа (DMA), минуя процессор.

Типы используемых устройствами каналов, адресов и портов зависят от типов устройств и способа подключения этих устройств к компьютеру. Если у вас возникают сложности с такими устройствами, как модем или акустический адаптер, то вполне вероятной причиной может служить попытка системы Linux использовать несоответствующие данному устройству IRQ-порт, I/O-адрес или DMA-канал.

Многие периферийные устройства, используемые в устаревших моделях компьютеров, построены в расчете на работу через шину Industry Standard Architecture (ISA).

Технология самоконфигурирования Plug-and-Play ISA появилась в 1993 году, поэтому большинство ISA-устройств вполне удовлетворяет стандартам РпР. К сожалению, РпР ISA-устройства часто не располагают каналами, подходящими для операционной системы, поэтому процедуру указания каналов, портов и адресов для них приходится выполнять вручную.

Интерфейсный стандарт Peripheral Component Interconnect (PCI) был разработан, в частности, с целью преодоления ограничений стандарта ISA. Шина PCI обладает большим быстродействием, и PCI-устройства могут совместно использовать отдельные IRQ-каналы. Некоторые РпР BIOS в своих настроечных меню предусматривают возможность задания IRQ, I/O и DMA-каналов для отдельных PCI-устройств.

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

Исключением из этого правила являются внешние устройства с интерфейсом USB.

Шина Universal Serial Bus (USB) не является в полном смысле внешним интерфейсом компьютера. Каждый USB-хаб теоретически может обслуживать до 127 отдельных периферийных устройств. USB поддерживает технологию самоконфигурирования Plug and Play и «подключение на лету», т. е. возможность подсоединять устройства к компьютеру (и отсоединять их от него) без выключения компьютера. Операционная система автоматически распознает новую конфигурацию.

Читайте также:  Драйвер xerox phaser 3010 для линукс

К сожалению, система Linux корректно поддерживает не все разновидности USB-устройств, Хотя некоторые версии системы Linux поддерживают широкий спектр разновидностей USB-устройств, в него не входят, например, сетевые USB-карты. Linux плохо работает с пассивными USB-хабами и не поддерживает загрузку с USB-накопителей на дискетах. Но работу над проблемой поддержки USB-устройств в среде системы Linux продолжают многие разработчики.

Модемы относятся к тому типу периферийных устройств, установка которых в Linux не составляет никакого труда. Обычно, Linux использует Plug-and-Play характеристики модема, чтобы, автоматически его сконфигурировать. Как правило, для установки внешнего модема достаточно подключить его к свободному последовательному порту, установка встроенного — немного сложнее.

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

Большинство последних дистрибутивов Linux поддерживают USB-мышь и USB-клавиатуру. В значительной мере такая поддержка была реализована в разных Linux-дистрибутивах даже до появления ядра Linux Kernel 2.4. Оба устройства описаны в гл. 12 и идентифицируются как интерфейсные USB-устройства для обмена с человеком: USB Human Interface Devices (HID).

Ядро Linux, начиная с версии 2 .2.7, поддерживает USB-устроиства. для надежного оо-служивания USB необходимо ядро версии 2.2.18 или 2.4.2 либо более позднее.

Как правило, установочная программа системы Linux автоматически распознает USB-мышь и/или клавиатуру. Но иногда возникают трудности, поэтому полезно разобраться в том, как USB поддерживает мышь и клавиатуру.

Для начала выполните проверку сообщений ядра с помощью команды dmesg | less. Просмотрите сообщения и попытайтесь найти информацию, касающуюся загрузки USB или USB-устройств. Если ничего похожего нет, попытайтесь разобраться с изменениями в файле /proc/bus/ usb/devices. Время и дату последних изменений можно получить командой ls -l /proc/bus/ usb/devices.

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

# mount -t usbdevfs none /proc/bus/usb

Если все установлено корректно, то USB обеспечивает поддержку нескольких манипуляторов мышь. Linux может сконфигурировать все USB-мыши с помощью одного драйвера /dev/ input/ mice. Если ваш дистрибутив Linux не распознал USB-мышь (или несколько мышей) в рамках описанной ранее процедуры, внесите необходимые изменения в ядро Linux. Если для этого вы хотите добавить модули, убедитесь в том, что среди прочих используется и модуль mousedev. о.

Если указанный драйвер мыши не существует, его необходимо создать. Создайте при необходимости каталог /dev/input, затем создайте узловое USB-устройство с помощью следующей команды:

# mknod /dev/input/mice с 13 63

Если вы предполагаете использовать USB-мышь или несколько мышей с X Window, то вам придется добавить конфигурационные данные об этих устройствах в соответствующий конфигурационный файл XF86Config. Для стандартной USB-мыши можно добавить следующий раздел InputDevice:

Identifier «USB Mice»

Option «Protocol» «IMPS/2»

Option «Device» «/dev/input/mice»

Необходимо также связать это новое устройство ввода с экраном. Если USB-мышь — единственная мышь системы, то она рассматривается как базовое устройство позиционирования, которое можно описать с помощью следующей строки в разделе ServerLayout:

InputDevice «USB Mice» «CorePointer»

Если используется также обычная (не-USB) мышь, необходима еще одна строка Input-Device:

InputDevice «USB Mice» «SendCoreEvents»

Описанные примеры ориентированы на XFree86 версии 4.0. В вашей системе синтаксис добавляемых строк может отличаться в зависимости от версии X Windows и дистрибутива.

Необходимость в установке новых программных пакетов под LINUX возникает в двух основных случаях:

— когда появляется новая версия одного из уже установленных у вас пакетов;

— когда возникает желание или необходимость использовать какой-то пакет, еще не установленный в системе.

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

Читайте также:  Страховой продукт альфа windows 1 год что это

Для дистрибутивов существует две основных формы распространения ПО: в исходных текстах и в виде исполняемых модулей. В первом случае пакет ПО обычно поставляется в виде tar-gz архива, во втором случае — в виде пакета (но это не обязательно, исполняемые модули также могут распространяться в виде tar-gz-архива).

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

Если пакеты с необходимым вам программным обеспечением нужно еще поискать (и не всегда можно найти), то tar-gz-архив любого ПО для Linux найдется в Интернете непременно. В некоторых случаях такие архивы содержат исполняемые модули приложений. Тогда установка приложения лишь немного сложнее, чем в случае установки из пакета: необходимо просто развернуть архив с помощью программ gunzip и tar, перейти в созданный каталог и можно уже запускать полученное приложение. Но чаще всего приложения поставляются в исходных текстах, т. е. в виде программы на языке Си. Установить их в этом случае немного сложнее, хотя и тут нет ничего невозможного даже для начинающего пользователя. Давайте рассмотрим, как это делается.

Начать стоит с того, что операционная система UNIX родилась на свет одновременно с языком программирования C (Си). Более того, язык C был создан специально для разработки этой ОС, значительная часть UNIX была написана на языке С. ОС Linux тоже написана на Си. Поэтому, а также в соответствии с принципом свободного распространения исходных кодов, многие приложения для Linux распространяются в виде текстов на С (а в последнее время — и на С++). Естественно, что для установки и запуска такого приложения на исполнение, его необходимо предварительно скомпилировать. Для выполнения процедур компиляции обычно используется программа gcc (хотя существуют и некоторые альтернативные разработки).

GNU-компилятор с языка С gcc, содержит в себе 4 основных компонента, соответствующие четырем этапам преобразования исходного кода в исполняемую программу.

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

Непосредственно процесс инсталляции пакета состоит из следующих шагов:

  1. Перейти (с помощью команды cd) в каталог, содержащий исходные коды устанавливаемого пакета.
  2. Выполнить команду ./configure, которая осуществляет конфигурирование пакета в соответствии с вашей системой. Процесс выполнения этой команды занимает довольно длительное время, причем команда выдает на экран сообщения о том, какие именно особенности системы испытываются.
  3. Выполнить команду make, для того, чтобы скомпилировать пакет.
  4. После этого можно выполнить (это шаг не является обязательным) команду make check, которая вызывает запуск процедур самотестирования, которые поставляются с пакетом.
  5. Выполнить команду make install для установки программ, а также файлов данных и документации.
  6. Заключительный этап состоит в выполнении команды make clean, которая удаляет промежуточные объектные и двоичные файлы из каталога с исходными кодами. Для удаления временных файлов, которые создала команда configure (после чего пакет можно компилировать для другого типа компьютеров), надо выполнить команду make distclean.

В большинстве случаев выполнение этой последовательности команд достаточно для установки нового пакета.

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

Источник

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