Железо и Linux

Денис Колисниченко

Определяем устройства

Как мы привыкли устанавливать устройства в Windows? Сначала устанавливаем устройство, включаем питание, ждем пока загрузятся окошки, и устанавливаем драйвер. Лишь для самых древних устройств в базе данных Windows будет драйвер. Важный момент заключается в том, что операционная система сама определяет устройство и используемые ним ресурсы. Конечно, все сказанное относится к PnP-устройствам, но когда ты в последний раз видел не PnP-устройство?

В Linux для автоматического определения устройств используется специальная утилита: kudzu или harddrake. В некоторых дистрибутивах используется kudzu, а некоторых – harddrake (преимущественно в дистрибутивах, основанных на Linux Mandrake и в самом Mandrake, в новых дистрибутивах используется harddrake2).

Утилита автоматического определения устройств автоматически запускается при загрузке системы. Я рекомендую сразу после установки системы (когда все устройства уже определены и настроены) отключить kudzu (или harddrake, harddrake2) – так запуск системы будет быстрее. Не каждый же день ты устанавливаешь новое устройство? Даже если и так, то все равно – устанавливаешь новое устройство ну раз-два в день, а перезагружаться можешь гораздо больше. Поэтому все равно остается выигрыш во времени. Если тебе нужно установить новое устройство, после его физической установки в систему запусти kudzu вручную от имени пользователя root:


su
kudzu

При запуске harddrake от имени простого пользователя, он запросит пароль пользователя root. Введи его и пользуйся harddrake – команду su вводить необязательно.


Ввод пароля

Перед тем, как устанавливать новое оборудование, нужно убедиться, что ядро поддерживает твое устройство. Если это не так, нужно пересобрать ядро и включить поддержку нового устройства. Можно со стопроцентной уверенностью сказать, что твое ядро будет поддерживать сетевую плату RTL8139 или любую другую, совместимую с NE2K PCI. А вот о поддержке USB-модема или принтера ничего нельзя сказать – нужно только запускать программу menuconfig, с помощью которой ты можешь настроить ядро или же просто узнать какие устройства поддерживает ваше ядро, а какие - нет. Компилированию ядра посвящено много документов в сети (HOWTO, FAQ, статьи) и даже целые книги, поэтому подробно на этом вопросе сейчас останавливаться не будем. В принципе, современное ядро 2.6 поддерживает очень много устройств и проблемы могут возникнуть только со следующими типами устройств:

  1. Win-модемы, то есть такие модемы, которые работают под управлением ОС Windows. Я не говорю, что в Linux они вообще не работают, но, потратив уйму времени, даже если ты и настроишь этот модем, удовольствие от его работы ты не получишь.
  2. Win-принтеры – комментарии те же, что и для Win-модемов
  3. Экзотические TV и FM-тюнеры.

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

Следующее устройство – это принтер. Он очень легко настраивается конфигуратором printerdrake в Linux Mandrake или redhat-config-printer в Red Hat. Современная база драйверов CUPS (Common Unix Print System) поддерживает большинство принтеров. Практически всю настройку того или иного устройства можно произвести с помощью специального конфигуратора, который используется для настройки соответствующего устройства. Об этих программах мы поговорим чуть позже, а пока поговорим о программе kudzu более подробно.

Как уже отмечалось, для определения нового оборудования используется утилита kudzu. Обычно она запускается при запуске компьютера, но ее запуск занимает определенное время, поэтому я рекомендую отключить ее автозапуск и запускать ее вручную только, если это необходимо. Кажется, об этом я уже тоже говорил. Выполни команду /usr/sbin/drakxservices (или redhat-config-services в Red hat) и отключи автоматический запуск утилиты kudzu.


drakxservices

Установив новое оборудование, введи команду: /usr/sbin/kudzu

Запустится утилита kudzu, которая сообщит о найденном оборудовании.


Утилита kudzu

Ты можешь согласиться с установкой нового устройства, а можешь отказаться от его установки. Задача kudzu состоит в том, чтобы определить, какое устройство установлено, и добавить модули ядра для работы этого устройства. Модули можно добавить и вручную, если ты знаешь точное название модуля, с помощью команды insmod (для удаления модуля используется команда rmmod). Программа kudzu также прописывает модули в файле /etc/modules.conf (чтобы они загружались при запуске системы):


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 перезагружать машину. Итак, немного подытожим. Алгоритм установки нового оборудования:

  1. Убедиться, что ядро поддерживает устанавливаемое устройство. В случае необходимости пересобрать ядро.
  2. Запустить утилиту /usr/sbin/kudzu. Если нужно, вручную отредактировать файл /etc/modules.conf (или conf.modules), чтобы установить дополнительные параметры модуля.
  3. Настроить новое оборудование с помощью соответствующего конфигуратора, например, если это сетевая плата, вы можете использовать конфигуратор netconf.

Наверное, тебя немного смутил первый пункт, в смысле убедиться, что ядро поддерживает устройство. А как это сделать? Можно запустить 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.


Конфигуратор Hard Drake

Основные конфигураторы перечислены ниже. Сначала идет название конфигуратора для Mandrake, а через запятую – для Red Hat.
Основной конфигуратор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

Модульные утилиты

Ядро Linux содержит только самый необходимый код – чтобы только загрузиться. Поддержку остальных устройств обеспечивают модули, которые встраиваются в ядро при загрузке системы. В принципе, можно вкомпилировать в ядро все необходимые модули, тогда у нас будет система, не использующая модули, но мы сейчас не будем говорить о таких системах. С помощью пакета modutils, который будет рассмотрен ниже, можно добавить нужный вам модуль в ядро во время работы системы. При этом перезагружать систему не нужно – устройство начнет работать сразу же после загрузки модуля. Раньше, в первых версиях ядра Linux, механизм работы с модулями не был предусмотрен, и ядра тех времен содержали в себе код драйверов для ВСЕХ поддерживаемых устройств. Такое решение нельзя назвать рациональным. Мы не можем предусмотреть, какие устройства будут установлены у конечного пользователя, даже если включить в состав ядра драйверы всех возможных устройств. Предположим, что у нашего пользователя установлена звуковая плата Yamaha, а наше ядро «знает» еще с десяток звуковых плат. Получится, что один код будет работать всегда, а остальные десять драйверов будут просто использовать оперативную память. Кстати, об оперативной памяти: ты представляешь размер ядра, если оно будет содержать драйверы всех устройств? Исходя из всего этого, разработчики ядра Linux «изобрели» механизм динамически загружаемых модулей. Модули хранятся на диске в виде объектных файлов (*.o). При необходимости ядро загружает необходимый ему модуль. Откуда ядро знает, какой модуль нужно загружать, а какой – нет? Список модулей, а также передаваемые им параметры хранятся в файле /etc/modules.conf (или /etc/conf.modules – в зависимости от дистрибутива и версии ядра). Вот пример этого файла:

Файл /etc/modules.conf (Linux Red Hat 7.3)


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.


Cчетчик
Hosted by uCoz