
        Драйвер tmk1553b v4.06 для плат сопряжения с мультиплексным
каналом по ГОСТ Р 52070-2003 и ГОСТ 27765.52-87 (MIL-STD-1553B) производства 
ЗАО "Элкус" позволяет создавать и использовать программное обеспечение для 
этих плат, работающее в среде Linux (Linux kernel 2.2/2.4/2.6).

        Драйвер tmk1553b поддерживает одновременно до 8 устройств, 
выпускаемых в настоящее время ЗАО "Элкус": ТМК-400, РТМК-400, МТМК-400, TX1-PC
(TE1-PC), TX1-MP, TX1-104 (TE1-104), TX6-PC (TE6-PC), TX6-104 (TE6-104),
TE1-PCI, TE1-PCI2, TE6-PCI, TE6-PCI2, TE1-PCI4, TE6-PCI4, TA1-PC, TAM1, 
TA1-104, TA1-PCI, TA1-PCI4, TA1-PCI-32RT, TA1-PE2, TA1-PE4. Поддерживаются 
не 8 плат, а 8 независимых устройств, расположенных на платах. Поэтому, 
например, плата TE1-PCI2 содержит 2 независимых устройства, и таких плат можно
будет включить только 4. Кроме 8 физических устройств поддерживается до 23 
виртуальных ОУ, расположенных на одной или нескольких платах, поддерживающих 
работу в режиме многоадресного ОУ (TE6-PCI, TE6-PCI2, TA1-PCI-32RT).

        Платы серий ТМК-400, РТМК-400, МТМК-400 могут работать в режимах
КК (контроллер канала) или ОУ (оконечное устройство).
        Платы серий TX1/TE1 могут работать в режимах КК, ОУ или МТ
(монитор).
        Платы серий TX6/TE6 могут работать в режимах КК, ОУ или МТ. Кроме 
того, можно сконфигурировать эти платы для работы в режиме многоадресного ОУ 
(4 независимых ОУ на одной плате).
        Платы серии TA1 могут работать в режимах КК, ОУ или МТ. Эта версия 
драйвера не поддерживает комбинированный режим ОУ/МТ и режим МС (монитор 
слов). Плата TA1-PCI-32RT может работать только в режиме многоадресного ОУ.

        В комплекте поставки драйвера идут скомпилированные модули для
ядер 2.2.16, 2.4.7, 2.4.32 (МСВС 3.0), 2.6.16 (64 бита), 2.6.21. Для 
использования с другими версиями ядра может потребоваться скомпилировать 
модуль драйвера.

        Для того, чтобы модуль драйвера мог скомпилироваться, необходимо, 
чтобы были установлены исходники ядра Linux (Linux kernel sources) или в 
новых ядрах заголовки иходников ядра (Linux kernel headers). Если планируется 
использовать потоки (threads) при работе с драйвером, используйте команды 
make24t/make26t/make26ut/make26uut (с суффиксом 't') для компиляции драйвера. 
Драйвер с поддержкой потоков был протестирован только в ядре 2.6. Скорее 
всего, в ядре 2.4 он должен работать только в том случае, если там потоки 
реализованы таким же способом, как это сделано в ядре 2.6, но это не 
проверялось. При работе с драйвером с поддержкой потоков учтите, что драйвер 
не содержит встроенных средств отслеживания переключения потоков. Это 
означает, что если Вы хотите работать с драйвером из нескольких потоков 
одного процесса, то Вы должны, в общем случае, обеспечить какой-то механизм 
синхронизации обращений к драйверу, так как большинство функций драйвера 
зависят от заданных в предшествующих вызовах выбранных устройства/базы/
подадреса. Единственная функция, не требующая такой синхронизации - 
tmkwaitevents. На уровне процессов не требуется никакой синхронизации 
обращений к драйверу, но при этом драйвер не позволит работать с одним 
устройством из нескольких процессов.

        Существует два варианта компиляции драйвера, первый - более простой и 
сначала надо использовать его, а если драйвер не компилируется или не 
запускается, можно попробовать второй.

1. В директории source/tmk1553b/ надо запустить соответствующую команду: 
   make22u для ядра 2.2, make24u или make24ut для ядра 2.4, make26uu или 
   make26uut для ядра 2.6.

