Денис Колисниченко
Определяем устройства
Как мы привыкли устанавливать устройства в Windows? Сначала устанавливаем
устройство, включаем питание, ждем пока загрузятся окошки, и устанавливаем драйвер.
Лишь для самых древних устройств в базе данных Windows будет драйвер. Важный
момент заключается в том, что операционная система сама определяет устройство и
используемые ним ресурсы. Конечно, все сказанное относится к PnP-устройствам, но
когда ты в последний раз видел не PnP-устройство?
В Linux для автоматического определения устройств используется специальная утилита:
kudzu или harddrake. В некоторых дистрибутивах используется kudzu, а некоторых –
harddrake (преимущественно в дистрибутивах, основанных на Linux Mandrake и в самом
Mandrake, в новых дистрибутивах используется harddrake2).
Утилита автоматического определения устройств автоматически запускается при загрузке
системы. Я рекомендую сразу после установки системы (когда все устройства уже
определены и настроены) отключить kudzu (или harddrake, harddrake2) – так запуск
системы будет быстрее. Не каждый же день ты устанавливаешь новое устройство? Даже
если и так, то все равно – устанавливаешь новое устройство ну раз-два в день, а
перезагружаться можешь гораздо больше. Поэтому все равно остается выигрыш во
времени. Если тебе нужно установить новое устройство, после его физической установки
в систему запусти kudzu вручную от имени пользователя root:
Железо и Linux
su kudzu
При запуске harddrake от имени простого пользователя, он запросит пароль пользователя
root. Введи его и пользуйся harddrake – команду su вводить необязательно.
Перед тем, как устанавливать новое оборудование, нужно убедиться, что ядро
поддерживает твое устройство. Если это не так, нужно пересобрать ядро и включить
поддержку нового устройства. Можно со стопроцентной уверенностью сказать, что твое
ядро будет поддерживать сетевую плату RTL8139 или любую другую, совместимую с
NE2K PCI. А вот о поддержке USB-модема или принтера ничего нельзя сказать – нужно
только запускать программу menuconfig, с помощью которой ты можешь настроить ядро
или же просто узнать какие устройства поддерживает ваше ядро, а какие - нет.
Компилированию ядра посвящено много документов в сети (HOWTO, FAQ, статьи) и
даже целые книги, поэтому подробно на этом вопросе сейчас останавливаться не будем. В
принципе, современное ядро 2.6 поддерживает очень много устройств и проблемы могут
возникнуть только со следующими типами устройств:
В этой статье подробно на установке каждого типа устройств мы останавливаться не
будем. Почему? Сейчас поясню. Какие основные устройства нужны для нормальной
работы с системой? Прежде всего, видеоадаптер. Видеоадаптер настраивается при самой
установке системы и вряд ли тебе придется его отдельно настраивать, разве только
изменить разрешение.
Следующее устройство – это принтер. Он очень легко настраивается конфигуратором
printerdrake в Linux Mandrake или redhat-config-printer в Red Hat. Современная база
драйверов CUPS (Common Unix Print System) поддерживает большинство принтеров.
Практически всю настройку того или иного устройства можно произвести с помощью
специального конфигуратора, который используется для настройки соответствующего
устройства. Об этих программах мы поговорим чуть позже, а пока поговорим о программе
kudzu более подробно.
Как уже отмечалось, для определения нового оборудования используется утилита kudzu.
Обычно она запускается при запуске компьютера, но ее запуск занимает определенное
время, поэтому я рекомендую отключить ее автозапуск и запускать ее вручную только,
если это необходимо. Кажется, об этом я уже тоже говорил.
Выполни команду /usr/sbin/drakxservices (или redhat-config-services в Red hat) и отключи
автоматический запуск утилиты kudzu.
Установив новое оборудование, введи команду: /usr/sbin/kudzu
Запустится утилита kudzu, которая сообщит о найденном оборудовании.
Ты можешь согласиться с установкой нового устройства, а можешь отказаться от его
установки. Задача kudzu состоит в том, чтобы определить, какое устройство установлено,
и добавить модули ядра для работы этого устройства. Модули можно добавить и вручную,
если ты знаешь точное название модуля, с помощью команды insmod (для удаления
модуля используется команда rmmod). Программа kudzu также прописывает модули в
файле /etc/modules.conf (чтобы они загружались при запуске системы):
Ввод пароля
drakxservices
Утилита kudzu
pre-install pcmcia_core CARDMGR_OPTS=-f /etc/rc.d/init.d/pcmcia start above snd-pcm-oss snd-mixer-oss alias sound-slot-0 snd-via686 above snd-via686 snd-pcm-oss alias tap0 ethertap options tap0 -o tap0 unit=0
В этом файле указываются автоматически загружаемые модули и их параметры.
Откомпилированные модули хранятся в каталоге /lib/modules. Как добавить устройство
вручную, ты узнаешь в следующем пункте – мы будем вручную добавлять модуль для
нашей сетевой платы.
Программа kudzu сразу же добавит модули для вашего устройства, поэтому тебе не нужно
по примеру Microsoft перезагружать машину.
Итак, немного подытожим. Алгоритм установки нового оборудования:
Наверное, тебя немного смутил первый пункт, в смысле убедиться, что ядро
поддерживает устройство. А как это сделать? Можно запустить menuconfig и посмотреть,
какие устройства поддерживает ядро. Но это займет довольно много времени. Проще
всего зайти на сайт Linux Mandrake и посмотреть, если ли ваше устройство в базе данных
устройств, поддерживаемых Linux’ом. Ничего, если у тебя другой дистрибутив, например,
Red Hat – основные устройства те же. База данных устройств доступна по адресу:
http://www.mandrakelinux.com/en/hardware.php3
И еще: все, что было сказано про kudzu, характерно и для harddrake (harddrake2). Его
точно также можно отключить и запускать автоматически.
Помощники
Настройка определенного устройства выполняется с помощью соответствующего
конфигуратора, например, printerdrake – настройка принтера в Mandrake, redhat-config-
printer – настройка принтера в Red Hat. Если ты забыл название конфигуратора, найти
нужный конфигуратор очень просто: запусти терминал, введи redhat-config- (если у тебя
Red Hat) или drak (если Mandrake), и нажми Tab – увидишь почти все конфигураторы,
доступные в твоей системе. Почему «почти»? Да потому что имена некоторых
конфигураторов не начинаются с «redhat-config» или с «drak», например, harddrake.
Основные конфигураторы перечислены ниже. Сначала идет название конфигуратора для
Mandrake, а через запятую – для Red Hat.
Модульные утилиты
Ядро Linux содержит только самый необходимый код – чтобы только загрузиться.
Поддержку остальных устройств обеспечивают модули, которые встраиваются в ядро при
загрузке системы. В принципе, можно вкомпилировать в ядро все необходимые модули,
тогда у нас будет система, не использующая модули, но мы сейчас не будем говорить о
таких системах. С помощью пакета modutils, который будет рассмотрен ниже, можно
добавить нужный вам модуль в ядро во время работы системы. При этом перезагружать
систему не нужно – устройство начнет работать сразу же после загрузки модуля.
Раньше, в первых версиях ядра Linux, механизм работы с модулями не был предусмотрен,
и ядра тех времен содержали в себе код драйверов для ВСЕХ поддерживаемых устройств.
Такое решение нельзя назвать рациональным. Мы не можем предусмотреть, какие
устройства будут установлены у конечного пользователя, даже если включить в состав
ядра драйверы всех возможных устройств. Предположим, что у нашего пользователя
установлена звуковая плата Yamaha, а наше ядро «знает» еще с десяток звуковых плат.
Получится, что один код будет работать всегда, а остальные десять драйверов будут
просто использовать оперативную память. Кстати, об оперативной памяти: ты
представляешь размер ядра, если оно будет содержать драйверы всех устройств?
Исходя из всего этого, разработчики ядра Linux «изобрели» механизм динамически
загружаемых модулей. Модули хранятся на диске в виде объектных файлов (*.o). При
необходимости ядро загружает необходимый ему модуль. Откуда ядро знает, какой
модуль нужно загружать, а какой – нет? Список модулей, а также передаваемые им
параметры хранятся в файле /etc/modules.conf (или /etc/conf.modules – в зависимости от
дистрибутива и версии ядра). Вот пример этого файла:
Файл /etc/modules.conf (Linux Red Hat 7.3)
Конфигуратор Hard Drake
Основной конфигуратор drakconf, setup
Настройка железа harddrake2, kudzu
Настройка X Window (в т.ч. монитора и видеокарты)
XFdrake, redhat-config-xfree86
Настройка сети
draknet, redhat-config-network
Настройка клавиатуры keyboarddrake, redhat-config-keyboard
Настройка мыши ousedrake, redhat-config-mouse
Настройка принтера rinterdrake, redhat-config-printer
alias parport_lowlevel parport_pc alias usb-controller usb-uhci alias sound-slot-0 i810_audio post-install sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -L >/dev/null 2>&1 pre-remove sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -S >/dev/null 2>&1
Подробнее о формате файла /etc/modules.conf можно прочитать в справочной системе,
(man modules.conf)
При загрузке система читает этот файл и загружает указанные в нем модули. В нашем
случае загружается только модуль i810_audio, поскольку команда alias не загружает
модуль, а только устанавливает для него псевдоним.
Загрузка модулей из файла modules.conf обеспечивается программой modprobe, которая
вызывается из сценария инициализации системы /etc/rc.d/rc.sysinit.
Во время работы системы мы сами можем загрузить нужный нам модуль. Для этого
нужно использовать программу insmod, входящую в состав пакета modutils. Использовать
программу очень просто:
insmod <имя_файла_модуля>
Использовать программу может только пользователь root.
Просмотреть список загруженных модулей можно с помощью команды lsmod. Вот вывод
этой программы:
Module Size Used by Not tainted autofs 12164 0 (autoclean) (unused) nls_koi8-r 4576 2 (autoclean) nls_cp866 4576 2 (autoclean) vfat 12092 2 (autoclean) fat 37400 0 (autoclean) [vfat] usb-uhci 24484 0 (unused) usbcore 73152 1 [usb-uhci]
Некоторые модули загружаются не из файла /etc/modules.conf. Например, модули
файловых систем загружаются по мере необходимости – при монтировании определенной
файловой системы загружается нужный модуль, если, конечно, он есть. Модули
nls_koi8-r и nls_cp866 загружаются также при монтировании файловой системы,
если указаны опции монтирования iocharset=koi8-r,codepage=866.
Выгрузить модуль предельно просто:
rmmod имя_модуля
Программа modinfo позволяет просмотреть информацию о модуле – ты можешь больше
узнать об этом модуле:
modinfo usbcore filename: /lib/modules/2.4.18-3/kernel/drivers/usb/usbcore.o description:author: license: "GPL"
Программы insmod, rmmod, lsmod и modinfo входят в состав modutils. Для использования
любой этой программы необходимы права пользователя root.
Все вопросы и комментарии рад буду выслушать по адресу dhsilabs@mail.ru.