Лекция: Краткие теоретические сведения

 

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 и «подключение на лету», т. е. возможность подсоединять устройства к компьютеру (и отсоединять их от него) без выключения компьютера. Операционная система автоматически распознает новую конфигурацию.

К сожалению, система 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. Оба устройства и идентифицируются как интерфейсные 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:

Section «InputDevice»

Identifier «USB Mice»

Driver «mouse»

Option «Protocol» «IMPS/2»

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

EndSection

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

InputDevice «USB Mice» «CorePointer»

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

InputDevice «USB Mice» «SendCoreEvents»

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

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

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

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

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

Для дистрибутивов существует две основных формы распространения ПО: в исходных текстах и в виде исполняемых модулей. В первом случае пакет ПО обычно поставляется в виде 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.

 

Контрольные вопросы.

1. Что представляет собой технология Plug and Play?

2. Перечислите 4 основных компонента GNU-компилятора.

3. Когда возникает необходимость в установке новых программных пакетов под LINUX?

 

 

Лабораторная работа №19

еще рефераты
Еще работы по информатике