2. В директории source/tmk1553b/ надо запустить соответствующую команду: 
   make22 для ядра 2.2, make24 или make24t для ядра 2.4, make26 или make26t 
   для ядра 2.6.
   Исходники ядра Linux должны быть расположены в папке /usr/src/linux для 
   успешной компиляции драйвера. Если такой папки нет, и исходники ядра 
   расположены в другой папке (например, /usr/src/linux-2.4), то необходимо 
   обеспечить существование папки /usr/src/linux с исходниками ядра Linux. 
   Для этого обычно достаточно выполнить команду подобную этой:
   link /usr/src/linux-2.4 /usr/src/linux
   Эта команда записана в прилагаемом файле linkkern24.
   В ядре 2.6 для компиляции драйвера может потребоваться предварительно 
   выполнить следующие команды:
   cd /usr/src/linux
   make mrproper
   make cloneconfig
   make modules_prepare

        Драйвер выполнен в виде загружаемого модуля ядра Linux. Для его 
запуска надо выполнить команду:

insmod tmk1553b.ko параметры

,а для его удаления в ядрах 2.2/2.4 надо выполнить команду:

rmmod tmk1553b.ko

, а в ядре 2.6 надо выполнить команду:

rmmod tmk1553b

        Кроме того, необходимо создать соответствующий файл устройства 
в каталоге /dev командой:

mknod /dev/tmk1553b c N 0

, где N - major номер, присвоенный драйверу. Вы можете либо выбрать его 
сами из свободных номеров и тогда задать его при вызове mknod и insmod, 
либо позволить драйверу получить его динамически и посмотреть этот номер 
в файле /proc/devices.

Эта команда (для N=254) записана в прилагаемом файле mkdev.

        В некоторых ядрах 2.6 можно не создавать устройство вручную, а 
запускать драйвер с дополнительным параметром misc=1. В этом случае, драйвер 
регистрируется в подсистеме устройства misc, и требуемый файл /dev/tmk1553b 
создается автоматически драйвером misc. В этом случае драйвер использует 
major номер драйвера misc (10), а minor номер присваивается динамически 
драйвером misc. Этот номер можно посмотреть в файле /proc/misc.

        В случае возникновения ошибок при запуске драйвера дополнительные 
диагностическе сообщения могут содержаться в конце файла /var/log/messages.

        В качестве параметров могут использоваться следующие выражения:
misc=N - включение режима регистрации устройства в подсистеме устройства misc, 
        N может быть 0 (режим выключен) или 1 (режим включен);
nrt=N - задание максимального количества виртуальных ОУ, формируемых на 
        каждом устройстве многоадресного ОУ;
major=N - задание major номера для драйвера. Если номер на задан, то
        драйвер пытается получить номер динамически. Если никто до этого 
        не запрашивал динамически major номер, то обычно он будет равен 
        254;
name="mydevice" - задание имени, под которым регистрируется
        драйвер. По умолчанию: name="tmk1553b";
a0=N - задание первого базового адреса регистров устройства 0 в области 
        ввода-вывода компьютера. Для большинства устройств этот адрес и 
        единственный, исключение - платы ТМК-400. Адрес задается в формате 
        C/C++, т.е. для задания шестнадцатеричного значения перед ним надо 
        поставить 0x;
b0=N - задание второго базового адреса регистров устройства 0 в области 
        ввода-вывода компьютера. Этот адрес надо задавать только для плат 
        ТМК-400. Адрес задается в формате C/C++, т.е. для задания 
        шестнадцатеричного значения перед ним надо поставить 0x;
i0=N - задание номера прерывания для устройства 0;
t0="type" - задание типа устройства 0. Допустимые значения "TMK400", 
        "RTMK400", "TMKMPC", "TMKX", "TMKXI", "TA", "TAI" аналогичны типам 
        при задании конфигурации в DOS в файле tmk.cfg;
l0="load" - задание типа загрузки для устройств TMKX. Допустимые значения 
        "TX1", "TX6", "MR6". По умолчанию используется "TX1";
d0=N - задание порядкового номера PCI платы MIL-STD-1553B в компьютере, 
        начиная с 1. Драйвер использует этот номер для различения нескольких 
        плат PCI, установленных в компьютер. Порядок присвоения номеров
        зависит от размещения плат в слотах PCI. Если в компьютере только
        одна такая плата MIL-STD-1553B, то ее номер 1;
e0=N - задание порядкового номера устройства на PCI платах, содержащих
        несколько устройств (TE1-PCI2, TE1-CPCI2 и т.п.), начиная с 1.

a1=N b1=N i1=N d1=N e1=N t1="type" l1="load"
a2=N b2=N i2=N d2=N e2=N t2="type" l2="load"
a3=N b3=N i3=N d3=N e3=N t3="type" l3="load"
a4=N b4=N i4=N d4=N e4=N t4="type" l4="load"
a5=N b5=N i5=N d5=N e5=N t5="type" l5="load"
a6=N b6=N i6=N d6=N e6=N t6="type" l6="load"
a7=N b7=N i7=N d7=N e7=N t7="type" l7="load" - аналогичные параметры для
        плат с номерами 1 - 7.

        Для устройств ISA надо указывать параметры a, [b], i, t, [l], для 
