
Это версия 4.07c только обновления исходников драйвера для 
Linux для плат ISA, PCI и PCI-Express для компиляции в 
ядрах 2.2-6.x:
http://www.elcus.ru/files/mil-std/drv/upd1553lin407c.zip

Основной полный архив драйвера версии 4.06 для Linux для 
версий ядер 2.2-3.3:
http://www.elcus.ru/files/mil-std/drv/1553lin406.zip
http://www.elcus.ru/files/mil-std/drv/1553lin.zip

В папке tmk1553b_upd407c находится обновление исходников 
драйвера версии 4.07c для компиляции нового драйвера. 
Существующие пользовательские программы, работающие с 
драйвером, не требуют перекомпиляции, но в папке include 
находится чуть исправленный и дополненный вариант 
интерфейса ltmk.c и ltmk.h к драйверу, который можно 
использовать взамен варианта из основного архива драйвера 
версии 4.06.

Для компиляции модуля драйвера надо установить в целевой 
системе пакет заголовков ядра, совпадающий по версии с 
версией ядра самой целевой системы, и пакеты средств 
компиляции.

Пакет заголовков ядра устанавливается командой:
sudo apt install linux-headers-$(uname -r)

В некоторых случаях пакет заголовков ядра может иметь 
нестандартное имя или оказаться неполным, тогда можно 
попробовать вариант:
sudo apt install linux-headers*

Необходимые пакеты средств компиляции устанавливаются 
командами:
sudo apt install gcc
sudo apt install make

Для компиляции модуля драйвера этих пакетов обычно 
достаточно. Результатом успешной компиляции является 
создание файла модуля драйвера tmk1553b.ko в папке с 
исходниками драйвера. Но в зависимости от дистрибутива 
Linux при компиляции модулей ядра могут вызываться 
дополнительные средства, отсутствие которых может 
приводить к выводу дополнительных предупреждений при 
компиляции, но на сам результат компиляции принципиально 
не влияет. Для таких случаев можно установить требуемые 
дополнительнкые пакеты или дополнительно настроить 
дистрибутив какими-то из набора следующих команд:

sudo apt install libelf-dev
sudo apt install pahole
sudo ln -s /sys/kernel/btf/vmlinux /usr/src/linux-headers-$(uname -r)/vmlinux

Для компиляции драйвера в целевой системе c ядром c 2.6 
по 6.x (при работе в том ядре, под которым надо будет 
запускать драйвер) надо запускать скрипт make26umt или 
make26um в папке с исходниками драйвера. В ядрах с 2.6 
по 4.x можно запускать скрипт make26uut или make26uu в 
случае проблем (например, в ранних дистрибутивах с 
ядром 2.6) запуска make26umt или make26um. Например, 
первая команда делает скрипт make26umt исполняемым, 
вторая запускает компиляцию:
chmod +x make26umt
./make26umt

В результате компиляции в папке с исходниками драйвера 
должен получиться файл модуля драйвера tmk1553b.ko.

Пример рабочей последовательности ручного запуска 
скомпилированного драйвера для одной двухканальной 
платы серии TA1 на шине PCI-Express или PCI (TA1-PE2 
или TA1-PCI4-02) для свежих Linux (при этом файл 
устройства /dev/tmk1553b вручную не надо создавать, 
используется дополнительный параметр misc=1):

1) запуск драйвера в папке с компилированным модулем 
драйвера для двух устройств с номерами 0 и 1:
sudo insmod ./tmk1553b.ko d0=1 e0=1 t0="TAI" d1=1 e1=2 t1="TAI" misc=1 
2) настройка прав доступа всем к файлу устройства:
sudo chmod ugo+r /dev/tmk1553b 
3) проверка работоспособности устройств с номерами 0 и 1 
в папке программ:
./simpltst 0
./simpltst 1

Указанные в этом примере параметры приведены для плат 
серии TA1 с двумя каналами на шине PCI-Express или PCI.
Примеры параметров запуска драйвера для разных типов 
плат также есть в readme (DOS кодировка) и в readme_e 
(англ. язык) в основном архиве драйвера 4.06, но их 
надо использовать с учётом замечания по параметрам 
запуска драйвера, приведённому в конце этого текста.

Программы брать из комплекта драйвера с диска или из 
основного архива драйвера 4.06 с сайта:
http://www.elcus.ru/files/mil-std/drv/1553lin406.zip

В проверке simpltst в тесте памяти не должно быть ошибок, 
а в конце проверки прерывания должно быть написано:
Int: 0
We got interrupt!
Int: 1

В случае выдачи insmod (при правильной строке запуска 
c использованием sudo) какой-то ошибки запуска модуля, 
в общем случае, причины могут быть разные. Часть 
наиболее часто встречающихся вариантов описана ниже, 
но могут быть и другие причины.

