Использование старого драйвера в Linux

Установка, обновление, настройка Linux и программ

Модераторы: Olej, adminn

Аватара пользователя
Olej
Писатель
Сообщения: 13913
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Использование старого драйвера в Linux

Непрочитанное сообщение Olej » 26 июл 2020, 14:12

strap89 писал(а):
25 июл 2020, 18:53
У меня вот какой вопрос: я посмотрел повнимательней скрипт для инсталляции драйвера (там совсем незатейливо написано) -
там в папку /etc/pdask/fw копируются все файлы с расширением rbf (их всего два: типа 9116.rbf - не мои имена, т.е. для инсталляции не нужны?) и общая библиотека pci_dask.so в /usr/lib, потом запускается insmod -f p7442.ko и если в системе нет udev еще mknod. Еще забыл: в /etc/udev/rules.d скачивается pci7442.rules (или с каким-то модифицированным именем). Я только в будни посмотрю, проделалась эта работа или застряла, но вопрос в другом insmod реально что будет делает: просто сверит версии и в какой-то conf впишет ссылку о драйвере, или он реально проводит какую-то операцию по линковке файлов *.so, *.ko (или совсем круто в *.h)?
- никакой модуль ядра, драйвер - не может в принципе работать ни с какими библиотеками - он подгружается в адресное пространство ядра как неотделимая часть, адресующаяся (к API ядра) по абсолютным адресам в ядре...
- insmod действительно и делает загрузку модуля в адресное (защищённое, кольца 0) пространство ядра ... после чего вы можете увидеть этот модуль командой lsmod;
- модуль (драйвер) не может ни с кем "линковаться" и к нему вообще неприменимы никакие .h определения пользовательского пространства - это совершенно автономная "заплатка" ядра (как пример: у вас в libc.so есть код реализации функции strlen(), а в ядре есть свой совершенно другой дубликат кода такой же функции strlen());
- mknode создаёт имена вам устройства в /dev типа /dev/xxx13 ... udev делает то же самое, и руководствуется для создания этого /dev/xxx13 именно правилами из pci7442.rules - это всё описано здесь: асинхронные уведомления и udev

P.S. Я вам уже давал ссылку где взять текст: Драйверы и модули ядра Linux - там медленно, подробно и в деталях расписывается как все эти составные части взаимодействуют между собой.

Аватара пользователя
Olej
Писатель
Сообщения: 13913
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Использование старого драйвера в Linux

Непрочитанное сообщение Olej » 26 июл 2020, 14:23

strap89 писал(а):
25 июл 2020, 18:53
Просто, меня смущает то, что я пробовал инсталлироваться на версию 20.04, (а она только amd64 бывает) с установленным gcc и пр., а версию 12.04.5 i386 пытался ставить из desktop-поставки, т.е. наверно без gcc. Для простой регистрации insmod'у gcc-то вряд ли нужен, значит он какие-то действия по линковке все-таки проделывает, а значит у меня еще есть шансы.
insmod не проделывает никаких других действий, кроме загрузки бинарного кода модуля ядра, заранее уже собранного (скомпилированного).
А gcc, make и .h заголовочные файлы ядра нужны именно для сборки модуля ядра.
А загрузить 32-битно скомпилированный модуль ядра в 64-битной системе, или наоборот, у вас [youtubid]нет никаких шансов[/youtubid]. :-?

Аватара пользователя
Olej
Писатель
Сообщения: 13913
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Использование старого драйвера в Linux

Непрочитанное сообщение Olej » 26 июл 2020, 14:45

strap89 писал(а):
25 июл 2020, 18:53
Адлинк сделал свою плату в 2006 примерно
А вы стали бы покупать себе автомобиль 14-летнего возраста (не для раритета, а чтобы ездить)? :lol:

Вообще-то, судя (поверхностно) по функционалу этой вашей платы - писать там драйвер (при наличии детальнейших RTFM на железо!) дело не сильно сложное ... хотя громоздкое и хлопотное.

strap89
Активист
Сообщения: 11
Зарегистрирован: 23 июл 2020, 11:16
Контактная информация:

Re: Использование старого драйвера в Linux