устройств PCI надо указывать параметры d, [e], t. Параметры b, e и l 
указывается при необходимости для соответствующих типов устройств.

Примеры:
1. Запуск драйвера для одной платы TX1-PC с адресом 150h и прерыванием 11,
используется динамическое выделение major номера, при этом заранее известно,
что в данной системе динамически будет выделен номер 254:

mknod /dev/tmk1553b c 254 0
insmod ./tmk1553b.ko a0=0x150 i0=11 t0="TMKX"

2. Запуск драйвера для двух плат: TX6-PC с адресом 150h и прерыванием 10 и
ТМК-400 с адресами 120h, 130h и прерыванием 11, задается major номер 123:

mknod /dev/tmk1553b c 123 0
insmod ./tmk1553b.ko major=123 a0=0x150 i0=10 t0="TMKX" l0="TX6" a1=0x120 b1=0x130 i1=11 t1="TMK400"

3. Запуск драйвера для трех плат: TX6-PC с адресом 150h и прерыванием 10 и
двух плат TE1-PCI:

mknod /dev/tmk1553b c 254 0
insmod ./tmk1553b.ko a0=0x150 i0=10 t0="TMKX" l0="TX6" d1=1 t1="TMKXI" d2=2 t2="TMKXI"

4. Запуск драйвера для одной PCI платы с двумя устройствами TE1-PCI2:

mknod /dev/tmk1553b c 254 0
insmod ./tmk1553b.ko d0=1 e0=1 t0="TMKXI" d1=1 e1=2 t1="TMKXI"

5. Запуск драйвера для одной PCI платы с двумя устройствами TE6-PCI2 и
конфигурирование одного устройства как КК/ОУ/МТ, а другого - как
многоадресного ОУ:

mknod /dev/tmk1553b c 254 0
insmod ./tmk1553b.ko d0=1 e0=1 t0="TMKXI" d1=1 e1=2 t1="TMKXI" l1="MR6"

6. Запуск драйвера для двух плат: TX6-PC с адресом 150h и прерыванием 10 в
режиме многоадресного ОУ и платы TE1-PCI:

mknod /dev/tmk1553b c 254 0
insmod ./tmk1553b.ko a0=0x150 i0=10 t0="TMKX" l0="MR6" d1=1 t1="TMKXI"

7. Запуск драйвера для одной PCI платы TA1-PCI:

mknod /dev/tmk1553b c 254 0
insmod ./tmk1553b.ko d0=1 t0="TAI"

8. Запуск драйвера для одной PCI платы с 4-мя устройствами TA1-PCI4, 
регистрация в подсистеме misc устройств:

insmod ./tmk1553b.ko d0=1 e0=1 t0="TAI" d1=1 e1=2 t1="TAI" d2=1 e2=3 t2="TAI" d3=1 e3=4 t3="TAI" misc=1

9. Запуск драйвера для двух PCI плат многоадресного ОУ TA1-PCI-32RT, включение 
8 виртуальных ОУ на каждой плате, регистрация в подсистеме misc устройств:

insmod ./tmk1553b.ko d0=1 t0="MRTAI" d1=1 t1="MRTAI" nrt=8 misc=1

        После запуска драйвера, можно работать с драйвером в соответствии 
с Руководством программиста (tmkguide.doc) и Справочным руководством 
(tmkref.doc), которые доступны отдельным архивом по адресу
http://www.elcus.ru/files/mil-std/drv/1553docs.zip

        В директориях bin32 и bin64 находятся программы 'simpltst', 
'randbcrt', 'mt1553b', 'mt1553be'.

        Программа 'simpltst' - простой тест драйвера и одного устройства, 
в частности, тест памяти, расположенной на устройстве, и тест получения 
прерывания от устройства. Программа запускается без параметров (выполняется 
тест устройства с номером 0) или с одним параметром, задающим номер 
тестируемого устройства.
Использование:
'simpltst'   - выполняет тест устройства 0,
'simpltst 0' - выполняет тест устройства 0,
'simpltst 1' - выполняет тест устройства 1,
и т.д.

        Программа 'randbcrt' - совместный тест двух (КК и ОУ) или трех (КК, 
ОУ и МТ) устройств, соединенных линией передачи.
Использование:
'randbcrt [D D [D]] [a] [b] [c+-] [g+-] [i+-] [f+-] [eD] [mD-D]'
Параметры по умолчанию: 
'randbcrt 0 1 a b c+ g+ i+ f+ e0' - устройство 0 КК, устройство 1 ОУ, линии 
A и B, команды режима управления разрешены (c+), групповые команды разрешены 
(g+), аппаратный бит включен (i+), флаговый режим ОУ включен (f+), число 
ошибок - не ограничено (e0).

        Программы 'mt1553b' и 'mt1553be' - программы режима монитора 