Например, для ошибки 'invalid module format' причиной 
может быть несоответствие версии пакета заголовков ядра, 
использованного при компиляции модуля, и версии ядра, 
на котором выполняется запуск модуля.

Для ошибки 'operation not permitted' причиной может быть 
либо задание параметров несуществующего или недоступного 
устройства (например, номер несуществующей платы на шине 
PCI в параметре d или номер несуществующего устройства 
на плате PCI в параметре e, тут в поиске причины может 
помочь анализ вывода lspci и анализ вывода dmesg), либо 
работа в системе с включённым в BIOS режимом Secure Boot, 
в такой системе все модули ядра должны быть подписаны 
сертификатами, известными системе. Такой сертификат можно 
либо получить у издателя дистрибутива, либо сгенерировать 
и установить в систему самостоятельно, вот пример общей 
информации о Linux в таком режиме:
https://wiki.debian.org/SecureBoot
Альтернативным вариантом может быть отключение режима 
Secure Boot в системе вообще, либо отключение проверки 
подписи модулей ядра, например c использованием пакета 
mokutil:
sudo apt install mokutil
sudo mokutil --disable-validation
Но такие варианты с отключением или ограничением Secure 
Boot нельзя рассматривать в качестве рекомендованных 
в контексте данного описания, такие решения должны 
приниматься с учётом общих требований к системе, и 
основным вариантом для систем с Secure Boot является 
использование модулей ядра, подписанных требуемым 
сертификатом.

Автоматически созданный (при использовании параметра 
misc=1) файл устройства получает ограниченные права 
доступа. Вручную изменить права доступа у созданного 
файла устройства /dev/tmk1553b, чтобы получить доступ 
к нему обычным программам, можно командой:
sudo chmod ugo+r /dev/tmk1553b 

Для того, чтобы файл устройства автоматически сразу 
создавался с доступом обычным программам, можно до 
запуска драйвера в папке /etc/udev/rules.d создать файл 
52-elcus.rules и добавить в него правило:
KERNEL=="tmk1553b", MODE="0666"
И выполнить две команды для перезапуска правил:
udevadm control --reload-rules
udevadm trigger

Чтобы добавить модуль драйвера для автоматического 
запуска при загрузке системы надо (все действия выполнять 
под root, через sudo):

- Скомпилированный модуль драйвера скопировать в папку
/lib/modules/`uname -r`/kernel
или в папку
/lib/modules/`uname -r`/kernel/drivers
То есть, в папку библиотеки модулей для используемого 
ядра,точно под которое компилировался модуль.

- В папке /etc/modprobe.d создать файл tmk1553b.conf со
строкой:
options tmk1553b параметры
где параметры - это список параметров при старте драйвера
через insmod. То есть, для обоих устройств на одной 
двухканальной плате TA1-PE2 или TA1-PCI4-02 строка такая:
options tmk1553b d0=1 e0=1 t0="TAI" d1=1 e1=2 t1="TAI" misc=1

- В папке /etc/modules-load.d создать файл tmk1553b.conf
со строкой:
tmk1553b

- Выполнить команду depmod

- В папке /etc/udev/rules.d создать файл 52-elcus.rules
со строкой со следующим правилом:
KERNEL=="tmk1553b", MODE="0666"

- Перезагрузить систему


Примеры параметров запуска драйвера для разных типов плат 
также есть в readme (DOS кодировка) и в readme_e (англ. 
язык) в основном архиве драйвера 4.06, но их надо 
использовать с учётом замечания по параметрам запуска 
драйвера, приведённому ниже.


Замечание по параметрам запуска драйвера:
Основным вариантом запуска драйвера в ядрах 2.6 и старше 
следует считать вариант с регистрацией в подсистеме misc 
устройств и автоматическим созданием файла устройства 
/dev/tmk1553b, для чего драйвер должен запускаться с 
дополнительным параметром misc=1 (в дополнение к 
обязательным параметрам задания конфигурации устройств 
драйвера). Вариант запуска с ручным созданием файла 
устройства /dev/tmk1553b (описанный как базовый в readme 
основного архива драйвера 4.06) в ядрах 2.6 и старше 
обычно не используется. Поэтому, при использовании в 
ядрах 2.6 и старше примеров из readme основного архива 
драйвера 4.06 не надо создавать файл /dev/tmk1553b 
вручную вызовом mknod, а вместо этого надо использовать 
параметр misc=1 в строке параметров запуска драйвера в 
дополнение к параметрам из примеров в тех случаях, когда 
такой параметр изначально в примере не использовался.