Непрочитанное сообщение strap89 » 26 июл 2020, 16:37

Вы знаете - плату эту dio (pci-7442) заказал именно я, но не для раритета - а именно чтобы ездить. ISA вариант получается хуже, да и материнских плат под ISA с гулькин нос (тут надо понимать - я начал с самого простого, мне еще понадобятся драйвера под pci-1747 и piso-da16, все наверно такие-же старые, тут я конечно вам подлянку закинул скрытую, но конкретную). Но покупая PCI, покупаешь геморрой, описание регистров производитель делает не всегда (или очень мелко). Сейчас сроки меня не поджимают, именно поэтому я и затеял все эти поиски драйверов. А так бы я не стал мудрить и написал бы под DOS'ом. 40 лет давности, а ведь никак не помрет, зараза такая! Конечно, я не профи, чтобы делать такие утверждения в DOS'е про real-time, но тут ведь как: 20 лет назад написаны были мною драйвера, в течении этих 20-ти лет менялись платы и драйвера к ним, а рабочий костяк оставался. И вы абсолютно правы - я не могу сказать, что и как надо сделать в linuх'е для real-time, и нужен ли он там вообще, но мне как сугубому практику для моей текущей задачи многозадачность linux'а только мешает и именно тут, в отличии от DOS, не могу сказать гарантированно ничего о своей программе.
Тут сейчас вопрос в другом (мы возвратились к самому началу): если я поставлю на машину ubuntu 12.04.5 (версия i386), а на руках у меня файл "p7442.ko" и "pci_dask.so" для 12.04.1 i386 "kernel versions 3.2.0-29-generic-pae compiled with gcc version 4.6.3), вы можете сказать: возможна ли удачная загрузка модуля "insmod" при минимальном (наверно) изменении версии ядра и какие программы мне абсолютно необходимы для этого
(пока я знаю про gcc и cmake)? Я просто уже запутался окончательно: толи малейшее изменение версии запретит мне сборку драйвера, толи небольшие изменения версии допустимы. Вы уже отвечали на этот вопрос, но ответ как-то лег в три этапа и я, по тупости своей, не смог однозначно сам себе на него ответить. А может вы мне можете сказать какое изменение версии допустимо вообще для установки (еще раз уточню - у меня будет стоять 12.04.5 i386)? Если в таких условиях переустановка драйвера невозможна - я попробую запросить адлинк (хотя не уверен, что достучусь). Но хочется все-таки поставить то что есть конечно.

Аватара пользователя
Olej
Писатель
Сообщения: 13913
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Использование старого драйвера в Linux

Непрочитанное сообщение Olej » 26 июл 2020, 16:53

strap89 писал(а):
26 июл 2020, 16:37
Тут сейчас вопрос в другом (мы возвратились к самому началу): если я поставлю на машину ubuntu 12.04.5 (версия i386), а на руках у меня файл "p7442.ko" и "pci_dask.so" для 12.04.1 i386 "kernel versions 3.2.0-29-generic-pae compiled with gcc version 4.6.3), вы можете сказать: возможна ли удачная загрузка модуля "insmod" при минимальном (наверно) изменении версии ядра и какие программы мне абсолютно необходимы для этого
Берите пробуйте. :lol:
В любом случае, вы в установленной Ubuntu можете дополнительно выбрать и установить то ядра (3.2.0) которое вас интересует ... только устанавливать это нужно средствами пакетной системы своего дистрибутива... что позволяет доустановить версии ядра плюс-минус в некоторых пределах.
strap89 писал(а):
26 июл 2020, 16:37
Я просто уже запутался окончательно: толи малейшее изменение версии запретит мне сборку драйвера, толи небольшие изменения версии допустимы.
Если у вас есть только и исключительно файл драйвера *.ko, соборанный под конкретную версию ядра, вы ничего уже собирать (пересобирать) не можете, вам не нужны gcc & make ... вы можете только найти соответствующую версию ядра и установить (insmod или modprobe) в ней готовый драйвер.
Прежде всего изучите про свой драйвер:

Код: Выделить всё

