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
iowarrior40 auf linux-2.6.15/ppc
Moderator: Guido Körber
iowarrior40 auf linux-2.6.15/ppc - die loesung
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:
(das fuehrt auf ppc dazu, dass idVendor=c007 und idProduct=0015 - im gegensatz zu idVendor=07c0 und idProduct=1500)
statt dessen muss es heissen:
(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
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;
}
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;
}
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.
-
- Posts: 543
- Joined: Mon Dec 01, 2003 6:09 pm
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
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