сообщений, соответственно с русским (DOS кодировка) и английским интерфейсом. 
Программа пишет лог обмена в канале в файл и может отображать заданные данные 
на экране.
Использование: 
'mt1553b параметры'
Параметры (в круглых скобках - значения по умолчанию):
? - эта справка;
d<НомерУстройства(dec)> - задает номер устройства, начиная с 0 (нет);
n<ИмяФайла> - задает файл с результатами работы (nmonitor.dat);
l<ДлинаБуфера(dec)> - задает размер буфера сообщений программы (l%ld);
f<СловоЗаписи(hex)> - включает режим предзаписи указанного слова во все
     ячейки памяти монитора (выкл);
th<0-6> - включает аппаратную регистрацию времени сообщений (выкл);
b<+/-> - включает/выключает регистрацию групповых сообщений (b+);
ar<ДиапазонАдресовОУ(dec)> - задает диапазон адресов оконечных устройств,
     для которых производится регистрация сообщений; пример задания
     диапазона адресов: ar2,5-10,17,28-30 (ar0-30);
o<ДиапазонАдресовДанных(hex)> - задает диапазон адресов данных в канале,
     которые должны отображаться на экране при мониторинге; пример
     задания диапазона: o0E21,5223-5226 (выкл);
m<b/r/m> - задает режимы буферизации(b), регистрации(r),
     только мониторинга(m) (mr).
Примеры:
'mt1553b d0 ndata.sav l2000 fFFFF ar0-9,20-29'
'mt1553b d1 th'

        Исходные тексты драйвера и программ simpltst, randbcrt находятся в 
соответствующих поддиректориях директории source.

        Начиная с версии v2.00 драйвер tmk1553b поддерживает работу в
режиме многоадресного ОУ (4 ОУ на одной плате) для плат серий TX6/TE6.
Единственным существенным ограничением работы в этом режиме является
аппаратное ограничение плат на передачу данных между ОУ, находящимися
в одном и том же физическом устройстве многоадресного ОУ. То есть платы
не поддерживают передачу ОУ-ОУ между двумя ОУ в одном многоадресном ОУ.

        Для конфигурирования устройства TX6/TE6 в режиме многоадресного ОУ 
надо при загрузке модуля драйвера указать тип загрузки lN="MR6" (N - номер
устройства, см. примеры выше). После запуска драйвера соответствующее
устройство будет работать в режиме многоадресного ОУ. При изменении режима 
загрузки (между "TX6" и "MR6") для ISA плат необходимо перезагружать 
компьютер. Для PCI плат достаточно перезапустить драйвер с новой
конфигурацией.

        Начиная с версии v4.00 драйвер tmk1553b поддерживает работу в
режиме многоадресного ОУ (31 ОУ на одной плате) для плат серии TA1-PCI-32RT.

        Если физическим устройствам номера присваивает сам пользователь
при задании конфигурации, то номера виртуальных ОУ в рамках физического
многоадресного ОУ формирует драйвер, начиная с некоторого номера,
заданного при компиляции драйвера. Этот номер равен максимальному числу
физических устройств, с которыми может работать драйвер. Так как данная
версия может работать с 8-ю устройствами, то виртуальным ОУ присваиваются
номера, начиная с 8. В данной версии драйвера максимальное возможное число
виртуальных ОУ равно 23 (31-8). Программа simpltst позволяет узнать
начальный номер и число виртуальных ОУ, расположенных на заданном
физическом многоадресном ОУ, если ей в качестве параметра указать номер
этого многоадресного ОУ.

        В текущей версии драйвера полноценно можно использовать не более 23 
виртуальных ОУ, что вызвано ограничениями синтаксиса функции tmkwaitevents, 
использующей 32-битное знаковое число в качестве маски номеров устройств. 
Из них 8 разрядов отведено под физические устройства, оставляя 23 разряда 
для виртуальных устройств. В случае необходимости использовать несколько 
плат TA1-PCI-32RT с суммарным числом виртуальных ОУ менее 24, можно ограничить 
число виртуальных ОУ на одной плате, задав при запуске драйвера параметр nrt. 
В последующих версиях планируется расширение API для работы с большим числом 
виртуальных ОУ.

(с) ЗАО "Электронная компания ЭЛКУС", 2002, 2011.
