iowarrior40 auf linux-2.6.15/ppc

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Post Reply
morlac
Posts: 3
Joined: Mon Apr 10, 2006 7:32 pm
Location: Trier
Contact:

iowarrior40 auf linux-2.6.15/ppc

Post by morlac »

hallo,
hab ein ibook/ppc unter debian am laufen und will den IOW40 dran betreiben.
modul iowarrior ist passend zum kernel 2.6.15 kompiliert und wird auch beim anschliessen des starterkit geladen; das war's dann aber leider auch.

dmesg gibt folgendes aus:
---- snip ----
usb 1-1.1.4: new low speed USB device ohci_hcd and address 9
usbcore: registered new driver iowarrior
/root/IO-Warrior-SDK/LINUXSDK/Kernel_2.6/Driver/iowarrior.c: USB I/O-Warrior driver (Linux 2.6.x) v0.3.3
---- snap ----

beim zugriff (cat /dev/usb/iowarrior0) auf die (dann doch) per make_nodes erstellten device-nodes bekomm' ich ein "No such device" zurueck

auf einem x86-system mit kernel 2.6.12 wird der IOW40 auch erkannt (seriennummer, ..) => chip nicht defekt

irgendjemand ne idee, wie ich da weiterkommen koennte?

gruss, morlac
morlac
Posts: 3
Joined: Mon Apr 10, 2006 7:32 pm
Location: Trier
Contact:

iowarrior40 auf linux-2.6.15/ppc - die loesung

Post by morlac »

hab die loesung nun nach ein wenig suchen selber gefunden:
die funktion iowarrior_probe ist nicht sauber implementiert.

im iowarrior.c wurden die usb-identifier idVendor und idProduct nicht richtig abgefragt:

Code: Select all

    if(( udev->descriptor.idVendor != USB_VENDOR_ID_CODEMERCS ) ||
       (( udev->descriptor.idProduct != USB_DEVICE_ID_CODEMERCS_IOW40 ) &&
        ( udev->descriptor.idProduct != USB_DEVICE_ID_CODEMERCS_IOW24 ))) {
            return -ENODEV;
    }
(das fuehrt auf ppc dazu, dass idVendor=c007 und idProduct=0015 - im gegensatz zu idVendor=07c0 und idProduct=1500)

statt dessen muss es heissen:

Code: Select all

    if(( le16_to_cpu(udev->descriptor.idVendor) != USB_VENDOR_ID_CODEMERCS ) ||
       (( le16_to_cpu(udev->descriptor.idProduct) != USB_DEVICE_ID_CODEMERCS_IOW40 ) &&
        ( le16_to_cpu(udev->descriptor.idProduct) != USB_DEVICE_ID_CODEMERCS_IOW24 ))) {
            return -ENODEV;
    }
(funktioniert auch auf x86 so .. es sind noch ein paar stellen mehr, an denen die little-endian-konvertierung noch fehlt .. ein patch-file fuer das modul gibt's auf http://skavaer.homelinux.org/iowarrior.patch)

aber leider funktioniert's immer noch nicht - und ich weiss noch nicht, woran's liegt :(

gruesse, morlac
Last edited by morlac on Sat Apr 15, 2006 6:06 pm, edited 2 times in total.
Robert Marquardt
Posts: 543
Joined: Mon Dec 01, 2003 6:09 pm

Post by Robert Marquardt »

Danke, wir haben nur x86 Rechner mit Linux.
Nach Ostern werden wir die Aenderungen gerne uebernehmen.
morlac
Posts: 3
Joined: Mon Apr 10, 2006 7:32 pm
Location: Trier
Contact:

Post by morlac »

moinmoin,

sodale .. hab's nu am laufen ..
hatte es bisher nur mit den alten beispielen probiert (iow40_wr_if0.c, ..) und da hat's wohl die byte-reihenfolge durcheinandergewuerfelt.

hab's nun mal mit dem iowkit (nach ein paar pfad-anpassungen hat's einwandfrei auf debian-etch/ppc - kernel 2.6.15 - kompiliert) probiert und das (iowkittest) hat einwandfrei funktioniert.

gruss, morlac
Post Reply