olej@nvidia:~/Загрузки/pci-dask_413/drivers/2.6.9-5.EL$ file p7442.ko 
p7442.ko: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
- это вам скажет про разрядность под которую собрано (32);

Код: Выделить всё

olej@nvidia:~/Загрузки/pci-dask_413/drivers/2.6.9-5.EL$ modinfo p7442.ko 
filename:       /home/olej/Загрузки/pci-dask_413/drivers/2.6.9-5.EL/p7442.ko
license:        GPL
license:        GPL
license:        GPL
license:        GPL
license:        GPL
license:        GPL
license:        GPL
license:        GPL
license:        GPL
license:        GPL
license:        GPL
vermagic:       2.6.9-5.EL 686 REGPARM 4KSTACKS gcc-3.4
depends:        
- это вам скажет про версию ядра под которую это собрано.

Аватара пользователя
Olej
Писатель
Сообщения: 13913
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Использование старого драйвера в Linux

Непрочитанное сообщение Olej » 26 июл 2020, 17:13

Olej писал(а):
26 июл 2020, 16:53
В любом случае, вы в установленной Ubuntu можете дополнительно выбрать и установить то ядра (3.2.0) которое вас интересует ... только устанавливать это нужно средствами пакетной системы своего дистрибутива... что позволяет доустановить версии ядра плюс-минус в некоторых пределах.
Детально версии ядер, которые присутствуют в стандартном репозитории вашей версии дистрибутива, можете изучить как-то так:

Код: Выделить всё

olej@nvidia:~$ apt-cache showpkg linux-image
Package: linux-image
Versions: 

Reverse Depends: 
  kernel-common,linux-image
Dependencies: 
Provides: 
Reverse Provides: 
linux-image-unsigned-5.6.0-1020-oem 5.6.0-1020.20 (= )
linux-image-unsigned-5.6.0-1018-oem 5.6.0-1018.18 (= )
linux-image-unsigned-5.6.0-1017-oem 5.6.0-1017.17 (= )
linux-image-unsigned-5.6.0-1013-oem 5.6.0-1013.13 (= )
linux-image-unsigned-5.6.0-1011-oem 5.6.0-1011.11 (= )
linux-image-unsigned-5.6.0-1010-oem 5.6.0-1010.10 (= )
linux-image-unsigned-5.6.0-1008-oem 5.6.0-1008.8 (= )
...
Или так:

Код: Выделить всё

olej@nvidia:~$ apt-cache showpkg linux-image | grep generic
linux-image-unsigned-5.4.0-42-generic 5.4.0-42.46 (= )
linux-image-unsigned-5.4.0-40-generic 5.4.0-40.44 (= )
linux-image-unsigned-5.4.0-39-generic 5.4.0-39.43 (= )
linux-image-unsigned-5.4.0-37-generic 5.4.0-37.41 (= )
linux-image-unsigned-5.4.0-33-generic 5.4.0-33.37 (= )
linux-image-unsigned-5.4.0-31-generic 5.4.0-31.35 (= )
linux-image-unsigned-5.4.0-29-generic 5.4.0-29.33 (= )
linux-image-unsigned-5.4.0-28-generic 5.4.0-28.32 (= )
linux-image-5.4.0-42-generic 5.4.0-42.46 (= )
linux-image-5.4.0-40-generic 5.4.0-40.44 (= )
linux-image-5.4.0-39-generic 5.4.0-39.43 (= )
linux-image-5.4.0-37-generic 5.4.0-37.41 (= )
linux-image-5.4.0-33-generic 5.4.0-33.37 (= )
linux-image-5.4.0-31-generic 5.4.0-31.35 (= )
linux-image-5.4.0-29-generic 5.4.0-29.33 (= )
linux-image-5.4.0-28-generic 5.4.0-28.32 (= )
linux-image-unsigned-5.4.0-26-generic 5.4.0-26.30 (= )
linux-image-5.4.0-26-generic 5.4.0-26.30 (= )
... ну, применительно к вашим версиям, естественно!
И выбрать.

strap89
Активист
Сообщения: 11
Зарегистрирован: 23 июл 2020, 11:16
Контактная информация:

Re: Использование старого драйвера в Linux

