В Linux. 2 Приобретение и инсталляция Linux. 3 Учебник по Linux 4 Администрирование системы. 5 The X window System. 6 Работа в сети

Вид материалаУчебник

Содержание


4.9.1 Модернизация ядра.
4.9.2 Добавление драйвера устройства к ядру.
Подобный материал:
1   ...   55   56   57   58   59   60   61   62   ...   73

4.9.1 Модернизация ядра.


  Обновление ядра вопрос получения источников новой версии и компилирования их. Это безболезненная процедура, но Вы можете столкнутся с проблемами, если Вы пробуете использовать версию для разработчиков. Версия ядра имеет две части: собственно версию ядра и patchlevel. На момент написания данного документа, последнее устойчивое ядро 2.0.33. 2.0 версия, и 33 patchlevel. Нечетные версии (например, 2.1), версии для разработчиков. Если не хотите проблем, держитесь от них подальше! Вообще, можно без особых проблем обновлять ядро до следующего patchlevel, но обновление до новой версии потребует обновления системных утилит, которые тесно связаны с ядром.

  Исходники ядра Linux можно найти на многих (Linux FTP сайтах. На sunsite.unc.edu, исходники лежат в каталоге /pub/Linux/kernel в подкаталогах, соответствующих номерам версий.

Исходники выпускаются в файле формата .tar.gz. Например, файл с исходниками ядра 2.0.33 называется linux-2.0.33.tar.gz.

При распаковке исходников в каталог /usr/src, создается подкаталог /usr/src/linux. Обычно /usr/src/linux является символической ссылкой на другой каталог с номером версии, например /usr/src/linux-2.0.33. Таким образом, можно ставить и тестировать исходники новой версии, не удаляя исходников старой. Ссылка создается так:


# cd /usr/src

# mkdir linux-2.0.33

# rm -r linux

# In -s linux-2.0.33 linux

# tar xzf linuK-2.0.33.tar.gz


При апгрейде на новый patchlevel имеющейся версии ядра, файлы заплаток могут сильно облегчить жизнь. Полный исходник ядра в сжатом gzip виде занимает около 7 MB. Для апгрейда с ядра версии 2.0.31 до версии 2.0.33, Вам надо скачать файлы заплаток patch-2.0.32.gz и patch-2.0.33.gz, которые есть на многих FTP сайтах. Положите полученные заплатки в каталог /usr/src, и последовательно примените их к ядру, что обновит исходник до новой версии. Например, так:


# cd /usr/src

# gzip -cd patch-2.0.32.gz|patch -p0

# gzip -cd patch-2.0.33.gz|patch -p0


После распаковки и применения патчей (заплаток), Вы должны удостовериться, что три символических ссылки в /usr/include правильны для вашего дистрибутива ядра. Создать данные ссылки можно так:


# cd /usr/include

# rm -rf asm linus scsi

# In -s /usr/src/linux/include/asm-i386 asm

# In -s /usr/src/linux/include/linux linux

# In -s /usr/src/linux/include/scsi scsi


После их создания Вам уже не надо будет создавать их при установке каких-либо заплат или новых версий ядра. См. раздел 3.11 для подробной информации о символических ссылках.

  Чтобы скомпилировать ядро, Вы должны иметь gcc компилятор C, установленный в Вашей системе. Для компиляции ядра версий 2.0 нужен gcc версии 2.6.3 или более старшей.

Сначала cd в /usr/src/linux. Команда make config запросит у Вас настройки ядра. На данном шаге Вы выбираете аппаратные средства, которые ядро будет поддерживать. Самая большая ошибка, когда не включают поддержку контроллера жесткого диска. Без правильной поддержки жесткого диска в ядре, система не будет даже загружаться. Если Вы не уверены относительно того, что делает данная опция, есть короткое описание, доступное при нажатии ? и Enter.

Затем выполните команду make dep для создания всех зависимостей в ядре. Это важный шаг. Команда make clean удаляет старые двоичные файлы из дерева исходников ядра.

  Команда make zImage наконец откомпилирует ядро и положит его в файл /usr/src/linux/arch/i386/boot/zImage. Ядра Linux на системах Intel всегда сжимаются. Иногда ядро, которое Вы хотите компилировать, слишком большое, чтобы быть сжатым системой сжатия, которую использует make zImage. Компиляция ядра, которое является слишком большим, завершится сообщением об ошибке: Kernel Image Too Large. Если это случается, попробуйте команду make bzImage, которая использует систему сжатия поддержкой больших ядер. Ядро будет записано в /usr/src/linux/arch/i386/boot/bzImage.

Как только откомпилируете ядро, Вы должны или скопировать его на дискету начальной загрузки командой наподобие ``cp zImage /dev/fd0'') или установить ядро для загрузки с жесткого диска с помощью LILO. См. подробности про LILO.

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


 

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

