Руководство системного администратора • третье издание { h h y с п п т п р



Pdf просмотр
страница24/82
Дата12.11.2016
Размер7.94 Mb.
Просмотров12806
Скачиваний0
ТипРуководство
1   ...   20   21   22   23   24   25   26   27   ...   82
ДЛЯ шины IDE options ATАРI_STATIС # не делать загружаемым модулем device acdO # дисковод CD-ROM
Bo FreeBSD нужно включать показанные выше специальные опции для поддержки устройств. Драйвер IDE можно сконфигурировать как загружаемый модуль ядра, но если диск содержит корневой раздел, драйвер должен подключаться статически. В противном случае система не сможет обнаружить корневой раздел на этапе начальной загрузки. pseudo-device loop # сетевой интерфейс обратной связи pseudo-device ether # поддержка Ethernet pseudo-device bpfilter 4 I фильтр пакетов Беркли Из этих псевдоустройств только первое ( l o o p ) является обязательным, нов общем случае все псевдоустройства следует включать в конфигурацию
G E N E R I C . Псевдоустройство e t h e r необходимо для поддержки Eihernei- оборудования. Псевдоустройство b p f i l t e r требуется для запуска утилиты tepdutnp и D H C P - клиентов. Его можно удалить, чтобы запретить пользователям выполнять анализ сетевых пакетов. Нов этом случае сам администратор лишится возможности производить диагностику сети.
268
Чость I. Основы одминистрировония
Настройка ядра Ядро K E R N E L не настроено на максимальную производительность, что будет особенно заметно, если инсталлировать в системе крупный Web-ссрвер. Приведем несколько указании по улучшению работы ядра FreeBSD. Частично динамическую настройку ядра FreeBSD можно выполнять с помошью команды sysctl, которая реализует пользовательский интерфейс доступа к некоторым внутренним структурами параметрам ядра. Это очень мошная (и опасная) команда. Команда sysctf -а выводит список переменных ядра. Почти все параметры, перечисленные в табл. 12.7, доступны для динамического изменения. В документации очень мало говорится о том, что означает каждая переменная подсказкой служат только имена переменных. Изменения, вносимые командой sysctl, теряются при перезагрузке системы. Как правило, команда sysctl применяется для тестирования если же изменения требуется сделать постоянными, нужно отредактировать конфигурационный файл и перекомпилировать ядро. Преимущество такого подхода заключается в том, что в любой момент можно перезагрузиться, и система вернется в исходное состояние. В табл. 12.7 перечислены переменные, наиболее часто меняемые с помощью команды sysctl
Тоблицо 12.7. Важные переменные ядро FreeBSD. доступные для изменения комондой sysctl Переменная _ Описание к умолчанию k e r n . m a x f l i e s 1064 k e r n . m a x p r o c 532 k e r n . m a x f i l e s p e r p r o c 1064 k e r n . m a x p r o c p e r u i d 531 k e r n . i p c . n m b c l u s t e r s 1024 k e r n . l p c . i n a x s o c k e c s 1064 Максимальное число открытых файлов Максимальное число процессов Максимальное число открытых файлов водном процессе Максимальное число процессов для одного пользователя Максимальное число сетевых буферов Максимальное число доступных сокетов Обратите внимание на то, что в стандартной конфигурации отдельный пользователь может занять все позиции в таблице процессов, кроме одной. Это таит в себе потенциальную угрозу, так как, даже если в системе действительно работает всего один пользователь, не резервируется место для запуска системных процессов. Желательно делать больший интервал между значениями переменных гпахргос и i n a x p r o c p e r u i d . Ниже мы опишем процесс модификации некоторых самых простых параметров ядра G E N E R I C . Обычно это имеет смысл делать на Web-cepeepe, хотя рассматриваемые изменения позволяют повысить производительность большинства сетевых серверов. m a x u s e r s Ъ Параметр m a x u s e r s влияет наряд других характеристик ядра, в частности на максимальное число процессов в системе и для одного Слова 12. Дройверы и ядро
269
пользователя, максимальное число открытых файлов в системе ив отдельном процессе, а также максимальное число сетевых буферов. При конфигуриро- вании сервера желательно устанавливать достаточно высокие лимиты o p t i o n s NMBCLUSTERS=4096 Здесь задается разумное число сетевых буферов. По умолчанию их всего
256, что недопустимо мало даже в серверах среднего размера. o p t i o n s CHILD_MAX=1024 В приведенной директиве определяется максимальное число дочерних процессов в системе. Когда речь идет о сетевом сервере, зто число должно быть достаточно большим. Как правило, демоны, выполняемые на сервере, создают дочерний процесс для каждого поступившего запроса на подключение. o p t i o n s 0 P E N _ M A X - 1 C ) 2 4 Здесь устанавливается максимальное число дескрипторов файлов в системе. Обычно это значение должно быть равно параметру CHILD_MAX, так как с каждым запросом на подключение связывается свой дескриптор.
12.8. Добавление драйверов устройств Драйвер устройства — это программа, которая обеспечивает взаимодействие системы с определенным компонентом аппаратной среды. Драйвер выполняет роль переводчика команд конкретного устройства на " язык" функций ядра. Благодаря наличию драйверов обеспечивается приемлемый уровень независимости UNIX от внешних устройств. Драйверы являются компонентами ядра, а не пользовательскими процессами. Тем не менее, доступ к драйверу возможен как из ядра, таки со стороны команд пользовательского уровня. Для последних в каталоге /dev создаются специальные файлы устройств. Ядро преобразует операции, выполняемые над этими файлами, в обращения к коду драйвера. Раньше, во времена хаоса, для большинства аппаратных устройств требовались интерфейсная плата и специальный драйвер. Затем, когда многие системы стали поддерживать технологию SCSI в качестве стандартного интерфейса подключения дисков, лент и дисководов C D - R O M , а поставщики интегрировали в свои системы поддержку стандартных технологий, в частности Ethernet, появилась надежда на стабильность. Потом наступила эпоха П К . которая снова внесла хаос в наш прекрасный мир системных администраторов. Власть опять захватили патентованные интерфейсы, появились многочисленные "стандарты" и всевозможные аппаратные устройства с различными уровнями поддержки со стороны операционной системы. И вот что мы видим в Linux поддерживается более 30 различных наборов микросхем SCSI для персональных компьютеров, и каждый из них продается в два раза большим числом поставщиков существует более 200 сетевых интерфейсов для персональных компьютеров эти интерфейсы предлагаются различными поставщиками под разными именами все время разрабатываются и выпускаются новые, улучшенные, более дешевые устройства для каждого из них нужен свой драйвер, работающий с требуемой версией UNIX.
266
Чость I. Основы одминистрировония
Учитывая скорость появления новых устройств, практически невозможно выпускать дистрибутивы операционных систем, в которых интегрирована поддержка всех новинок. Поэтому раз за разом приходится самостоятельно добавлять к ядру новые драйверы. Изготовители оборудования обращают все больше внимания на рынок
U N I X и даже иногда создают версии драйверов. Если повезет, для имеющегося устройства в системе будет и драйвер, и инструкции по его инсталляции. Но вероятнее всего, нужный драйвер можно будет найти только на какой-нибудь неофициальной странице. Как бы там ни было, ниже мы опишем, что происходит в системе при добавлении драйвера устройства. Мы предполагаем, что читатель ознакомился с приведенной выше базовой процедурой конфигурирования ядра. Номера устройств Для многих устройств в каталоге / d e v имеются соответствующие специальные файлы исключение в современных операционных системах составляют лишь сетевые устройства. С каждым из этих файлов связан старший и младший номер устройства. Посредством этих номеров ядро преобразует обращения к файлу в вызовы нужного драйвера. Старший номер устройства обозначает драйвер, за которым закреплен данный файл (другими словами, он обозначает тип устройства. Младший номер устройства указывает на ток какому конкретно устройству подобного типа следует обращаться. Младший номер устройства часто называют просто номером или экземпляром устройства. Узнать номера устройств можно с помощью команды Is -I:
% 1 я - X / d e v / a d * brw-rw 1 r o o t d i s k 8, 0 Mar 3 1999 / d e v / s d a Младший номер иногда используется драйвером для выбора конкретной характеристики устройства. Например, накопитель на магнитной ленте может иметь в каталоге /dev несколько файлов, обеспечивающих реализацию различных сочетаний параметров, таких как плотность записи и наличие режима перемотки. По сути, драйвер волен интерпретировать младший номер устройства по своему усмотрению. Особенности поведения драйвера можно узнать на соответствующей шап-странице. Файлы устройств бывают двух типов блок-ориентированные и байт-ори- ентированные. Чтение из блок-ориентиров^!того устройства и запись в него осуществляется по одному блоку (группа байтов, размер которой обычно кратен 512) зараз. тогда как чтение из байт-ориентированного устройства и запись в него может производиться по одному байту. Для некоторых устройств предусматривается доступ как через блок-ориентированные, таки через байт-ориентированные файлы. Например, диски и ленты ведут "двойную жизнь, в отличие от терминалов и принтеров. Драйверы устройств образуют стандартный интерфейс связи с ядром. В каждом драйвере есть подпрограммы, предназначенные для выполнения некоторых или всех из перечисленных ниже функций a t t a c h c l o s e dump i o c t l open p r o b e p s i z e r e a d r e c e i v e r e s e t s e l e c t s t o p s t r a t e g y t i m e o u t t r a n s m i t w r i t e Слова 12. Дройверы и ядро
271
Отдельные системные функции удобно реализовывать, используя некий драйвер устройства, даже если связанное с иим устройство отсутствует в системе. Такие устройства-"призраки" называют псевдоустройствами. Например, пользователю, вошедшему в систему посети, назначается псевдотерми- нал (PTY), который сточки зрения высокоуровневого программного обеспечения ничем не отличается от обычного последовательного порта. Благодаря такому подходу программы, написанные в те времена, когда все пользователи еще работали на алфавитно-цифроных терминалах, могут продолжать функционировать в мире окон и сетей. Когда программа выполняет операцию над файлом устройства, ядро автоматически перехватывает обращение к файлу, ищет в таблице переходов соответствующее имя функции и передает ей управление. Для выполнения необычных операций, не имеющих прямых аналогов в модели файловой системы (таких, как изъятие дискеты из дисковода, используется системный вызов ioctl, который передает пользовательскую команду непосредственно драйверу Драйверы и их конфигурационные файлы обычно прячутся как можно дальше, чтобы какой-нибудь не в меру любопытный пользователь случайно не испортил их. В табл 12.8 указано стандартное местоположение драйверов и конфигурационных файлов в наших тестовых системах. Таблица 12.8. Местоположение дройверов и конфигурационных файлов Система Конфигуроционные фойлы ^ройверь-
Solaris /keme!/drv/*conf /kerael/drv/*
HP-UX /stand/system /usr/conf/*
Linux /usr/src/liniix/. config /usr/src/linux/driverc/*
FreeBSD /ивг/ягс/*уъ/\Ш/саи(/ЯДРО /sys/i386/conf/files* В ниже мы рассмотрим три примера добавления драйвера к ядру, для
Solaris, Linux и FreeBSD. Мы не будем описывать эту процедуру для операционной системы HP-UX, поскольку в ней редко присутствуют сторонние устройства (а для всех устройств Hewlett-Packard драйверы входят в состав системы.
Добовление дройвера устройства в Solaris
Проше всего добавить драйвер устройства в Solaris. Драйверы Solaris обычно распространяются в пакетном виде. Подключить драйвер к системе можно с помощью команды pkgadd. Если по какой-то причине добавление не происходит автоматически, это всегда можно сделать вручную, так как все драйверы реализованы в виде загружаемых модулей. Драйверы Solaris всегда поставляются в виде объектных файлов, а не в исходных текстах, как во FreeBSD и Linux. В нашем примере мы добавим к системе устройство "snarf'. Его драйвер должен быть представлен как минимум двумя файлами snarf.o (собственно драйвер) и snarf.conf (файл конфигурации. Оба должны находиться в каталоге /platform/sun4u/kernel/drv После копирования конфигурационного файла можно отредактировать его, чтобы задать параметры конкретного устройства. Обычно этого делать не требуется, но иногда некоторые параметры доступны для "тонкой" настройки.
272 Часть I Основы администрирования
Далее нужно загрузить модуль. Модули подключаются к работающему ядру командой add_drv (подробнее о загружаемых модулях речь пойдет в параграфе 12.11). В нашем случае команда имеет вид add_drv snarf. Вот и все Более простую процедуру трудно себе представить. Добавление драйвера устройство в Linux В Linux драйверы устройств распространяются водной из трех форм заплата" к конкретной версии ядра загружаемый модуль
• инсталляционный сценарий, устанавливающий соответствующие "заплаты. Чаще всего встречаются именно "заплаты. Установить их можно следующим образом
I cd /uar/arc/linux ; patch -pi < driver.diff
Ниже мы рассмотрим, как вручную добавить к ядру драйвер сетевого устройства "snarf'. Это очень сложный и утомительный процесс, особенно если сравнивать его с другими тестовыми операционными системами. По существующему соглашению исходные файлы ядра Linax хранятся в каталоге /usr/src/linux. В подкаталоге drivers нужно найти еще один подкаталог, соответствующий типу добавляемого устройства. Вот как выглядит список имеющихся подкаталогов
% la -F /ивг/вгс/linux/dxivere
M a k e f i l e cdrom/ 1 2 о / n u b u s / s b u s / t e l e p h o n y / a c o r n / c h a r / i s d n / p a r p o r t / s c s i / u a b / aplOOO/ d i e / m a c i n t o s h / p e l / s g i / v i d e o / atm/ f c 4 / m i s c / p c m c i a / s o u n d / z o r r o / b l o c k / 1 2 c / n e t / p n p / t c / Чаше всего драйверы добавляются в каталоги block, char, net. usb, sound и scsi. В них содержатся драйверы блок-ориентированных устройств (например, дисков, байт-ориентированных устройств (например, последовательных портов, сетевых устройств, устройств, звуковых плати плат соответственно. В других каталогах находятся, в частности драйверы для самих шин (pci, nubus и zorro); маловероятно, чтобы потребовалось добавлять в них файлы. Некоторые каталоги предназначены для хранения платформно-зависимых драйверов (Macintosh, acorn, арIООО). Есть каталоги для специализированных драйверов (atm, Isdn, telephony). Поскольку наше устройство является сетевым, мы поместим его драйвер в каталог drivers/net. Потребуется модифицировать следующие файлы
• drivers/net/Makefile, чтобы драйвер мог быть скомпилирован
• drivers/net/Config.in, чтобы устройство появилось в списке конфигурируе- мых настроек
• drivers/net/Space.c, чтобы устройство искалось на этапе начальной загрузки. После размещения файлов с расширениями си в каталоге drivers/net нужно добавить запись о драйвере в файл drivers/net/Makefile. Вот эти строки они располагаются ближе к концу файла i f e q ( S ( C O N F I G S N A R F J , у )
L _ O B J S + « s n a r f . о e l s e
Глово 12 Дройверы и ялро
273
i f e q ( S ( C O N F I G _ S N A R F ) , m )
M O B J S + « s n a r f . о e n d i f e n d i f Благодаря таким строкам драйвер может быть сконфигурирован как загружаемый модуль либо непосредственно встроен в ядро. Когда запись добавлена в файл Makefile, нужно убедиться, что устройство будет доступно для конфигурирования при настройке ядра. Все сетевые устройства должны быть перечислены в файле drivers/net/Config-in. В нашем случае требуется добавить приведенную ниже строку, чтобы драйвер был встроен либо как загружаемый модуль, либо как интегрированная часть ядра в соответствии стем, что было заявлено в файле Makefile): t r i s t a t e " S n a r f d e v i c e s u p p o r t ' C O N F I G _ S N A R F Ключевое слово t r i s t a t e означает, что драйвер станет загружаемым модулем. Если это невозможно, необходимо указать ключевое слово b o o l . Следующий элемент инструкции — строка, которая будет отображаться в окне конфигурации. Это может бьггь произвольный текст, но он должен идентифицировать для пользователя конфигурируемое устройство. Последний элемент инструкции — это конфигурационная макроконстанта. Она должна быть такой же, как и та, что проверяется в ветви i f e q файла Makefile Наконец, нужно отредактировать файл drivers/net/Space.c. В нем содержатся ссылки на подпрограммы опроса устройства также определяется очередность опроса. Нам понадобится отредактировать файл в двух разных местах. Во-первых, нужно добавить ссылку на функцию опроса, а затем внести устройство в список опрашиваемых устройств. В верхней части файла Space.c находится группа ссылок на функции. Добавим следующую строку e x t e r n i n t s n a r f _ p r o b e ( s t r u c t d e v i c e " J ; Прежде чем вносить устройство в список опроса, нужно определить, какой именно список нас интересует. Существуют отдельные списки для каждого типа шины. параллельный порти т.д.). Устройство " s n a r f ' является PC устройством, поэтому нужный нам список называется p c i _ p r o b e s . За строкой s t r u c t d e v p r o b e p c i _ p r o b e s L I i n i t d a t a — { следует упорядоченный список устройств. Устройства, стоящие выше, опрашиваются раньше. Порядок опроса не имеет особого значения для устройств, но для некоторых устройств он важен. Нужно просто убедиться, что устройство "snarf
1
обнаруживается, поэтому в начало списка мы поместим такие строки s t r u c t d e v p r o b e p c i _ p r o b e s H i n i t d a t a - ( t i f d e f C O N F I G S N A R F s n a r f j p r o b e , 0 ) ,
# e n d i f Теперь устройство добавлено к ядру Linux. При следующем конфигури- ровании ядра устройство должно появиться в списке конфигурируемых настроек в группе "Network devices" (сетевые устройства.
274 Ч ость. Основы ОДМИНИСТрИрОВОНИЯ
Добавление драйвера устройства во Добавление совершенно нового драйвера во FreeBSD предполагает включение его описания в файлы конфигурации и редактирование исходного текста ядра с целью включения ссылок на подпрограммы драйвера. Эта процедура — не для слабонервных В качестве примера рассмотрим систему FreeBSD. Следует заметить, что все системы (в том числе NetBSD и OpenBSD) функционируют схожим образом, за исключением того, что местонахождение файлов может быть разным. Для примера добавим в систему устройство " s c a r f ' (псевдосетевое устройство. В первую очередь нужно скопировать исходные файлы в соответствующий каталог
• ср bbraun/enarf . с с
Так как наше устройство относится к устройствам, мы поместим исходные файлы в каталог SYS/pci ко всем остальным драйверам. Если устройство не попадает нив одну из существующих категорий, следует создать для файлов новый каталоги отредактировать файл SYS/i386/eonf/files.i386 К нашему драйверу это не относится, поэтому он будет автоматически скомпилирован и подключен к ядру. Далее необходимо добавить запись обустройстве в конфигурационный файл ядра. Мы включим следующую запись в конфигурацию EXAMPLE: d e v i c e snfG # S n a r f , л сев до- сетевое устройство Эта строка является инструкцией для команды config на подключение файлов драйвера к ядру. Поскольку у сетевых устройств нет ни старших, ни младших номеров, их соответственно ненужно указывать. В случае блок-ори- ентированного или байт-ориентированного устройства ситуация была бы иной Когда инсталлируется драйвер стороннего поставщика, нужно поискать в документации к нему старший и младший номера устройства Следует использовать только номера, упомянутые в документации, иначе возможны конфликты с другими устройствами. Старшие номера устройств задаются в файле SYS/i386/conf/majors.i386. Запись, добавляемая в этот файл, зависит от устройства. Получить информацию можно в документации к драйверу Следующие этапы предусматривают запуск команды config и построение нового ядра создание резервной копии старого ядра и инсталляцию нового ядра перезагрузку и тестирование нового ядра. Эти операции рассматривались выше в настоящей главе. В самом коние может потребоваться создать файлы устройства (см следующий параграф) и протестировать само устройство.
12.9. Файлы устройств По существующему соглашению файлы устройств хранятся в каталоге
/dev". В больших системах, особенно гам, где используются сети и псевдо- терминалы. количество устройств может исчисляться сотнями. В Solaris и Основные файлы устройств в Solaris хранятся в каталоге /devices, на который автоматически создаются ссылки в каталоге /dev. Слова 12. Дройверы и ядро
275

H P - U X эта проблема решается довольно изяшно: для каждого типа устройств в каталоге /dev выделен отдельный подкаталог disk, cdrom, terminal w т.д. Файлы устройств создаются командой mknod, которая имеет следующий синтаксис m k n o d
иия_файла тип старший ылвдший
где имя_файла — создаваемый файл устройства, тип — тип устройства (с. если это байт-ориентированное устройство, и ь — если блок-ориентирован- ное), старший и младший — соответственно старший и младший номера устройства. Если создается файл устройства, относящийся к драйверу, который уже имеется в ядре, просмотрите соответствующую этому драйверу страницу (во FreeBSD — в разделе 4, в Solaris ив разделе 7, в Linux вообще нет страниц для драйверов устройств) и найдите старший и младший номера, указанные в ней. Иногда в комплект поставки входит she сценарий /dev/MAKEDEV, который автоматически передает команде mknod стандартные значения Просмотрите этот сценарий и найдите аргументы, требуемые для имеющегося устройства. Например, для подключения псевдотерминалов во FreeBSD нужно использовать такие команды
# cd / d e v
# ./MAKKDBV p t y
12.10= Соглашения об именах устройств Соглашения об именах устройств — это нечто весьма неопределенное. Во многих случаях применяется методика, которую использовали еше при работе на компьютерах PDP-11 фирмы. Для устройств, работающих ив блочном, ив символьном режимах, имя байт-ориентированно го файла обычно начинается с буквы 'г' ("raw" — неструктурированный, например /dev/daO и /dev/rdaO. В соответствии с другим соглашением этот файл помешается в подкаталог с именем, которое также начинается с буквы У (сравните /dev/dsk/dks0d3s0 и /dev/rdsk/dks0d3s0). Однако буква У не всегда означает упрошенный (байтовый) режим доступа. Имена последовательных устройств обычно состоят из префюсса tty и последовательности букв, обозначающей интерфейс, к которому подключен порт. Иногда для терминала имеется несколько файлов устройств дополнительные файлы предназначены для поддержки альтернативных методов управления потоками и протоколов блокировки.
Подробнее о последовательных портах рассказывалось в главе 7 Имена дисков в системах часто начинаются с двухбуквенной аббревиатуры, обозначающей дисковод или контроллер. Затем следует номер дисковода и имя дискового раздела. Например. daOa — блок-ориентированное устройство, представляющее раздела первого дисковода контроллера, a rdaOa — соответствующее байт-ориентированное устройство Имена накопителей на магнитной ленге часто включают не только ссылк\ на сам накопитель, но и указание на то, перематывается ли лента после каждой операции и какова плотность чтения/записи Каждый поставщик придерживается своей системы именования ленточных накопителей. В табл. 12.9 приведены типовые имена широко распространенных устройств (жестких дисков и дисководов C D - R O M ) для наших тестовых систем.
276
Чосгь I Основы од мини стри ров они я
Таблица 12.9. Соглошенир об именах устройств для дисков и лент Система
Solaria диск дисковод C D - R O M диск
/dev/lrjdjk/cAtBdNiP /dev/[r]dik/cAtBdN«P
HP-UX /d*T/(r]djk/cAtBdN /dev/[r]d>k/cAtBdN
Linux /dev/sdLP /dev/wdLP
BSDI /dev/daNsP /dev/dtNeP{loih}
/dev/lr]djk/cAtBdNiP
/dev/hdLP
/dev/wdNaP
A — номер контроллера, В — идентификатор, N — номер устройства, Р — буква или номер раздела.
12.11. Загружаемые модули ядра Загружаемые модули поддерживаются вино степень поддержки существенно различается. В Solaris ядро является самым модульным, в Linux — менее модульным, а во FreeBSD модули вообще используются очень мало. Помимо всего прочего загружаемые модули позволяют подключать и отключать драйверы устройств непосредственно в процессе работы ядра. Это значительно облегчает инсталляцию драйверов, поскольку' двоичный код ядра ненужно менять. Кроме того, уменьшается размер ядра, так как ненужные драйверы просто не загружаются. Поддержка загружаемых модулей реализуется путем вставки в ядро одной или нескольких документированных "точек подключения, которые доступны драйверам. Существует пользовательская команда, которая дает ядру указание загрузить новые модули в память. Обычно имеется также команда, выгружающая драйверы. Загружаемые драйверы очень удобны, но они не обеспечиваю стопроцентной безопасности. При каждой загрузке и выгрузке модуля существует риск нарушить работоспособность ядра. Во избежание краха системы не рекомендуем за1ружать и выгружать непроверенные модули. Как и другие аспекты управления устройствами и драйверами, реализация механизма загружаемых модулей зависит от конкретной операционной системы Ниже приводятся команды и рекомендации для Solaris. Linux и
FreeBSD.
Solaris В Solaris практически все компоненты являются загружаемыми модулями. Перечень модулей, загруженных на текущий момент, можно получить с помощью команды modinfo. Выходная информация этой команды выглядит так
* modinfo
Id Loadacdr
S i z e
I n £ о Fev
Module Name
1 fSOTeOOO 3ba0 1 1 s p e e f s ( f i l e s y s t e m f o r s p e e f s )
2 f f 0 8 6 0 0 0 1340 1 s u a p g e n e r i c ( r o o t / s w a p c o n f i g )
3 f f 0 8 2 0 0 0 ld56
I 1
TS (time s h a r i n g s c h e d c l a s s )
4 ffCB4000 4 9c
1
T3 DPTBL ( T i m e s h a r i n g d i s p a t c h )
5 f f 0 9 5 0 0 0 15248 2 1 u f s ( f i l e s y s t e m f o r u f s )
6 f f 0 b 8 00C
20e0 1 1 r o o t n e x (Sun4c r o o t nexus)
7 ff084a0C n o
57 1 o p t i o n s l o p t i o n s d r i v e r ) Слова 12. Дройверы и ядро
277

8 ffOBdcOO 2 f 4 62 1 dma ( D i r e c t Memory A c c e s s )
9 f f O S c O O O 9 6 8 5 9 1 s b u s ( S B u s n e x u s d r i v e r ) В нашей системе Solaris этот список занял более 80 строк. Многие элементы, которые в других версиях U N I X "зашиты" в ядро (например,
UFS — локальная файловая система, в Solaris реализованы как загружаемые драйверы. Такая организация призвала значительно облегчить сторонним фирмам разработку программного обеспечения, которое будет легко и незаметно интегрироваться в ядро — по крайней мере теоретически. Драйвер можно добавить к ядру с помощью команды a d d d r v . Она загружает драйвер в ядро и создает необходимые ссылки иа устройство (при каждой перезагрузке ядра все ссылки перестраиваются. Драйвер остается частью системы до тех пор, пока не будет удален явно. Драйверы можно выгружать вручную с помощью команды rem_drv. После загрузки драйвера желательно также выполнить команду drvconfig. Она перестраивает каталоги добавляет в него все файлы, связанные с загруженным драйвером. Загружаемые модули, доступ к которым через файлы устройств не производится, можно загружать и выгружать командами modload ив чем-то проще, а в чем-то — сложнее, чем Solaris, в плане обработки загружаемых модулей ядра, по крайней мере сточки зрения системных администраторов. В Linux почти все компоненты можно сделать загружаемыми модулями. Исключение составляет драйвер устройства, на котором расположена корневая файловая система. Загружаемые модули хранятся в каталоге /lib/modules/eepcw*, где последняя часть имени — это версия ядра Linux, о которой сообщает команда uname -г. Получить список загруженных в данный момент модулей можно с помощью команды Is mod.
# lamod
M o d i
Le
S i z e
U s e d b y
РРР
2 1 4 5 2 0 s l h c
4 2 3 6 0 [ p p p ] d s
6 3 4 4 1
1 8 2 J 6 5 2 6 6 4 4 1 p c m c i a c o r e
5 7 0 2 4 0 [ d s Как видно из списка, в системе установлены модули контроллера
PCMCIA, драйвер РРР, а также модули сжатия РРР-заголовков. Загружаемые модули Linux вы можете подключать к ядру посредством команды insmod. В частности, с помощью приведенной ниже команды можно добавить модуль нашего устройства "snarf":
# inamod /path/to/шлагf.о Также имеется возможность передавать модулям конфигурационные параметры, например Ио После того как модуль был вручную добавлен к ядру, удалить его вы сможете только по явному запросу. Для этой цели подойдет команда rnimod
274
Чость I. Основы одминистрировония
snarf. Команду rmniod разрешается выполнять в любое время, но она сработает только в том случае, если текущее число ссылок на модуль (указано в столбце
U s e d bv вывода команды Ismod) равно 0. МОДУЛИ ядра Linux могут зафужаться полуавтоматически с помощью команды modprobe, которая распознает межмодульные зависимости, параметры модулей, процедуры инсталляции и выгрузки. Эта команда просматривает файл /elc/conf.modules, чтобы узнать, как обрабатывать каждый модуль. Можно динамически создать файл /etc/conf.modules, соответствующий текущей конфигурации, выполнив команду modprobe -с. Эта команда генерирует длинный файл, имеющий примерно следующий вид t T h i s f i l e was g e n e r a t e d by: modprobe - c ( 2 . 1 . 1 2 1 ) p a t h [ p c m c i a ] = / l i b / m o d u l e s / p r e f e r r e d p a t h I p c r r . c i a I = / l i b / m o d u l e s / d e f a u l t p a t h I p c m c i a ] - / l i b / m o d u l e s / 2 . 3 . 3 9 p a t h [ m i s c ) = / l i b / m o d u l e s / 2 . 3 . 3 9
I A l i a s e s a l i a s b i o c k - m a j o r - 1 r d a l i a s b l o c k - m a j o r - 2 f l o p p y a l i a s c h a r - m a ] o r - 4 s e r i a l a l i a s c h a r - i r . a j o r - 5 s e r i a l a l i a s c h a r - m a j o r - 6 l p a n a s dos msdos a l i a s plipQ p l i p a l i a s pppO ppp o p t i o n s n e io=x0340 i r q = 9 Инструкции p a t h указывают на то, где можно найти конкретный модуль. Существует возможность модифицировать или добавлять записи данного типа при необходимости хранить модули в нестандартных каталогах. Инструкция a l i a s обеспечивает привязку старших номеров блок-ори- ентированных и байт-ориентированных устройств, файловых систем, сетевых устройств и сетевых протоколов к соответствующим модулям. Поддерживается динамическая загрузка модулей, реализуемая демоном k e r n e l d (см. ниже. Строки с ключевым словом o p t i o n s не генерируются динамически. Они задают параметры, передаваемые модулю при его загрузке. Например, в следующей строке модулю устройства "snarf* сообщаются адрес ввода-вывода и вектор прерываний o p t - i o n s s n a r f i o - o x X X X i r q = X Команда modprobe понимает также инструкции p r e - i n s t a l l , p o s t - i n - s t a l l , o r e - r e m o v e , p o s t - r e m o v e , i n s t a l l и remove. Сих помошью задаются команды выполняемые, когда соответствующий модуль подключается к работающему ядру или отключается от него. Их синтаксис таков p r e - i n s t a i l модуль команда i n s t a l l модуль команда . . . p o s t - i n s t a l l модуль команда p r e - r e m o v e модуль команда .. remove модуль команда . . . с модуль команда . Слова 12. Дройверы и ядро
279
Команды выполняются соответственно перед подключением, одновременно с подключением (если это возможно, после подключения, перед удалением, вовремя удаления (если возможно) и после удаления. Но это еще не все Модули ядра могут загружаться и выгружаться динамически демоном kerneld. Если этот демон запушен, модули загружаются автоматически при обращении к связанным сними устройствам. Демон берет конфигурационную информацию из файла /etc/conf.modules, как и команда modprobe. На основании инструкций a l i a s определяется, какой модуль закреплен за нужным устройством. Например, если кто-то пытается обратиться к последовательному порту, а драйвер порта не загружен, демон просматривает файл /etc/conf.modules в поисках модуля, связанного с байт-ориентированным устройством, старший номер которого равен 4. Вообще демон kerneld делает все тоже самое, что и команда modprobe, просто он предназначен для постоянной фоновой работы.
FreeBSD Во FreeBSD поддержка модулей появилась недавно по сравнению си даже Linux. Текущие версии FreeBSD не позволяют добавлять драйвер устройства к работающему ядру. В основном все сводится к открытию файла
/dev/kmem и вставке в него некоторого кода. Возможно, именно по этой причине поддержка загружаемых модулей отключена в ядре GENERIC. Как ни странно, во FreeBSD присутствуют команды modload, modstat и modunload, которые соответственно загружают модуль, отображают его статус и выгружают. Все они выполняют системный вызов ioctl по отношению к файлу /dev/fkm. По умолчанию модули ядра FreeBSD располагаются в каталоге /modules. Все эти модули управляются посредством вышеупомянутых утилит.
12.12. Рекомендуемая литература
• McKusick, Marshall Kirk, ei al. The Design and Implementation of the 4.4BSD
Operating System. Reading. MA: Addison-Wesley. 1996.
• Beck, Michael, et al. Linux Kernel Internals, Second Edition. Reading, MA.
Addison-Wesley. 1998.
280
Чость I. Основы одминистрировония
1   ...   20   21   22   23   24   25   26   27   ...   82


База данных защищена авторским правом ©nethash.ru 2019
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал