DFILE(4) DFILE(4) НАЗВАНИЕ dfile - файл с информацией об устройствах ОПИСАНИЕ Файл устройств, dfile, содержит информацию об устройст- вах, входящих в систему. Файл делится на три части. Первая содержит спецификации физических устройств. Вто- рая - системно-зависимую информацию. Третья часть со- держит информацию, относящуюся к конкретному микропро- цессору. Первые две части являются обязательными, третья - нет. Строка со звездочкой в начале или звез- дочкой, перед которой идут табуляции или пробелы, явля- ется комментарием. Ниже описываются три части файла устройств. В качестве примера используется дисковый контроллер. Первая часть файла устройств Каждая строка состоит из четырех или пяти полей, разде- ленных табуляциями и/или пробелами и имеет следующий формат: |имя_устройства вектор адрес уровень число Имя_устройства задается так же, как в файле master(4), где оно располагается в поле 1 строк из первой части и состоит не более чем из 8 символов [см. master(4)]. Вектор задает шестнадцатеричный адрес вектора прерыва ний; это значение используется также в массиве векторов прерываний, который создается при указании буквы v в поле 4 файла master(4). Адрес является шестнадцатеричным адресом устройства; массив адресов устройств создается автоматически (например, hd_addr [ ]). Уровень - это уровень запроса шины или уровень прерыва- ний (от 1 до 7). Он используется в массиве уровней пре- рываний (например, hd_ilev [ ]), который создается при указании буквы l в поле 4 строк первой части файла master(4). Пятое поле, число - есть (десятичное) число устройств, ассоциированных с соответствующим контроллером. Поле число - необязательное и, если оно опущено, использует- ся значение по умолчанию, которое является максимальным для данного контроллера. Данное поле означает то же, что и поле 9 строк первой части файла master(4), но значение из файла устройств перекрывает значение из файла master(4). Имеется также несколько драйверов, которые могут под держиваться системой, но которые являются драйверами псевдоустройств, то есть нет реального оборудования, ассоциированного с ними. В описании псевдоустройств значения полей вектор, адрес и уровень_запроса равны нулю. Вторая часть файла устройств Вторая часть содержит строки шести различных типов. Обязательны только строки первых четырех типов. Порядок спецификаций может быть произвольным. 1.Спецификация устройств для корня, каналов и дампа Три строки по три поля в каждой описывают устройства для корневой файловой системы, для создания каналов и для выдачи дампа при сбое системы: |root имя_устройства младший_номер |pipe имя_устройства младший_номер |dump имя_устройства младший_номер Младший_номер является восьмеричным. 2.Спецификация устройства для подкачки Одна строка с пятью полями задает устройство, которое будет использоваться для подкачки: |swap имя_устройства младший_номер нач_блок число Нач_блок есть блок диска (десятичный), с которого начи- нается область подкачки; число задает размер области в блоках. 3.Спецификация типа файловой системы Несколько строк по пять полей в каждой содержат описа- ния типов файловых систем: |filesys ид_1 флаг_1 ид_2 флаги_2 Ид_1 есть имя типа файловой системы (не более чем из четырех символов) в том виде, как оно выдается компо- нентом fs_namei ( ) структуры fstypsw [см. ]. Установленный флаг_1 означает, что после очередного об- ращения к описателю файла будет вызван компонент fs_iput ( ) структуры fstypsw, что влияет на режим бу- феризации. Для файловых систем версии 5 этот флаг дол- жен быть нулевым. Ид_2 есть имя типа файловой системы (не более чем из восьми символов) в том виде, как оно хранится в струк- туре fsinfo [см. ]. Если файловая система должна уведомляться о некоторых действиях, следует установить соответствующие флаги из флагов_2. Уведомление состоит в вызове компонента fs_notify ( ) структуры fstypsw. Можно установить такие флаги (или их комбинацию): 1 Изменение каталога. 2 Изменение корня. 4 Позиционирование. Например, строка |fylesys s5 0 S51k 04 описывает стандартную файловую систему версии 5. 4.Спецификация режима работы с линией Несколько строк файла устройств по три поля в каждой описывают режимы работы с линией: |linemod имя_режима список_обработчиков Имя_режима состоит не более чем из четырех символов. Список_обработчиков задается как цепочка символов. Бук- ва соответствует существующему обработчику, отсутств обозначается символом -. Могут задаваться следующие об- работчики: m Обработка прерываний модема. o Обработка вывода. i Обработка ввода. O Обработка открытия. C Обработка закрытия. R Обработка чтения. W Обработка записи. I Обработка управления. Стандартный режим задается как -oiOCRWI, то есть обра- батывать все, кроме прерываний модема. 5.Спецификация фактических параметров Каждый параметр, упомянутый в файле master(4), может получить (новое) значение. Строка спецификации парамет ра состоит из двух полей: |имя_параметра значение Отметим, что все параметры должны получить значение, либо в файле master(4), либо в описываемом файле уст- ройств. 6.Спецификация модулей потоков Данная спецификация может содержать несколько строк, каждая из которых состоит из трех полей и описывает один модуль потока: |stream имя_модуля имя_структуры Имя_модуля задает модуль потока, который может встре- чаться в команде I_PUSH системного вызова ioctl(2) [см. streamio(7)]. Имя_структуры есть имя указателя на структуру типа streamtab. И имя_модуля, и имя_структуры должны состо- ять не более чем из восьми символов. Третья часть файла устройств Третья часть содержит строки, каждая из которых начина- ется с определенного ключевого слова. Играет роль поря- док этих строк. 1.Спецификация нестандартных драйверов Данная спецификация может содержать несколько строк по два поля в каждой: |force идентификатор где идентификатор есть имя уникального идентификатора, определенного внутри драйвера, находящегося в библиоте- ке ввода/вывода ядра ОС. В результате при редактирова- нии связей будут правильно подключены нетаблично управ- ляемые драйверы, такие, например, как драйверы часов, консоли и устройства управления памятью. 2.Спецификация сторонних обработчиков прерываний Данная спецификация может содержать несколько строк по три поля в каждой: |alien адрес_вектора сторонний_обработчик Адрес_вектора есть шестнадцатеричный адрес обычного вектора прерываний, подлежащих дополнительной обработ ке, а сторонний_обработчик задается шестнадцатеричным адресом точки входа. Если с адресом_вектора не ассоции- рован обработчик прерываний, то сторонний_обработчик помещается в вектор. В противном случае в программе low.s порождаются команды [см. config(1M)], чтобы сто- ронний_обработчик получал управление, только если пре- рывание произошло в привилегированном режиме. 3.Спецификация множественной обработки прерываний Данная спецификация может содержать несколько строк, в каждой из которых по четыре или пять полей: |dup флаги адрес_вектора обработчик аргумент Флаги представляют собой битную маску. Биты интерпрети- руются следующим образом: 1 Если обработчик вернул 0, перейти на нормальную точку возврата из прерывания ("intret"). 2 Если обработчик вернул 0, перейти на нормальную точку возврата из ловушки ("alltraps"). 4 Если обработчик вернул 0, перейти на точку возвра та по равенству ("beq return"). 10 Программе обработки прерывания должен быть передан аргумент. Адрес_вектора есть шестнадцатеричный адрес вектора рываний. Обработчик - есть имя программы обработки пре- рываний с необязательным аргументом. Цель данной специ- фикации - обеспечить возможность задания нескольких программ обработки для одного прерывания. Обработчики вызываются в порядке их указания в файле устройств; за- тем вызывается нормальная программа обработки прерыва- ний. Если биты 1, 2 или 4 флагов равны 1, а обработчик вернул 0, оставшиеся обработчики не вызываются. 4.Спецификация конфигурации памяти Данная спецификация может содержать несколько строк, в каждой из которых по четыре или пять полей: |ram флаги мин_адрес макс_адрес [размер] Флаги представляют собой битную маску. Биты интерпрети- руются следующим образом: 1 Память не имеет контроля четности и, следователь- но, не требует инициализации после включения пита- ния. 2 Может существовать только единый блок памяти, от мин_адреса до макс_адреса-1. 4 В диапазоне от мин_адреса до макс_адреса-1 может располагаться несколько блоков памяти, каждый ука- занного размера. Мин_адрес, макс_адрес и размер являются шестнадцатерич ными. Цель данной спецификации - предоставить ядру ОС информацию о конфигурации памяти, содержащей разрывы. Мин_адрес определяет минимальный адрес, по которому мо- жет находиться память, макс_адрес-1 есть верхняя грани- ца. Если в этих пределах содержится несколько плат па- мяти, часть которых может отсутствовать, каждая из них должна иметь заданный размер. Если память помечена флагами со значением 2, ядро ОС осуществляет запись в последовательные ячейки, начиная с мин_адреса, пока не возникнет ошибка памяти. Если ус- тановлен флаг 4, ядро ОС проверяет каждый поддиапазон указанного размера. Если память не нуждается в инициа лизации, для определения наличия памяти проверяется только первый байт диапазона (флаг 2) или поддиапазона (флаг 4). Существенно, что строки, специфицирующие конфигурацию памяти, должны располагаться в порядке возрастания ми- нимальных адресов. Если два минимальных адреса равны (в диапазоне могут располагаться блоки памяти разного раз мера), строки должны быть упорядочены по возрастанию размеров. ФАЙЛЫ /usr/src/uts/dfile /usr/src/uts/master /usr/src/uts/low.s /usr/src/uts/conf.c /usr/include/sys/conf.h СМ. ТАКЖЕ master(4). config(1M) в Справочнике администратора.