Вы должны сформировать и поставить заказное ядро Linux kernel, как описано в предыдущем разделе.

Выбор устройства устройства Zip ppa требует ответа Y на соответствующие вопросы на шаге конфигурации, когда Вы определяете конфигурацию заказного ядра. В частности, устройство ppa требует ответа ``Y'' на три вопроса:


SCSI support? [Y/n/m] Y

SCSI disk support? [Y/n/m] Y

IOMEGA Parallel Port Zip Drive SCSI support? [Y/n/m] Y


После успешного выполнения make config выполните make dep, make cleanи make zImage для создания ядра, Вы должны сообщить ядру, как установить драйвер. Это делается через командную строку LILO. Как описано в разделе 4.2.1, файл настройки LILO, /etc/lilo.conf имеет секции для каждой ОС, которую он знает и директивы для запроса параметров у пользователя при начальной загрузке машины.

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

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


append="lp=0x378,0"


Стоит заметить, что Linux автоматически распознает один порт /dev/lp при загрузке, но в специальных конфигурациях параметры загрузки необходимы.

``0'' после адреса порта сообщает, чтобы ядро не использовало IRQ (запрос прерывания) для принтера. Это обычно применяется потому, что принтеры намного медленнее, чем CPU, более медленный метод обращения к устройствам ввода-вывода, известен как polling, где ядро периодически проверяет состояние принтера, что позволяет компьютеру не отставать от принтера.

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

Определить, какие прерывания уже используются в Вашей системе, можно командой:


# cat /proc/interrupt


Она отображает список устройств и линий IRQ, которые они используют. Однако, Вы также должны быть внимательным, чтобы не использовать автоматически конфигурируемое прерывание последовательного порта, которое не может быть перечислено в файле /proc/interrupt. Linux Documentation Project Serial HOWTO, доступное на сайтах, перечисленных в приложении A, подробно описывает конфигурацию последовательных портов.

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

Типичный файл /proc/interrupt выглядит примерно так:


0 6091646 timer

1 40690 keyboard

2 0 cascade

4 284686 + serial

13 1 math error

14 192560 + ideO


Нам интересен первый столбец. Он перечисляет номера линий IRQ, которые использованы в Вашей системе. Для ppa драйвера мы хотим выбрать линию, которая здесь еще не перечислена. IRQ 7 часто хороший выбор, поскольку она редко используется в заданных по умолчанию конфигурациях системы. Мы также должны определить адрес порта, который использует устройство ppa. Этот адрес должен быть физически сконфигурирован на плате интерфейса. Параллельным портам ввода-вывода назначены специфические адреса, так что Вы должны почитать документацию для вашей платы параллельного порта. В этом примере, мы используем порт ввода-вывода, адрес которого 0x278, который соответствует LPT2: порт принтера под MS-DOS.

Добавление IRQ и адреса порта в командной строке загрузчика дает следующую инструкцию (как будто, мы параметры появились в соответствующей секции файла /etc/lilo.conf:


append="lp=0x378.0 ppa=0x278.7"


Эти инструкции добавятся к параметрам запуска ядра при начальной загрузке. Они гарантируют, что любой принтер, подключенный к системе не сталкивается с Zip диском. Конечно, если ваша система не имеет принтера, директива ``lp='' может и должна быть опущена.

После того, как Вы установили заказное ядро как описано в разделе 4.2.1, прежде, чем Вы перезагрузите систему, убедитесь, что выполнили команду:


# /sbin/lilo


для установки в загрузочный сектор жесткого диска новых настроек LILO.