Программное обеспечение
системы сбора данных установки
ВЕС
Драйвер QBUS аппаратных PC МИСС
В системе сбора данных на основе стандарта МИСС для управления каркасом электроники
используются контроллеры сектора типа ЛЭ-20И, ЛЭ-51, ЛЭ-83, для каркасов СУММА используются модули ЛЭ-20С.
Контроллеры объединяются параллельной шиной QBUS, интерфейс к которой существует в ЭВМ Электроника-60.
После замены Э-60 на IBM-PC, для связи с контроллерами сектора используются
платы PC-QBUS в стандарте PC/AT (ISA) или PCI. Для доступа к этим платам в операционной
системе Linux написаны драйвера устройств qbus, предоставляющие один и тот-же программный интерфейс,
что позволяет использовать разные платы с одними и теми-же программами.
Ввиду существенных различий между ядрами Linux 2.4 и 2.6 для них существуют отдельные версии.
Драйвер обслуживает до 2-х карт ISA-QBUS и 4-x PCI-QBUS, представляет собой загружаемый модуль ядра системы.
Загрузка драйвера происходит через командный файл /etc/init.d/pci-qbus (в случае драйвера для плат PCI), который поддерживает
стандартный интерфейс linux chkconfig. Скрипт создает 4 устройства /dev/pq[0-4] и два линка /dev/qbus0 и /dev/qbus1. Для плат ISA используется соответсвующий файл isa-qbus, создающий устройства /dev/iq[0-1].
Дистрибутивы Linuх на базе Debian используют несколько другое соглашение об уровнях системы, в отличие от RedHat, где уровень 5 является многопользовательским, Debian использует уровень 2. Для Debian следует немного подправить командный файл инициализации драйверов для работы с chkconfig.
Драйверу isa-qbus можно указать следующие дополнительные параметры:
- io=0x300,0x310 - порт ввода/вывода платы
- irq=10,11 - линии прерывания платы
- debug=0,1 - выкл,вкл диагностические сообщения
По умолчанию драйвер заводит два устройства qbus с адресами 0x300 и 0x310, и прерываниями
10 и 11 соответственно. Диагностические сообщения отключены.
В отличие от ISA, устройства на PCI получают окна ввода/вывода динамически, в зависимости от
положения платы на шине PCI, поэтому адреса портов указывать не надо.
Драйверу pci-qbus можно указать следующие параметры:
- debug=0,1 - выключить,включить диагностические сообщения
- interrupt=0,1 - выключить,включить поддержку прерываний (плата и драйвер PCI-QBUS в данный момент прерывания не поддерживает)
В случае если эти адреса или прерывания уже приписаны к какому-либо устройству,
драйвер выдаст ошибку в системный журнал.
Пользователю драйвер предоставляет следующие функции:
- open (char *device_name, int flags) - открытие устройства
- close (int node) - закрытие устройства
- lseek (int node, int offset, int whence) - установка адреса или сброс устройства
- whence=0 - установка адреса для операций read/write
- whence=1 - сброс ошибки контроллера, после таймаута по шине
- whence=2 - ресет шины QBUS и сброс ошибки контроллера
- read (int node, void *data, 2) - чтение 16-бит слова данных
- write (int node, void *data, 2) - запись 16-бит слова данных
Если при чтении/записи произошел сбой(таймаут) то функции read/write возвращают 0 переданных байт.
Для упрощения работы с устройством в С++ написан класс QBUS (см. qbus.h).
Из командной строки можно пользоваться утилитой qbus (см. qbus.cc)
Исходный текст драйвера pci-qbus.c находится в каталоге ~roger/online/src/pci-qbus-2.6.
Для сборки используется Makefile.
Last updated Apr-2008 by Solo