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 [см. <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.
  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) в Справочнике администратора.