Непрочитанное сообщение strap89 » 27 июл 2020, 17:10

Спасибо огромное за помощь. Недолго поискав, нашел ubuntu 12.04.1.i386, скачал установил и проинсталлировал драйвер. На это раз "insmod" был благосклонен ко мне, регистрацию подтвердил, в списке прописался. Тестировать я его не стал, т.к. интернет при установке системы отключил (без этого он крайне настойчиво предлагает обновиться до версии 14.04, что в моей ситуации недопустим. Да в целом и так понятно, что использовать его нормально не получится. Зато есть радость: для piso-da16 фирма icp das поставляет исходный код на диске вместе с платой, т.е. можно будет компилировать драйвера "классическим способом". Хотя там цап немудреный, чего писать-то?
А вот advantech для платы ацп pci-1747 поставляет вообще только один файл *.run, обещая автоинсталлятор. Версий тоже негусто (3 штуки, максимально до ubuntu 18.04, правда при желании можно ставить amd64). Тоже будет геморрой по-видимому.
Еще раз спасибо за помощь и терпение.

Аватара пользователя
Olej
Писатель
Сообщения: 13913
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Использование старого драйвера в Linux

Непрочитанное сообщение Olej » 27 июл 2020, 18:55

strap89 писал(а):
27 июл 2020, 17:10
для piso-da16 фирма icp das поставляет исходный код на диске вместе с платой, т.е. можно будет компилировать драйвера "классическим способом".
Вообще то, так для Linux делают все нормальные производители ... которых 99% из общего числа.
strap89 писал(а):
27 июл 2020, 17:10
А вот advantech для платы ацп pci-1747 поставляет вообще только один файл *.run, обещая автоинсталлятор. Версий тоже негусто (3 штуки, максимально до ubuntu 18.04, правда при желании можно ставить amd64). Тоже будет геморрой по-видимому.
А вот *.run - это и может быть исходный код, зашитый в хвост скрипта-инсталлятора (всё в один файл), который и собирает из этого исходника модуль *.ko под ядро в котором находится. Так делают (так в виде *.run распространяет уже много лет свои версии VirtualBox).
P.S. Если вы мне перешлёте этот *.run, я могу посмотреть что оно из себя представляет и чего от него наперёд можно ожидать.

strap89
Активист
Сообщения: 11
Зарегистрирован: 23 июл 2020, 11:16
Контактная информация:

Re: Использование старого драйвера в Linux

Непрочитанное сообщение strap89 » 28 июл 2020, 18:31

Спасибо за предложение. Файл я вроде вложил. Но попробовать и сам смогу наверно, ubuntu я не сносил.
Любопытно, что прислал мне адлинк:
About the drivers for Ubuntu v20.04 based, we have no pre-made binary-format drivers for this Linux distribution nowadays, that means it doesn't support Ubuntu v20.04. So there will be an alternative way if you could build your own driver by referring PCI-7442 Linux driver source codes. However, since the source-code is confidential to Adlink, please have an evaluation about signing an NDA form. If you also agree with this, it is highly recommended to directly raise this request to local-channel. In addition, please note the details including kernel version.
Непонятно мне: послал он меня лесом, или наоборот предлагает писать ему в какой-то local-channel. И что за NDA form? Тип регистрации у них вроде один, я его прошел(чтобы пиьмо с запросом послать, там у них все как у больших: create issue, updated issue).

Аватара пользователя
Olej
Писатель
Сообщения: 13913
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Использование старого драйвера в Linux

Непрочитанное сообщение Olej » 28 июл 2020, 21:26

strap89 писал(а):
28 июл 2020, 18:31
Файл я вроде вложил.
Непонятно куда...
strap89 писал(а):
28 июл 2020, 18:31
Непонятно мне: послал он меня лесом, или наоборот предлагает писать ему в какой-то local-channel. И что за NDA form?
Они предлагают вам "создать свой собственный драйвер" ... т.е. просто собрать из их исходного кода под 20.04
А NDA - это соглашение о неразглашении ... т.е. не распространение этого кода 3-м лицам.

Ответить

Вернуться в «Администрирование Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость