|
|
Проблема со сборкой драйвера под linux
Добрый день!
Попытался собрать библиотеку lcomp под linux (openSUSE 11.1 ядро 2.6.27.29-0.1). Делал всё согласно readme, хотя порядок там чётко НЕ прописан! Вопрос: что я не так делаю?
1. скопировал lcard.rules в /etc/udev/rules.d/
2. выполнил make в основной директории:
make -C /lib/modules/2.6.27.29-0.1-default/build M=/storage/distribs/lin/L-card/dstr modules
make[1]: Entering directory `/usr/src/linux-2.6.27.29-0.1-obj/i386/default/'
make -C ../../../linux-2.6.27.29-0.1 O=/usr/src/linux-2.6.27.29-0.1-obj/i386/default/. modules
CC [M] /storage/distribs/lin/L-card/dstr/ldevice.o
/storage/distribs/lin/L-card/dstr/ldevice.c: In function ‘ldev_init’:
/storage/distribs/lin/L-card/dstr/ldevice.c:158: warning: passing argument 5 of ‘device_create’ makes pointer from integer without a cast
CC [M] /storage/distribs/lin/L-card/dstr/l760.o
CC [M] /storage/distribs/lin/L-card/dstr/ldevpciu.o
CC [M] /storage/distribs/lin/L-card/dstr/l791.o
CC [M] /storage/distribs/lin/L-card/dstr/ldevpcib.o
CC [M] /storage/distribs/lin/L-card/dstr/e2010.o
CC [M] /storage/distribs/lin/L-card/dstr/e140.o
CC [M] /storage/distribs/lin/L-card/dstr/e440.o
CC [M] /storage/distribs/lin/L-card/dstr/e154.o
CC [M] /storage/distribs/lin/L-card/dstr/ldevusbu.o
LD [M] /storage/distribs/lin/L-card/dstr/ldevpci.o
LD [M] /storage/distribs/lin/L-card/dstr/ldevusb.o
LD [M] /storage/distribs/lin/L-card/dstr/ldevpcibm.o
Building modules, stage 2.
MODPOST 4 modules
CC /storage/distribs/lin/L-card/dstr/ldevice.mod.o
LD [M] /storage/distribs/lin/L-card/dstr/ldevice.ko
CC /storage/distribs/lin/L-card/dstr/ldevpci.mod.o
LD [M] /storage/distribs/lin/L-card/dstr/ldevpci.ko
CC /storage/distribs/lin/L-card/dstr/ldevpcibm.mod.o
LD [M] /storage/distribs/lin/L-card/dstr/ldevpcibm.ko
CC /storage/distribs/lin/L-card/dstr/ldevusb.mod.o
LD [M] /storage/distribs/lin/L-card/dstr/ldevusb.ko
make[1]: Leaving directory `/usr/src/linux-2.6.27.29-0.1-obj/i386/default/'
3. Выполнил make modules_install:
make -C /lib/modules/2.6.27.29-0.1-default/build M=/storage/distribs/lin/L-card/dstr modules_install
make[1]: Entering directory `/usr/src/linux-2.6.27.29-0.1-obj/i386/default/'
make -C ../../../linux-2.6.27.29-0.1 O=/usr/src/linux-2.6.27.29-0.1-obj/i386/default/. modules_install
INSTALL /storage/distribs/lin/L-card/dstr/ldevice.ko
INSTALL /storage/distribs/lin/L-card/dstr/ldevpci.ko
INSTALL /storage/distribs/lin/L-card/dstr/ldevpcibm.ko
INSTALL /storage/distribs/lin/L-card/dstr/ldevusb.ko
DEPMOD 2.6.27.29-0.1-default
make[1]: Leaving directory `/usr/src/linux-2.6.27.29-0.1-obj/i386/default`
4. Попытался запустить драйвер скриптом sh ./start:
ERROR: Module ldevpcibm does not exist in /proc/modules
ERROR: Module ldevusb does not exist in /proc/modules
ERROR: Module ldevpci does not exist in /proc/modules
ERROR: Module ldevice is in use
insmod: error inserting /'ldevice.ko/': -1 File exists
insmod: error inserting /'ldevpcibm.ko/': -1 Unknown symbol in module
insmod: error inserting /'ldevpci.ko/': -1 Unknown symbol in module
insmod: error inserting /'ldevusb.ko/': -1 Unknown symbol in module
PS При сборке lcomp вывод такой:
g++ -fPIC -c -O3 -Wall -I/include -L/lib -I../include -L../lib -DLCOMP_LINUX=1 stubs.cpp
../include/stubs.h:126: warning: ‘void atomic_inc(atomic_t*)’ defined but not used
../include/stubs.h:137: warning: ‘void atomic_dec(atomic_t*)’ defined but not used
g++ -fPIC -c -O3 -Wall -I/include -L/lib -I../include -L../lib -DLCOMP_LINUX=1 maincomp.cpp
../include/stubs.h:126: warning: ‘void atomic_inc(atomic_t*)’ defined but not used
../include/stubs.h:137: warning: ‘void atomic_dec(atomic_t*)’ defined but not used
g++ -fPIC -c -O3 -Wall -I/include -L/lib -I../include -L../lib -DLCOMP_LINUX=1 lguids.cpp
In file included from lguids.cpp:6:
../include/stubs.h:126: warning: ‘void atomic_inc(atomic_t*)’ defined but not used
../include/stubs.h:137: warning: ‘void atomic_dec(atomic_t*)’ defined but not used
g++ -fPIC -c -O3 -Wall -I/include -L/lib -I../include -L../lib -DLCOMP_LINUX=1 ldevbase.cpp
g++ -fPIC -c -O3 -Wall -I/include -L/lib -I../include -L../lib -DLCOMP_LINUX=1 plx.cpp
plx.cpp: In member function ‘virtual ULONG DaqL780::FillADCparameters(_DAQ_PARAM_*)’:
plx.cpp:185: warning: deprecated conversion from string constant to ‘char*’
plx.cpp:185: warning: deprecated conversion from string constant to ‘char*’
plx.cpp:185: warning: deprecated conversion from string constant to ‘char*’
plx.cpp: In member function ‘virtual ULONG DaqL780::ReadPlataDescr(void*)’:
plx.cpp:299: warning: unused variable ‘pdt’
plx.cpp: In member function ‘virtual ULONG DaqL780::WritePlataDescr(void*, USHORT)’:
plx.cpp:312: warning: unused variable ‘pdt’
../include/stubs.h: At global scope:
../include/stubs.h:126: warning: ‘void atomic_inc(atomic_t*)’ defined but not used
../include/stubs.h:137: warning: ‘void atomic_dec(atomic_t*)’ defined but not used
g++ -fPIC -c -O3 -Wall -I/include -L/lib -I../include -L../lib -DLCOMP_LINUX=1 loadplx.cpp
loadplx.cpp: In member function ‘virtual ULONG DaqL780::LoadBios(char*)’:
loadplx.cpp:38: warning: comparison between signed and unsigned integer expressions
../include/stubs.h: At global scope:
../include/stubs.h:126: warning: ‘void atomic_inc(atomic_t*)’ defined but not used
../include/stubs.h:137: warning: ‘void atomic_dec(atomic_t*)’ defined but not used
g++ -fPIC -c -O3 -Wall -I/include -L/lib -I../include -L../lib -DLCOMP_LINUX=1 e440.cpp
e440.cpp: In member function ‘virtual ULONG DaqE440::ReadPlataDescr(void*)’:
e440.cpp:253: warning: unused variable ‘pdt’
e440.cpp: In member function ‘virtual ULONG DaqE440::WritePlataDescr(void*, USHORT)’:
e440.cpp:265: warning: unused variable ‘pdt’
../include/stubs.h: At global scope:
../include/stubs.h:126: warning: ‘void atomic_inc(atomic_t*)’ defined but not used
../include/stubs.h:137: warning: ‘void atomic_dec(atomic_t*)’ defined but not used
g++ -fPIC -c -O3 -Wall -I/include -L/lib -I../include -L../lib -DLCOMP_LINUX=1 loade440.cpp
loade440.cpp: In member function ‘virtual ULONG DaqE440::LoadBios(char*)’:
loade440.cpp:42: warning: comparison between signed and unsigned integer expressions
../include/stubs.h: At global scope:
../include/stubs.h:126: warning: ‘void atomic_inc(atomic_t*)’ defined but not used
../include/stubs.h:137: warning: ‘void atomic_dec(atomic_t*)’ defined but not used
g++ -fPIC -c -O3 -Wall -I/include -L/lib -I../include -L../lib -DLCOMP_LINUX=1 e140.cpp
e140.cpp: In member function ‘virtual ULONG DaqE140::ReadPlataDescr(void*)’:
e140.cpp:184: warning: unused variable ‘pdt’
e140.cpp: In member function ‘virtual ULONG DaqE140::WritePlataDescr(void*, USHORT)’:
e140.cpp:198: warning: unused variable ‘pdt’
../include/stubs.h: At global scope:
../include/stubs.h:126: warning: ‘void atomic_inc(atomic_t*)’ defined but not used
../include/stubs.h:137: warning: ‘void atomic_dec(atomic_t*)’ defined but not used
g++ -fPIC -c -O3 -Wall -I/include -L/lib -I../include -L../lib -DLCOMP_LINUX=1 loade2010.cpp
loade2010.cpp: In member function ‘virtual ULONG DaqE2010::LoadBios(char*)’:
loade2010.cpp:37: warning: comparison between signed and unsigned integer expressions
loade2010.cpp:63: warning: ‘BC’ may be used uninitialized in this function
../include/stubs.h: At global scope:
../include/stubs.h:126: warning: ‘void atomic_inc(atomic_t*)’ defined but not used
../include/stubs.h:137: warning: ‘void atomic_dec(atomic_t*)’ defined but not used
g++ -fPIC -c -O3 -Wall -I/include -L/lib -I../include -L../lib -DLCOMP_LINUX=1 e2010.cpp
../include/stubs.h:126: warning: ‘void atomic_inc(atomic_t*)’ defined but not used
../include/stubs.h:137: warning: ‘void atomic_dec(atomic_t*)’ defined but not used
g++ -fPIC -c -O3 -Wall -I/include -L/lib -I../include -L../lib -DLCOMP_LINUX=1 791.cpp
791.cpp: In member function ‘virtual ULONG DaqL791::csCloseLDevice(ULONG)’:
791.cpp:27: warning: unused variable ‘sts’
791.cpp: In member function ‘virtual ULONG DaqL791::WritePlataDescr(void*, USHORT)’:
791.cpp:102: warning: comparison between signed and unsigned integer expressions
791.cpp:115: warning: comparison between signed and unsigned integer expressions
../include/stubs.h: At global scope:
../include/stubs.h:126: warning: ‘void atomic_inc(atomic_t*)’ defined but not used
../include/stubs.h:137: warning: ‘void atomic_dec(atomic_t*)’ defined but not used
g++ -fPIC -c -O3 -Wall -I/include -L/lib -I../include -L../lib -DLCOMP_LINUX=1 e154.cpp
e154.cpp: In member function ‘virtual ULONG DaqE154::ReadPlataDescr(void*)’:
e154.cpp:185: warning: unused variable ‘status’
e154.cpp: In member function ‘virtual ULONG DaqE154::WritePlataDescr(void*, USHORT)’:
e154.cpp:205: warning: unused variable ‘status’
../include/stubs.h: At global scope:
../include/stubs.h:126: warning: ‘void atomic_inc(atomic_t*)’ defined but not used
../include/stubs.h:137: warning: ‘void atomic_dec(atomic_t*)’ defined but not used
g++ -shared -Wl,-soname,liblcomp.so -o liblcomp.so stubs.o maincomp.o lguids.o ldevbase.o plx.o loadplx.o e440.o loade440.o e140.o loade2010.o e2010.o 791.o e154.o -lc
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: Проблема со сборкой драйвера под linux
Во первых там надо подпатчить
http://www.lcard.ru/forumthreads/7748
можт потом заработает...
|
|
|
Re: Проблема со сборкой драйвера под linux
Вызов поправил стало так:
2. make в основной директории:
make -C /lib/modules/2.6.27.29-0.1-default/build M=/storage/distribs/lin/L-card/dstr modules
make[1]: Entering directory `/usr/src/linux-2.6.27.29-0.1-obj/i386/default/'
make -C ../../../linux-2.6.27.29-0.1 O=/usr/src/linux-2.6.27.29-0.1-obj/i386/default/. modules
CC [M] /storage/distribs/lin/L-card/dstr/ldevice.o
CC [M] /storage/distribs/lin/L-card/dstr/l760.o
CC [M] /storage/distribs/lin/L-card/dstr/ldevpciu.o
CC [M] /storage/distribs/lin/L-card/dstr/l791.o
CC [M] /storage/distribs/lin/L-card/dstr/ldevpcib.o
CC [M] /storage/distribs/lin/L-card/dstr/e2010.o
CC [M] /storage/distribs/lin/L-card/dstr/e140.o
CC [M] /storage/distribs/lin/L-card/dstr/e440.o
CC [M] /storage/distribs/lin/L-card/dstr/e154.o
CC [M] /storage/distribs/lin/L-card/dstr/ldevusbu.o
LD [M] /storage/distribs/lin/L-card/dstr/ldevpci.o
LD [M] /storage/distribs/lin/L-card/dstr/ldevusb.o
LD [M] /storage/distribs/lin/L-card/dstr/ldevpcibm.o
Building modules, stage 2.
MODPOST 4 modules
CC /storage/distribs/lin/L-card/dstr/ldevice.mod.o
LD [M] /storage/distribs/lin/L-card/dstr/ldevice.ko
CC /storage/distribs/lin/L-card/dstr/ldevpci.mod.o
LD [M] /storage/distribs/lin/L-card/dstr/ldevpci.ko
CC /storage/distribs/lin/L-card/dstr/ldevpcibm.mod.o
LD [M] /storage/distribs/lin/L-card/dstr/ldevpcibm.ko
CC /storage/distribs/lin/L-card/dstr/ldevusb.mod.o
LD [M] /storage/distribs/lin/L-card/dstr/ldevusb.ko
make[1]: Leaving directory `/usr/src/linux-2.6.27.29-0.1-obj/i386/default/'
3. make modules_install:
make -C /lib/modules/2.6.27.29-0.1-default/build M=/storage/distribs/lin/L-card/dstr modules_install
make[1]: Entering directory `/usr/src/linux-2.6.27.29-0.1-obj/i386/default/'
make -C ../../../linux-2.6.27.29-0.1 O=/usr/src/linux-2.6.27.29-0.1-obj/i386/default/. modules_install
INSTALL /storage/distribs/lin/L-card/dstr/ldevice.ko
INSTALL /storage/distribs/lin/L-card/dstr/ldevpci.ko
INSTALL /storage/distribs/lin/L-card/dstr/ldevpcibm.ko
INSTALL /storage/distribs/lin/L-card/dstr/ldevusb.ko
DEPMOD 2.6.27.29-0.1-default
make[1]: Leaving directory `/usr/src/linux-2.6.27.29-0.1-obj/i386/default/'
4. Попытался запустить драйвер скриптом sh ./start:
ERROR: Module ldevpcibm does not exist in /proc/modules
ERROR: Module ldevusb does not exist in /proc/modules
ERROR: Module ldevpci does not exist in /proc/modules
ERROR: Module ldevice is in use
insmod: error inserting /'ldevice.ko/': -1 File exists
insmod: error inserting /'ldevpcibm.ko/': -1 Unknown symbol in module
insmod: error inserting //'ldevpci.ko//': -1 Unknown symbol in module
insmod: error inserting //'ldevusb.ko//': -1 Unknown symbol in module
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: Проблема со сборкой драйвера под linux
а запустить просто из папки где они собранные лежат?
|
|
|
Re: Проблема со сборкой драйвера под linux
Доброго времени суток!
Всё заработало! И на ядре 2.6.27.33-4-default x86_64. Нужно было перезагрузиться - неверный модуль использовался ядром (см. вывод п. 4).
Во избежание подобных ситуаций впредь, желательно включить разъяснение зависимости параметров device_create от версии ядра в readme и в исходники с комментариями. Это же всего одна строчка!
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: Проблема со сборкой драйвера под linux
Это хорошо. Только непонятно как неверный модуль ядром использовался.... Насчет device_create просто скоро будет новая версия....
|
|
|
Re: Проблема со сборкой драйвера под linux
Похоже, ещё не всё...
Попробовал test на двух платах e140 и e440.
На 140, кажется, без проблем. На 440, видимо, не грузится bios... Вывод такой:
Get IDaqLDevice interface
IDaqLDevice get success
Free IUnknown
OpenLDevice Handle3
Slot parameters
Base 0
BaseL 0
Mem 0
MemL 0
Type 1e
DSPType 889
Irq 0
Load Bios 2
Plata Test 2
Read FLASH
//здесь долго мигает диод на плате, а программа ждёт и выдаёт:
SerNum I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I��!��
BrdName �I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I��!��
Rev I
DspType �I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I��!��
IsDacPresent I
Quartz 1236289968
Press any key
//Жму
alloc size 10000384
Buffer size(word): 131072
Pages: 32
IrqStep: 4096
FIFO: 4096
Rate: 18.8646
Press any key
//Жму
Ошибка сегментирования
PS Не подскажете, когда будет новая версия, и что в ней изменится?
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: Проблема со сборкой драйвера под linux
там все чувствительно к регистру букв. просто может надо e440 маленькими написатиь или большими E440. У 140 биоса просто нету. Ну новая версия под новое ядро просто будет...
|
|
|
Re: Проблема со сборкой драйвера под linux
Я пробовал и так и так... Результат одинаковый :-(
Про e140 - плавали, знаем...
Попробую e440 дома на другой машине x86_64.
|
|
|
Re: Проблема со сборкой драйвера под linux
На машине x86_64 всё заработало... Буду завтра с бубном плясать вокруг x86.
|
|
|
Re: Проблема со сборкой драйвера под linux
Добрый день!
Пляски ни к чему не привели... Bios отказывается грузиться.
На машине x64 заметил "странность". Я немного модифицировал test - добавил пробную развёртку ЦАП одиночными отсчётами от -5 до 5 В (все 4096 точек с шагом 1). Для e440 время цикла 17 секунд, а для e140 - 4 с (последнее подтверждено и на машине x86)!
На Windows то же самое занимало 61 секунду для обеих.
Вопрос: почему время так сильно разнИтся для плат под linux? Что-то "притормаживает" e440 или и на x64 драйвер работает не совсем корректно?
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: Проблема со сборкой драйвера под linux
Тестов не проводил, но реализация вывода на ЦАП у них разная... даже по коду библиотеки видно.
Почему не работает с 440 на этом дистрибутиве - не скажу. В слаке работает, да и другие насколько я могу судить по сообщениям в конфе работают успешно...
|
|
|
Re: Проблема со сборкой драйвера под linux
Всё собралось и для ядра 2.6.35.5. На E140 работает.
Надо только переопределить названия функций:
#define usb_buffer_alloc usb_alloc_coherent
#define usb_buffer_free usb_free_coherent
|
|
|
Re: Проблема со сборкой драйвера под linux
Странности в драйвере:
Если по тестовому примеру делать программу, то для E140 наблюдается такая картина:
1. При первом заполнении полубуфера
*pp содержит 0
2. После заполнения полубуфера
*pp содержит длину полубуфера
3. После заполнения полного буфера
*pp содержит длину буфера
4. После заполнения первого полубуфера
*pp содержит длину полубуфера
...
и т.д.
Следующая конструкция в тестовом примере
fl1=(*pp<=halfbuffer)? 0:1;
неверна для такой логики счётчика (*pp).
|