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).
Имеется также несколько драйверов, которые могут поддерживаться системой, но которые являются драйверами
псевдоустройств, то есть нет реального оборудования,
ассоциированного с ними. В описании псевдоустройств
значения полей вектор, адрес и уровень_запроса равны
нулю.
Вторая часть файла устройств
Вторая часть содержит строки шести различных типов.
Обязательны только строки первых четырех типов. Порядок
спецификаций может быть произвольным.
- Спецификация устройств для корня, каналов и дампа
Три строки по три поля в каждой описывают устройства
для корневой файловой системы, для создания каналов и
для выдачи дампа при сбое системы:
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. Можно установить такие
флаги (или их комбинацию):
1 | Изменение каталога. |
2 | Изменение корня. |
4 | Позиционирование. |
Например, строка
fylesys s5 0 S51k 04
описывает стандартную файловую систему версии 5.
- Спецификация режима работы с линией
Несколько строк файла устройств по три поля в каждой
описывают режимы работы с линией:
linemod имя_режима список_обработчиков
Имя_режима состоит не более чем из четырех символов.
Список_обработчиков задается как цепочка символов. Буква соответствует существующему обработчику, отсутствие
обозначается символом -. Могут задаваться следующие обработчики:
m | Обработка прерываний модема. |
o | Обработка вывода. |
i | Обработка ввода. |
O | Обработка открытия. |
C | Обработка закрытия. |
R | Обработка чтения. |
W | Обработка записи. |
I | Обработка управления. |
Стандартный режим задается как -oiOCRWI, то есть обрабатывать все, кроме прерываний модема.
- Спецификация фактических параметров
Каждый параметр, упомянутый в файле master(4), может
получить (новое) значение. Строка спецификации параметра состоит из двух полей:
имя_параметра значение
Отметим, что все параметры должны получить значение,
либо в файле master(4), либо в описываемом файле устройств.
- Спецификация модулей потоков
Данная спецификация может содержать несколько строк,
каждая из которых состоит из трех полей и описывает
один модуль потока:
stream имя_модуля имя_структуры
Имя_модуля задает модуль потока, который может встречаться в команде I_PUSH системного вызова ioctl(2) [см.
streamio(7)].
Имя_структуры есть имя указателя на структуру типа
streamtab. И имя_модуля, и имя_структуры должны состоять не более чем из восьми символов.
Третья часть файла устройств
Третья часть содержит строки, каждая из которых начинается с определенного ключевого слова. Играет роль порядок этих строк.
- Спецификация нестандартных драйверов
Данная спецификация может содержать несколько строк по
два поля в каждой:
force идентификатор
где идентификатор есть имя уникального идентификатора,
определенного внутри драйвера, находящегося в библиотеке ввода/вывода ядра ОС. В результате при редактировании связей будут правильно подключены нетаблично управляемые драйверы, такие, например, как драйверы часов,
консоли и устройства управления памятью.
- Спецификация сторонних обработчиков прерываний
Данная спецификация может содержать несколько строк по
три поля в каждой:
alien адрес_вектора сторонний_обработчик
Адрес_вектора есть шестнадцатеричный адрес обычного
вектора прерываний, подлежащих дополнительной обработке, а сторонний_обработчик задается шестнадцатеричным
адресом точки входа. Если с адресом_вектора не ассоциирован обработчик прерываний, то сторонний_обработчик
помещается в вектор. В противном случае в программе
low.s порождаются команды [см. config(1M)], чтобы сторонний_обработчик получал управление, только если прерывание произошло в привилегированном режиме.
- Спецификация множественной обработки прерываний
Данная спецификация может содержать несколько строк, в
каждой из которых по четыре или пять полей:
dup флаги адрес_вектора обработчик аргумент
Флаги представляют собой битную маску. Биты интерпретируются следующим образом:
1 | Если обработчик вернул 0, перейти на нормальную
точку возврата из прерывания ("intret"). |
2 | Если обработчик вернул 0, перейти на нормальную
точку возврата из ловушки ("alltraps"). |
4 | Если обработчик вернул 0, перейти на точку возврата по равенству ("beq return"). |
10 | Программе обработки прерывания должен быть передан
аргумент. |
Адрес_вектора есть шестнадцатеричный адрес вектора прерываний. Обработчик - есть имя программы обработки прерываний с необязательным аргументом. Цель данной спецификации - обеспечить возможность задания нескольких
программ обработки для одного прерывания. Обработчики
вызываются в порядке их указания в файле устройств; затем вызывается нормальная программа обработки прерываний. Если биты 1, 2 или 4 флагов равны 1, а обработчик
вернул 0, оставшиеся обработчики не вызываются.
- Спецификация конфигурации памяти
Данная спецификация может содержать несколько строк, в
каждой из которых по четыре или пять полей:
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) в Справочнике администратора.