IO-Warrior 40 unter Linux einrichten
Moderator: Guido Körber
-
- Posts: 543
- Joined: Mon Dec 01, 2003 6:09 pm
Hmm. Kann sein. Ich hab jetzt nochmal einiges ausprobiert, aber es klappt noch nicht. Zwei Dinge die mich wundern. In einer Datei des SDK laß ich von dem Pfad:
/dev/usb/iowarrior
Dieser Ordner existiert bei mir jedoch nicht. Vielleicht ist, dass ein Zeichen, dass das Modul nicht richtig installiert ist.
Und dann hab ich mal versucht die iowkittest.c mit gcc zu komplieren. Es gab folgende Fehlermeldungen:
gcc -o iowkittest iowkittest.c
/tmp/ccIeCukV.o(.text+0x18): In function `WriteSimple':
: undefined reference to `IowKitGetProductId'
/tmp/ccIeCukV.o(.text+0x48): In function `WriteSimple':
: undefined reference to `IowKitWrite'
/tmp/ccIeCukV.o(.text+0x7d): In function `WriteSimple':
: undefined reference to `IowKitWrite'
/tmp/ccIeCukV.o(.text+0xc1): In function `main':
: undefined reference to `IowKitOpenDevice'
/tmp/ccIeCukV.o(.text+0xea): In function `main':
: undefined reference to `IowKitGetNumDevs'
/tmp/ccIeCukV.o(.text+0x124): In function `main':
: undefined reference to `IowKitGetDeviceHandle'
/tmp/ccIeCukV.o(.text+0x141): In function `main':
: undefined reference to `IowKitGetSerialNumber'
/tmp/ccIeCukV.o(.text+0x153): In function `main':
: undefined reference to `IowKitGetProductId'
/tmp/ccIeCukV.o(.text+0x1bc): In function `main':
: undefined reference to `IowKitSetWriteTimeout'
/tmp/ccIeCukV.o(.text+0x28a): In function `main':
: undefined reference to `IowKitWrite'
/tmp/ccIeCukV.o(.text+0x2ab): In function `main':
: undefined reference to `IowKitReadImmediate'
/tmp/ccIeCukV.o(.text+0x2f8): In function `main':
: undefined reference to `IowKitCloseDevice'
collect2: ld returned 1 exit status
kit
Vielleicht weiß ja jemand etwas. Diese Fehlermeldungen, kommen wohl nicht durch einen falschen Programmcode sondern durch etwas anders (falscher Pfad, fehlende Datei). Ich werd jetzt erstmal das kdevelop installieren und probier dann noch rum.
Liebe Grüße,
felix
/dev/usb/iowarrior
Dieser Ordner existiert bei mir jedoch nicht. Vielleicht ist, dass ein Zeichen, dass das Modul nicht richtig installiert ist.
Und dann hab ich mal versucht die iowkittest.c mit gcc zu komplieren. Es gab folgende Fehlermeldungen:
gcc -o iowkittest iowkittest.c
/tmp/ccIeCukV.o(.text+0x18): In function `WriteSimple':
: undefined reference to `IowKitGetProductId'
/tmp/ccIeCukV.o(.text+0x48): In function `WriteSimple':
: undefined reference to `IowKitWrite'
/tmp/ccIeCukV.o(.text+0x7d): In function `WriteSimple':
: undefined reference to `IowKitWrite'
/tmp/ccIeCukV.o(.text+0xc1): In function `main':
: undefined reference to `IowKitOpenDevice'
/tmp/ccIeCukV.o(.text+0xea): In function `main':
: undefined reference to `IowKitGetNumDevs'
/tmp/ccIeCukV.o(.text+0x124): In function `main':
: undefined reference to `IowKitGetDeviceHandle'
/tmp/ccIeCukV.o(.text+0x141): In function `main':
: undefined reference to `IowKitGetSerialNumber'
/tmp/ccIeCukV.o(.text+0x153): In function `main':
: undefined reference to `IowKitGetProductId'
/tmp/ccIeCukV.o(.text+0x1bc): In function `main':
: undefined reference to `IowKitSetWriteTimeout'
/tmp/ccIeCukV.o(.text+0x28a): In function `main':
: undefined reference to `IowKitWrite'
/tmp/ccIeCukV.o(.text+0x2ab): In function `main':
: undefined reference to `IowKitReadImmediate'
/tmp/ccIeCukV.o(.text+0x2f8): In function `main':
: undefined reference to `IowKitCloseDevice'
collect2: ld returned 1 exit status
kit
Vielleicht weiß ja jemand etwas. Diese Fehlermeldungen, kommen wohl nicht durch einen falschen Programmcode sondern durch etwas anders (falscher Pfad, fehlende Datei). Ich werd jetzt erstmal das kdevelop installieren und probier dann noch rum.
Liebe Grüße,
felix
Hallo Felix,
Probiere doch mal dann bekommst Du alle libraries aufgelistet, welche das prog benötigt und welche davon gefunden wurden oder nicht.
gibts mehr Informationen ;-)
Thomas
Probiere doch mal
Code: Select all
ldd ./iowkittest
Das alleine reicht nicht, das System muß die llib auch finden können. Das erreichst Du, indem Du das Verzeichnis (wo libiowkit.so enthalten ist) in die Umgebungsvariable LD_LIBRARY_PATH setzt oder ldconfig benutzt (unterFelixA wrote:Ich hoffe du weiß, was nicht passt. Die "liliowkit.so" exisitierte ja bereits im SDK.
Code: Select all
man ldconfig
Thomas
Hallo Thomas,
du hast mir schon rießig geholfen. Es klappt zwar noch nicht, aber ich glaube ich stehe kurz davor.
Ich hab mal alles durchprobiert. Die Umgebungsvariable "LD_LIBRARY_PATH" konnte ich in keiner Datei finden, deshalb kopiert ich die "libiowkit.so" in den Ordner "/usr/lib".
Als ich dann "ldd ./iowkittest" ausführte erhielt ich:
Ich glaube, das beduetet, alles ist ok. Als ich nun "./iowkittest" ausführte erhielt ich folgende Meldung:
Dann dachte ich mir, an den Modulen kann etwas nicht stimmen. Deshalb machte ich im Ordner "/LinuxSDK/Kernel_2.6/Device" nochmal "make" und dann "make install". Ich erhielt dann folgende Fehlermeldung:
Ich glaube, wenn man diese Fehlermeldung behoben hat, müsste es klappen. Ich würde mich sehr freuen, wenn ihr mir nochmal helfen könntet.
Danke.
Liebe Grüße,
Felix
du hast mir schon rießig geholfen. Es klappt zwar noch nicht, aber ich glaube ich stehe kurz davor.
Ich hab mal alles durchprobiert. Die Umgebungsvariable "LD_LIBRARY_PATH" konnte ich in keiner Datei finden, deshalb kopiert ich die "libiowkit.so" in den Ordner "/usr/lib".
Als ich dann "ldd ./iowkittest" ausführte erhielt ich:
Code: Select all
linux-gate.so.1 => (0xffffe000)
libiowkit.so => /usr/lib/libiowkit.so (0x4002e000)
libc.so.6 => /lib/tls/libc.so.6 (0x40032000)
libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x40147000)
libm.so.6 => /lib/tls/libm.so.6 (0x40204000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x40226000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Code: Select all
Failed to open device
Code: Select all
modprobe -qr iowarrior;
cp ./iowarrior.ko /lib/modules/2.6.4-52-default/kernel/drivers/usb/misc/;
depmod -e -A;
modprobe iowarrior debug=0;
FATAL: Error inserting iowarrior (/lib/modules/2.6.4-52-default/kernel/drivers/usb/misc/iowarrior.ko): Unknown symbol in module, or unknown parameter (see dmesg)
make: *** [install] Fehler 1
Danke.
Liebe Grüße,
Felix
Gerätedateien /dev/usb/iowarrior0 ... iowarrior15
Hallo Felix,
auch wenn es keine Antwort auf Deine letzte Frage ist: was ist denn daraus geworden:
Du kannst das Script auch "per Hand" aufrufen.
Erledige das einmal und probiere, ob dann schon mehr funktioniert.
Gruß
Thomas
auch wenn es keine Antwort auf Deine letzte Frage ist: was ist denn daraus geworden:
Diese Gerätedateien werden durch das Script make_nodes erzeugt. Das Makefile hat jedoch einen "Hacken": beim erstemn Aufruf schlägt die Zeile "modprobe -qr iowarrior" fehl, da ja noch kein Modul geladen wurde. Make bricht dann ab und make_nodes wird nicht mehr aufgerufen und somit die Gerätedateien nicht angelegt.... Zwei Dinge die mich wundern. In einer Datei des SDK laß ich von dem Pfad:/dev/usb/iowarrior
Dieser Ordner existiert bei mir jedoch nicht. Vielleicht ist, dass ein Zeichen, dass das Modul nicht richtig installiert ist.
Du kannst das Script auch "per Hand" aufrufen.
Erledige das einmal und probiere, ob dann schon mehr funktioniert.
Gruß
Thomas
Hallo Thomas.
Wenn ich als SuperUser ./make_nodes aufrufe erhalte ich nur folgende Fehlermeldung:
Ich geb mal, was bei make und make install ausgegben wird.
make
und dann bei make install
Ich hoffe das Hilft uns weiter.
Liebe Grüße,
Felix
Wenn ich als SuperUser ./make_nodes aufrufe erhalte ich nur folgende Fehlermeldung:
Code: Select all
bash: ./make_nodes: Keine Berechtigung
make
Code: Select all
make -C /lib/modules/2.6.4-52-default/build SUBDIRS=/home/gagantua/Documents/io-warrior/LinuxSDK/Kernel_2.6/Driver modules
make[1]: Entering directory `/usr/src/linux-2.6.4-52'
CHK include/linux/version.h
*** Warning: Overriding SUBDIRS on the command line can cause
*** inconsistencies
make[2]: »arch/i386/kernel/asm-offsets.s« ist bereits aktualisiert.
CHK include/asm-i386/asm_offsets.h
CC [M] /home/gagantua/Documents/io-warrior/LinuxSDK/Kernel_2.6/Driver/iowarrior.o
/home/gagantua/Documents/io-warrior/LinuxSDK/Kernel_2.6/Driver/iowarrior.c: In function `iowarrior_release':
/home/gagantua/Documents/io-warrior/LinuxSDK/Kernel_2.6/Driver/iowarrior.c:640: warning: implicit declaration of function `usb_kill_urb'
Building modules, stage 2.
MODPOST
LD [M] /home/gagantua/Documents/io-warrior/LinuxSDK/Kernel_2.6/Driver/iowarrior.ko
make[1]: Leaving directory `/usr/src/linux-2.6.4-52'
Code: Select all
modprobe -qr iowarrior;
cp ./iowarrior.ko /lib/modules/2.6.4-52-default/kernel/drivers/usb/misc/;
depmod -e -A;
modprobe iowarrior debug=0;
FATAL: Error inserting iowarrior (/lib/modules/2.6.4-52-default/kernel/drivers/usb/misc/iowarrior.ko): Unknown symbol in module, or unknown parameter (see dmesg)
make: *** [install] Fehler
Liebe Grüße,
Felix
-
- Posts: 543
- Joined: Mon Dec 01, 2003 6:09 pm
Hmm, was stört denn an der Distribution? Soll ich mir den neuen Kernel hohlen? Ich nutze gerade die Version: 2.6.4-52
Auf meinem Laptop würde ich auch gern den Warrior nutzen, nur wollte ich mir auf diesem die Ubuntu Distribution installieren und nicht SuSE. Die Distirbution ist doch eigentlich auch egal, denn es geht ja nur um den Kernel.
Auf meinem Laptop würde ich auch gern den Warrior nutzen, nur wollte ich mir auf diesem die Ubuntu Distribution installieren und nicht SuSE. Die Distirbution ist doch eigentlich auch egal, denn es geht ja nur um den Kernel.
-
- Posts: 543
- Joined: Mon Dec 01, 2003 6:09 pm
Hab den Kernel 2.6.13 installiert. Schon bei den Standart Kerneleinstellungen sind die HID Treiber aktiviert. Diese auch so lassen.
Wenn ich jetzt "make" und "make install" mache, werden die Treiber ordnungsgemäß als Modul installiert.
Wenns bei euch also nicht klappt, dann achtet gleich mal auf den Kernel, denn die mitgelieferten Treiber sind nicht für alle 2.6er Kernels gedacht. Sie laufen sicher auf einem 2.6.13er. Robert Marquard meinte es ginge auch schon ab 2.6.10.
Liebe Grüße
Felix
Wenn ich jetzt "make" und "make install" mache, werden die Treiber ordnungsgemäß als Modul installiert.
Wenns bei euch also nicht klappt, dann achtet gleich mal auf den Kernel, denn die mitgelieferten Treiber sind nicht für alle 2.6er Kernels gedacht. Sie laufen sicher auf einem 2.6.13er. Robert Marquard meinte es ginge auch schon ab 2.6.10.
Liebe Grüße
Felix
Bei einem Kernel >= 2.6.10 funktioniert es auf jeden Fall, aber es geht ebenfalls mit einem Suse-Kernel ab Version 9.2. (Kernel 2.6.8) da Suse den nötigen Patch hier schon eingebaut hatte, bevor er im Mainstream-Kernel integriert wurde.FelixA wrote: Wenns bei euch also nicht klappt, dann achtet gleich mal auf den Kernel, denn die mitgelieferten Treiber sind nicht für alle 2.6er Kernels gedacht. Sie laufen sicher auf einem 2.6.13er. Robert Marquard meinte es ginge auch schon ab 2.6.10.
Eberhard
hallo allerseits,
ich habe ein iowarrior 24 und wollte heute den kernelmodul installieren. ich habe suse 9.2. mit ein 2.6.8-xxx kernel. will allerdings kein 2.6.10 kernel installieren. habe leider folgendes problem:
die module kompiliere ich selbst und lade die mit insmod- klappt super
mit mknod mache ich mir im /dev/usb ein iowarrior0 und iowarrior1 devices. z.B. mknod iowarrior0 c 180 208
und mknod iowarrior1 c 180 209
wenn ich in ein c-programm ein read auf /dev/usb/iowarrior0 aufrufe oder cat iowarrior0 in der konsole eingebe kriege die fehlermeldung
cat: iowarrior0: Das Argument ist ungültig
oder : Invalid argument bei dem c-programm
hat jemand eine idee woran es liegen könnte? danke.
ich habe ein iowarrior 24 und wollte heute den kernelmodul installieren. ich habe suse 9.2. mit ein 2.6.8-xxx kernel. will allerdings kein 2.6.10 kernel installieren. habe leider folgendes problem:
die module kompiliere ich selbst und lade die mit insmod- klappt super
mit mknod mache ich mir im /dev/usb ein iowarrior0 und iowarrior1 devices. z.B. mknod iowarrior0 c 180 208
und mknod iowarrior1 c 180 209
wenn ich in ein c-programm ein read auf /dev/usb/iowarrior0 aufrufe oder cat iowarrior0 in der konsole eingebe kriege die fehlermeldung
cat: iowarrior0: Das Argument ist ungültig
oder : Invalid argument bei dem c-programm
hat jemand eine idee woran es liegen könnte? danke.
Hallo... Äh (Schöner Nickname übrigens :-)
"Device not found"
Ein kleines Testprogramm folgt unten. Das Programm wartet nach dem Start maximal 10 Sekunden ob sich an den Eingängen etwas verändert.
Wenn man einen Eingang verändert wird der neue Wert auf der console ausgegen und das Programm beendet sich sofort.
Vielleicht einfach mal compilieren mit
gcc -Wall minimum_read0.c -o minimum_read0
und testen. Falls dann noch Probleme sind, melde dich noch mal
Ist auch nicht nötig. Bei Suse funktionierts auch ab Kernel 2.6.8dummbatz wrote: ich habe suse 9.2. mit ein 2.6.8-xxx kernel. will allerdings kein 2.6.10 kernel installieren.
Direktes cat auf das Device geht nicht. Zumindest weisst du aber schon, dass der iowarrior erkannt wird. Ansonsten wäre die Fehlermeldung sowas wiedummbatz wrote: cat: iowarrior0: Das Argument ist ungültig
"Device not found"
Ohne code kann man nichts dazu sagen.dummbatz wrote: Invalid argument bei dem c-programm
Ein kleines Testprogramm folgt unten. Das Programm wartet nach dem Start maximal 10 Sekunden ob sich an den Eingängen etwas verändert.
Wenn man einen Eingang verändert wird der neue Wert auf der console ausgegen und das Programm beendet sich sofort.
Vielleicht einfach mal compilieren mit
gcc -Wall minimum_read0.c -o minimum_read0
und testen. Falls dann noch Probleme sind, melde dich noch mal
Code: Select all
#include <stdlib.h>
#include <stdio.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/input.h>
#include <linux/ioctl.h>
#include <errno.h>
#include<sys/time.h>
#include "iowarrior.h"
int main (int argc, char **argv) {
int fd1 = -1;
if(( fd1 = open( "/dev/usb/iowarrior0", O_RDWR)) < 0 )
{
perror( "iowarrior0 open" );
exit( 1 );
}
unsigned char in_buffer[3];
int result=-1; //result of read and select operations
fd_set rfds; //fd_set for select
struct timeval tv; //the timeout for select
tv.tv_sec=10; //timeout is set to 10 seconds
tv.tv_usec=0;
FD_ZERO(&rfds); //clear the read-descriptors for select
FD_SET(fd1, &rfds);
result=select(fd1+1,&rfds,NULL,NULL,&tv);
printf("select returned %d\n",result);
if(result==-1) {
//error in select
int errcode=errno;
printf("Error in select! errno=%d\n",errcode);
}
else if(result==0) {
//select returned 0, no new data to be read
printf("Select timed out without any data\n");
}
else {
if(FD_ISSET(fd1,&rfds)) {
//We got here, so there should be new data available
result = read(fd1,in_buffer,3);
if(result!=3) {
//well thats not what we expected...
int errcode=errno;
if(errcode==ENODEV)
printf("Device was unplugged\n");
else
printf("Error in reading! errno is set to : %d\n",errcode);
}
else {
//buffer now contains the io-status
printf( "%02x - %02x %02x \n",
in_buffer[2],
in_buffer[0],
in_buffer[1]);
}
}
}
close( fd1 );
exit( 0 );
}
hallo wayoda,
hier erst mal mein programmchen, mit dem ich den iow24 lesen will:
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <errno.h>
int main(){
int readfd, writefd;
int bytes_read;
unsigned char puffer[8];
if((readfd = open("/dev/usb/iowarrior0",O_RDONLY)) < 0 ){
printf("kann iowarrior nicht oeffnen...\n");
exit(-1);
}
if((writefd = open("iowarrior.txt",O_WRONLY)) < 0 ){
printf("kann iowarrior.txt nicht oeffnen...\n");
exit(-1);
}
while(bytes_read = read(readfd,puffer,sizeof(puffer))){
if(bytes_read < 0)
perror("fehler beim lesen von iowarrior...\n");
else
write(writefd,puffer,bytes_read);
}
close(readfd);
close(writefd);
return 0;
}
ich weiss nicht wo man hier was falsch machen konnte, hihi. man lernt wohl nie aus..... bei deinem beispel, was steht den im "iowarrior.h"? würde mich trotzdem interessieren, wo das problemm liegt. das was mir auffällt ist, dass du nur 3 Bytes erwartest!!! wieso eigentlich? ich denke , dass da s das problemm bei mir sein dürfte, da ich zu viele bytes erwarte!!!! mal sehen was du darüber denkst. jetzt probiere ich dein programm....
hier erst mal mein programmchen, mit dem ich den iow24 lesen will:
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <errno.h>
int main(){
int readfd, writefd;
int bytes_read;
unsigned char puffer[8];
if((readfd = open("/dev/usb/iowarrior0",O_RDONLY)) < 0 ){
printf("kann iowarrior nicht oeffnen...\n");
exit(-1);
}
if((writefd = open("iowarrior.txt",O_WRONLY)) < 0 ){
printf("kann iowarrior.txt nicht oeffnen...\n");
exit(-1);
}
while(bytes_read = read(readfd,puffer,sizeof(puffer))){
if(bytes_read < 0)
perror("fehler beim lesen von iowarrior...\n");
else
write(writefd,puffer,bytes_read);
}
close(readfd);
close(writefd);
return 0;
}
ich weiss nicht wo man hier was falsch machen konnte, hihi. man lernt wohl nie aus..... bei deinem beispel, was steht den im "iowarrior.h"? würde mich trotzdem interessieren, wo das problemm liegt. das was mir auffällt ist, dass du nur 3 Bytes erwartest!!! wieso eigentlich? ich denke , dass da s das problemm bei mir sein dürfte, da ich zu viele bytes erwarte!!!! mal sehen was du darüber denkst. jetzt probiere ich dein programm....