DFILE(4)
DFILE(4)
НАЗВАНИЕ
dfile - файл с информацией об устройствах
ОПИСАНИЕ
Файл устройств, dfile, содержит информацию об устройствах, входящих в систему. Файл делится на три части. Первая содержит спецификации физических устройств. Вторая - системно-зависимую информацию. Третья часть содержит информацию, относящуюся к конкретному микропроцессору. Первые две части являются обязательными, третья - нет. Строка со звездочкой в начале или звездочкой, перед которой идут табуляции или пробелы, является комментарием.
Ниже описываются три части файла устройств. В качестве примера используется дисковый контроллер.
Первая часть файла устройств
Каждая строка состоит из четырех или пяти полей, разделенных табуляциями и/или пробелами и имеет следующий формат:
имя_устройства вектор адрес уровень число
Имя_устройства задается так же, как в файле , где оно располагается в поле 1 строк из первой части и состоит не более чем из 8 символов [см. ].
Вектор задает шестнадцатеричный адрес вектора прерываний; это значение используется также в массиве векторов прерываний, который создается при указании буквы v в поле 4 файла .
Адрес является шестнадцатеричным адресом устройства; массив адресов устройств создается автоматически (например, hd_addr [ ]).
Уровень - это уровень запроса шины или уровень прерываний (от 1 до 7). Он используется в массиве уровней прерываний (например, hd_ilev [ ]), который создается при указании буквы l в поле 4 строк первой части файла .
Пятое поле, число - есть (десятичное) число устройств, ассоциированных с соответствующим контроллером. Поле число - необязательное и, если оно опущено, используется значение по умолчанию, которое является максимальным для данного контроллера. Данное поле означает то же, что и поле 9 строк первой части файла , но значение из файла устройств перекрывает значение из файла .
Имеется также несколько драйверов, которые могут поддерживаться системой, но которые являются драйверами псевдоустройств, то есть нет реального оборудования, ассоциированного с ними. В описании псевдоустройств значения полей вектор, адрес и уровень_запроса равны нулю.
Вторая часть файла устройств
Вторая часть содержит строки шести различных типов. Обязательны только строки первых четырех типов. Порядок спецификаций может быть произвольным.
- Спецификация устройств для корня, каналов и дампа
Три строки по три поля в каждой описывают устройства для корневой файловой системы, для создания каналов и для выдачи дампа при сбое системы:
root имя_устройства младший_номер pipe имя_устройства младший_номер dump имя_устройства младший_номер
Младший_номер является восьмеричным. - Спецификация устройства для подкачки
Одна строка с пятью полями задает устройство, которое будет использоваться для подкачки:
swap имя_устройства младший_номер нач_блок число
Нач_блок есть блок диска (десятичный), с которого начинается область подкачки; число задает размер области в блоках. - Спецификация типа файловой системы
Несколько строк по пять полей в каждой содержат описания типов файловых систем:
filesys ид_1 флаг_1 ид_2 флаги_2
Ид_1 есть имя типа файловой системы (не более чем из четырех символов) в том виде, как оно выдается компонентом fs_namei ( ) структуры fstypsw [см. <sys/ conf.h>].
Установленный флаг_1 означает, что после очередного обращения к описателю файла будет вызван компонент fs_iput ( ) структуры fstypsw, что влияет на режим буферизации. Для файловых систем версии 5 этот флаг должен быть нулевым.
Ид_2 есть имя типа файловой системы (не более чем из восьми символов) в том виде, как оно хранится в структуре fsinfo [см. <sys/conf.h>].
Если файловая система должна уведомляться о некоторых действиях, следует установить соответствующие флаги из флагов_2. Уведомление состоит в вызове компонента fs_notify ( ) структуры fstypsw. Можно установить такие флаги (или их комбинацию):
Изменение каталога. |
Изменение корня. |
Позиционирование. |
fylesys s5 0 S51k 04
описывает стандартную файловую систему версии 5.
Несколько строк файла устройств по три поля в каждой описывают режимы работы с линией:
linemod имя_режима список_обработчиков
Имя_режима состоит не более чем из четырех символов.
Список_обработчиков задается как цепочка символов. Буква соответствует существующему обработчику, отсутствие обозначается символом -. Могут задаваться следующие обработчики:
Обработка прерываний модема. |
Обработка вывода. |
Обработка ввода. |
Обработка открытия. |
Обработка закрытия. |
Обработка чтения. |
Обработка записи. |
Обработка управления. |
Каждый параметр, упомянутый в файле , может получить (новое) значение. Строка спецификации параметра состоит из двух полей:
имя_параметра значение
Отметим, что все параметры должны получить значение, либо в файле , либо в описываемом файле устройств.
stream имя_модуля имя_структуры
Имя_модуля задает модуль потока, который может встречаться в команде I_PUSH системного вызова [см. ].
Имя_структуры есть имя указателя на структуру типа streamtab. И имя_модуля, и имя_структуры должны состоять не более чем из восьми символов.
Третья часть файла устройств
Третья часть содержит строки, каждая из которых начинается с определенного ключевого слова. Играет роль порядок этих строк.
- Спецификация нестандартных драйверов
Данная спецификация может содержать несколько строк по два поля в каждой:
force идентификатор
где идентификатор есть имя уникального идентификатора, определенного внутри драйвера, находящегося в библиотеке ввода/вывода ядра ОС. В результате при редактировании связей будут правильно подключены нетаблично управляемые драйверы, такие, например, как драйверы часов, консоли и устройства управления памятью. - Спецификация сторонних обработчиков прерываний
Данная спецификация может содержать несколько строк по три поля в каждой:
alien адрес_вектора сторонний_обработчик
Адрес_вектора есть шестнадцатеричный адрес обычного вектора прерываний, подлежащих дополнительной обработке, а сторонний_обработчик задается шестнадцатеричным адресом точки входа. Если с адресом_вектора не ассоциирован обработчик прерываний, то сторонний_обработчик помещается в вектор. В противном случае в программе low.s порождаются команды [см. ], чтобы сторонний_обработчик получал управление, только если прерывание произошло в привилегированном режиме. - Спецификация множественной обработки прерываний
Данная спецификация может содержать несколько строк, в каждой из которых по четыре или пять полей:
dup флаги адрес_вектора обработчик аргумент
Флаги представляют собой битную маску. Биты интерпретируются следующим образом:1 Если обработчик вернул 0, перейти на нормальную точку возврата из прерывания ("intret"). 2 Если обработчик вернул 0, перейти на нормальную точку возврата из ловушки ("alltraps"). 4 Если обработчик вернул 0, перейти на точку возврата по равенству ("beq return"). 10 Программе обработки прерывания должен быть передан аргумент.
Адрес_вектора есть шестнадцатеричный адрес вектора прерываний. Обработчик - есть имя программы обработки прерываний с необязательным аргументом. Цель данной спецификации - обеспечить возможность задания нескольких программ обработки для одного прерывания. Обработчики вызываются в порядке их указания в файле устройств; затем вызывается нормальная программа обработки прерываний. Если биты 1, 2 или 4 флагов равны 1, а обработчик вернул 0, оставшиеся обработчики не вызываются.
Данная спецификация может содержать несколько строк, в каждой из которых по четыре или пять полей:
ram флаги мин_адрес макс_адрес [размер]
Флаги представляют собой битную маску. Биты интерпретируются следующим образом:
Память не имеет контроля четности и, следовательно, не требует инициализации после включения питания. |
Может существовать только единый блок памяти, от мин_адреса до макс_адреса-1. |
В диапазоне от мин_адреса до макс_адреса-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
СМ. ТАКЖЕ
.
в Справочнике администратора.