next up previous contents
Next: Установка модуля с драйвером Up: Модернизация и установка нового Previous: Модернизация ядра системы

Добавление в ядро драйвера устройства

 

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

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

Для того, чтобы обеспечить поддержку ядром системы Linux устройства ppa, надо ответить "да" (Y) на соответствующий вопрос на шаге make config, когда определяется конфигурация индивидуального ядра для данного компьютера. В частности, ответ Y должен быть дан на три вопроса об опциях:

SCSI support? [Y/n/m] \tinput{Y} \\
SCSI disk support? [Y/n/m] \tinput{Y} \\
IOMEGA Parallel Port Zip Drive SCSI support? [Y/n/m] \tinput{Y}

После того, как успешно выполнена команда make config со всеми необходимыми опциями, устанавливающими поддержку устройств, надо последовательно запускать make dep, make clean и make zImage, чтобы собрать ядро. Дальше надо сообщить ядру, как следует установить драйвер. Это делается посредством командной строки загрузчика LILO. Как говорилось в разд. 4.2.2, конфигурационный файл /etc/lilo.conf загрузчика LILO имеет строфы ("stanzas") для каждой операционной системы, о которой ему известно, а также директивы о том, как эти опции предъявляются пользователю во время загрузки.

Еще одной директивой, которую распознает загрузчик LILO, является директива "append=", которая позволяет во время загрузки давать дополнительную информацию, нужную драйверам устройств. В данном случае, драйвер ppa устройства Iomega Zip требует неиспользуемый номер прерывания и адрес ввода/вывода порта. Это в точности аналогично определению различных портов для принтера LPT1: и LPT2: в системе MS-DOS.

Например, если шестнадцатеричный (т.е. по основанию 16) адрес порта принтера равен 0x378 (если адрес порта неизвестен, надо обратиться к инструкции по установке адаптера параллельного порта) и порт является опрашиваемым (polled), т.е. не требует номера IRQ, как это принято указывать в настройках системы Linux, то в файл /etc/lilo.conf надо поместить следующую строку:

append="lp=0x378,0"
Следует также указать, что система Linux автоматически распознает один порт /dev/lp во время загрузки, однако когда задается особая конфигурация портов, требуются инструкции во время загрузки.

Цифра "0" после адреса порта сообщает ядру, что не надо использовать IRQ для принтера. Как правило, это приемлемо, поскольку принтеры работают намного медленнее, чем процессоры, так что можно использовать более медленный способ доступа -- периодический опрос (polling), когда ядро периодически без запроса со стороны принтера проверяет его статус. Благодаря большой разнице в быстродействии компьютер даже при таком способе доступа способен загрузить принтер.

Однако устройства, которые работают намного быстрее, чем принтер, например -- устройства последовательного соединения и диски, требуют использования IRQ. По сути IRQ -- это физический сигнал, который некоторое устройство посылает процессору тогда, когда этому устройству нужны от процессора некоторые действия, (например, если устройство готово выдать данные процессору). Тогда, вне зависимости от того, что делает процессор, он останавливается и обрабатывает прерывание. Устройство Zip (ppa) требует свободный номер прерывания. Этот номер должен соответствовать тому номеру прерывания, который назначается адаптеру порта принтеров (и к которому теперь будет подключено устройство Zip). На время написания этой книги драйвер ppa системы Linux не поддерживает соединения в цепь устройств, подключаемых к параллельному порту. Поэтому для каждого принтера и для каждого устройства Zip с драйвером ppa нужно использовать отдельный порт.

Чтобы определить, какие номера прерываний в системе уже заняты, можно ввести команду

\# \tinput{cat /proc/interrupt}
Эта команда выдаст список устройств и номера используемых ими IRQ. Тем не менее, следует быть осторожным и не использовать автоматически конфигурируемые адреса прерываний последовательных портов (эти номера могут не быть среди перечисленных в файле /proc/interrupt). Практическое руководство по использованию последовательного подключения (Serial HOWTO), разработанное в рамках проекта Linux Documentation Project и доступное из источников, перечисленных в приложении A, детально описывает конфигурацию последовательных портов.

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

Приведем типичный пример файла /proc/interrupt.

 0:    6091646   timer \\
 1:      40691   keyboard \\
 2:          0   cascade \\
 4:     284686 + serial \\
13:          1   math error \\
14:     192560 + ide0 \\
В этом файле представляет интерес первая колонка, в которой перечислены используемые в системе номера IRQ. Для драйвера устройства ppa надо выбрать номер, который не находится в списке. Часто подходящим номером является IRQ 7, поскольку этот номер редко используется где-либо по умолчанию. Также требуется указать адрес порта, который будет использовать устройство ppa. Этот адрес должен быть задан физической конфигурацией джамперов на адаптере. Параллельным портам ввода/вывода даются специфические адреса, поэтому надо прочесть документацию по адаптеру параллельного порта. В этом примере будет использован адрес 0x278, что соответствует принтерному порту LPT2: в системе MS-DOS. В командной строке загрузки в соответствующей строфе файла /etc/lilo.conf команда, которая указывает номер IRQ и адрес порта, будет выглядеть так:
append="lp=0x378,0 ppa=0x278,7"

Во время загрузки эти установки будут добавлены к стартовым параметрам ядра системы. Таким образом обеспечивается, что никакой принтер, подключенный к компьютеру, не будет воздействовать на работу устройства Zip. Разумеется, если принтер к компьютеру не подключен, директива lp= может быть (и должна быть) опущена.

После того, как индивидуальное ядро для данного компьютера установлено (как это описано в разд. 4.2.2), и прежде чем система будет перезагружена, следует обязательно исполнить команду

\# \tinput{/sbin/lilo}
для того, чтобы установить новую конфигурацию загрузчика LILO в загрузочный сектор жесткого диска.


next up previous contents
Next: Установка модуля с драйвером Up: Модернизация и установка нового Previous: Модернизация ядра системы

root
Sun Aug 29 12:01:30 MSD 1999