- никакой модуль ядра, драйвер - не может в принципе работать ни с какими библиотеками - он подгружается в адресное пространство ядра как неотделимая часть, адресующаяся (к API ядра) по абсолютным адресам в ядре...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)?
- insmod действительно и делает загрузку модуля в адресное (защищённое, кольца 0) пространство ядра ... после чего вы можете увидеть этот модуль командой lsmod;
- модуль (драйвер) не может ни с кем "линковаться" и к нему вообще неприменимы никакие .h определения пользовательского пространства - это совершенно автономная "заплатка" ядра (как пример: у вас в libc.so есть код реализации функции strlen(), а в ядре есть свой совершенно другой дубликат кода такой же функции strlen());
- mknode создаёт имена вам устройства в /dev типа /dev/xxx13 ... udev делает то же самое, и руководствуется для создания этого /dev/xxx13 именно правилами из pci7442.rules - это всё описано здесь: асинхронные уведомления и udev
P.S. Я вам уже давал ссылку где взять текст: Драйверы и модули ядра Linux - там медленно, подробно и в деталях расписывается как все эти составные части взаимодействуют между собой.