LINUX.ORG.RU

Сборка hasp (aksparlnx) на ядро 2.6.17


0

0

При попытке собрать модуль под мое ядро валятся ошибки. В принципе, с Wine идет драйвер, отличие в версии ядра только в строке custom. Хоть Аладдин и пишет, что тестировалось на ядре 2.6, но, например, при сборке (./build.sh, в комплекте) gcc 4.1 про опцию m386 и слышать не хочет, в исходнике вместо MODULE_PARAM (...) MODULE_PARM(...) Дальше тоже весело....

Делитесь опытом, кому удалось!

Ответ на: комментарий от vitlav

aksparlnx пересобрать не удается и из этих исходников. Пытались это сделать втроем, по очереди, - не получается. Чего не хватает? Хедеры ядра есть, исходники есть, сборка не удается. Обычно, если чего-то не собирается, мы причину находили. В этом же случае - как лбом об стену.

Можно подробнее процесс сборки описать? И что в системе должно быть для успешной сборки? На страницу Etersoft не ссылаться, перерыли сверху до низу.

P.S. Руки бы алладиновским программерам поотрывал...

Svarog-perm
() автор топика
Ответ на: комментарий от vitlav

Версия ядра в Мандриве меняется при выборе локализованного ядра (т.е. ,было mdv (оригинальное) стало mdvcustom - русское). Для полностью локализованного ядра aksparlnx пересобирать придется однозначно. Скрипт (haspd), загружающий aksparlnx, использует insmod, который принудительно его загрузить не может (vermagic...) Может, есть готовый собранный пакет под локализованную Mandriva?

Svarog-perm
() автор топика

Делюсь. Вчерась заработало c 2.6.19

Все изменения чисто формальные, замена obsoleted макросов в коде на актуальные. verify_area меняем на !access_ok, MODULE_PARM чуть посложнее. Дифф не контекстный для читаемости.

17c17,18 < #include <linux/config.h> --- > /* #include <linux/config.h> */ > 90,92c91,93 < MODULE_PARM(force, "i"); < MODULE_PARM(major, "i"); < MODULE_PARM(loglevel, "i"); --- > module_param(force, int, 0); > module_param(major, int, 0); > module_param(loglevel, int, 0); 149c150 < if (verify_area(VERIFY_WRITE, (const void *)arg, 256)) return -EFAULT; --- > if (!access_ok(VERIFY_WRITE, (const void *)arg, 256)) return -EFAULT; 163c164 < if (verify_area(VERIFY_READ, data_buffer, count)) { --- > if (!access_ok(VERIFY_READ, data_buffer, count)) { 167c168 < if (verify_area(VERIFY_WRITE, data_buffer, count)) { --- > if (!access_ok(VERIFY_WRITE, data_buffer, count)) { 378,379c379,380 < MODULE_PARM(hlportaddress, "1-" __MODULE_STRING(MAX_HL_PORTS) "l" ); < MODULE_PARM(isacpcaddress, "1-" __MODULE_STRING(MAX_ISA_CPC_CARDS) "l" ); --- > MODULE_PARM_DESC(hlportaddress, "1-" __MODULE_STRING(MAX_HL_PORTS) "l" ); module_param_array(hlportaddress, int, NULL, 0); > MODULE_PARM_DESC(isacpcaddress, "1-" __MODULE_STRING(MAX_ISA_CPC_CARDS) "l" ); module_param_array(isacpcaddress, int, NULL, 0); 382c383 < MODULE_PARM(timeout, "i"); --- > module_param(timeout, uint, 0);

aal
()
Ответ на: комментарий от aal

Сенкз! Попробую сегодня. Есть подозрение, что если модуль не пересобрать, хорошо работать оно не будет.

А енто происходило с вечера 28.01 по утро 29.01 :-D Дистрибутив, понятно, Mandriva.

Вз...бодренные клиентом, предприняли очередную попытку (при том, что великими программистами под Linux не являемся...) разобраться, что же это такое происходит, почему не работает 1С 8.0. Под "не работает" я имею ввиду - "не обнаружен ключ защиты программы".

К половине шестого утра понедельника стало очевидным следующее:

1. Модуль aksparlnx.ko, для целевого ядра версии xyz.mdv в ядро xyz.mdvcustom грузиться не будет по причине несоответствия versionmagic. modprobe загружать этот горемычный модуль отказывается на том основании, что найти его не может, т.е. --force-vermagic не светит (на первый взгляд). 2. Ядро xyz.mdv - имеет такую версию при установке английского языка как локали системы. Ядро xyz.mdvcustom - русскоязычное, соответственно. Никаких существенных отличий в них не обнаружено. Зачем надо было этот огород городить - не понятно. Совет :-D: Может, вам собирать отдельно пакеты с драйверами хаспа для англоязычного и русского дистрибутива отдельно?

3. insmod грузить aksparlnx.ko отказывается, ибо о такой опции как --force он слыхом не слыхивал. Изучаем скрипт haspd (в /etc/init.d/). Вижу попытки загрузить его сначала modprobe'ом, затем - insmode'ом. modprobe его даже не пытается грузить, потому как нет aksparlnx.ko в файле module.deps. А все потому, что ложить каталог aksparlnx в /lib/modules - неправильно. Его надо было положить в /lib/modules/xyz.mdv, скажем, в /lib/modules/xyz.mdv/3dparty. Запустить depmod -a. И - вуаля, modprobe грузит-таки вожделенный модуль. Правим скрипт haspd.

4. Попытки пересобрать модуль aksparlnx безуспешны по причине того, что с версии 2.6.9 макрос MODULE_PARAM(par1, par2) более не используется, вместо него в исходнике следует использовать module_param(par1, par2, par3). Макросы отличаются количеством параметров, оставляем исправление исходников на потом. Алладиновцы (и вы) с каменного века исходники не обновляли, где сейчас ядро 2.6.9 найдешь?!

5. Проверяем netstat'ом обвязку. hasplm висит на UDP:475, winehasp на UDP:2790. Правим nethasp.ini. Запускаем 1С8.0. Появляется диалог выбора базы данных. Выбираем базу, запускаем в режиме конфигуратора. Выбираем пользователя, жмем ок. "Ключ защиты не обнаружен". Получается, что ключ защиты виден при запуске, при добавлении базы, перед аутентификацией пользователя, а потом - нет.

Уточняю: ключ локальный HASP 4 USB.

Svarog-perm
() автор топика
Ответ на: комментарий от Svarog-perm

> Есть подозрение, что если модуль не пересобрать, хорошо работать оно не будет.

Адназначна. И я повторяю, что с параллельным HASP'ом и 1C 1.7 у меня всё работает.

Вчера же я послал патч автору модуля, герру Christian Groessler.
Сегодня пришёл ответ, а в ответе - почти идентичный патч. Так что фирма Aladdin работает над проблемой, автор жив, и можно надеяться, что в обозримое время будет опубликована свежая официальная версия на aladdin.com.

Ещё маленькое дополнение. Надо либо выкинуть из Makefile слово "-DCPC_PCI", либо определить соответствующий Id прямо в модуле:

+#ifndef PCI_DEVICE_ID_AKS_CPC /* newer kernel source have all unreferenced IDs removed */
+#define PCI_DEVICE_ID_AKS_CPC 0x200

А.Л.

aal
()
Ответ на: комментарий от aal

Спасибо, наконец скомпилировалось и заработало.

Про PCI_DEVICE_ID_AKS_CPC уже нашел :-) 1C 80 таки заработала, но - только с сетевым ключом USB. С локальным ключом USB - все еще нет. И к серверу предприятия никак не хочет подключаться.

Svarog-perm
() автор топика
Ответ на: комментарий от Svarog-perm

Здаствуйте! У меня вот такие ошибки

/home/aksparlnx-1.6-x86_64/aksparpub.c: In function &#8216;hl_init_module&#8217;: /home/aksparlnx-1.6-x86_64/aksparpub.c:693: error: implicit declaration of function &#8216;register_ioctl32_conversion&#8217; /home/aksparlnx-1.6-x86_64/aksparpub.c: In function &#8216;hl_cleanup_module&#8217;: /home/aksparlnx-1.6-x86_64/aksparpub.c:760: error: implicit declaration of function &#8216;unregister_ioctl32_conversion&#8217;

Что может быть?

anonymous
()
Ответ на: комментарий от anonymous

Да, на всякий случай SLES 10 ядро 2.6.16

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.