Linux Kernel 2.6.8 + Sysfs keine Device-Nodes

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
claus007
Posts: 14
Joined: Mon Oct 10, 2005 10:35 pm

Linux Kernel 2.6.8 + Sysfs keine Device-Nodes

Post by claus007 »

Hallo zusammen,

ich habe ein kleines Problem, daß ich auch mit Rücksprache von meinem
lokalen Linux-Guru, ausgooglen etc. nicht lösen kann.

Der Iowarrior Driver kommt mit einem Skript namens make_nodes.
Dieses Versucht im Verzeichnis /dev/usb die Devicenodes anzulegen.
Dummerweise habe ich dieses Verzeichnis nur nicht.
Ich habe dann versucht dieses Verzeichnis manuell zu erstellen, aber das wird beim Booten gelöscht.
Was ich auch schon probiert habe, war folgendes:
1.) rmmod iowarrior
2.) mkdir /dev/usb
3.) make_nodes
4.) modprobe iowarrior
5.) cat /dev/usb/iowarrior0

Dann kam die Meldung : Kein gültiges Gerät gefunden

Wie gesagt der Treiber wird beim Booten automatisch geladen.
Was ich auch noch entdeckt habe, ist, dass es im Verzeichnis /sys/bus/usb/drivers ein iowarrior Verzeichnis gibt.

Jetzt meine Frage(n):
1: Wie aktivere ich die einträge im DevFs ?
2: Wie greife ich auf den Treiber über die Einträge im SysFs zu ?

(Ich verwende Debian Sarge und den Kernel 2.6.8)

Claus
claus007
Posts: 14
Joined: Mon Oct 10, 2005 10:35 pm

Post by claus007 »

Hallo zusammen,
für alle die es interessiert hab mich mal eingelesen...

Kann es sein dass man die Device-Nodes für den IOWarrior vom System anlegen lassen kann ?
Hat jemand Erfahrung mit der Datei /etc/udev/udev.rules ?
Denke mal mit dem Eintrag müßte es gehen...

Code: Select all

BUS="usb", KERNEL="iowarrior[0-9]*", NAME="usb/%k"
Andere Vorschläge ?
Werde das heute abend mal ausprobieren...
wayoda
Posts: 362
Joined: Fri Dec 19, 2003 12:00 pm
Location: Wuppertal/Germany

Post by wayoda »

Das Linux-Modul für den IOWarrior setzt eine Kernel-Version >= 2.6.10 voraus. Unter dem von dir verwendeten Kernel 2.6.8 wird ein IOWarrior nur als HID-Device erkannt und an das Modul hiddev gebunden.

Es gibt 2 Möglichkeiten das Problem zu beheben:
1. Einen neuen Kernel installieren >=2.6.10

2. Falls du den Kernel 2.6.8 beibehalten mußt: In der Datei
/usr/src/linux/drivers/usb/input/hid-core.c
gibt es eine Datenstruktur
static struct hid_blacklist
In diesem struct sind alle Geräte verzeichnet, die sich als HID-Gerät melden, aber einen eigenes Modul benötigen, oder anders ausgedrückt alle Geräte die das Modul hiddev ignorieren soll.

Hier muß auch der IOWarrior eingetragen werden. Dazu werden (wie für die anderen Geräte in der Liste auch) die Vendor und Device-ID der IOWarrior definiert:

Code: Select all

#define USB_VENDOR_ID_CODEMERCS         0x07c0
#define USB_DEVICE_ID_CODEMERCS_IOW40   0x1500
#define USB_DEVICE_ID_CODEMERCS_IOW24   0x1501
#define USB_DEVICE_ID_CODEMERCS_IOW48   0x1502
#define USB_DEVICE_ID_CODEMERCS_IOW28   0x1503
Und dann die folgenden Einträge zum struct hid_blacklist hinzugefügt:

Code: Select all

 
{ USB_VENDOR_ID_CODEMERCS, USB_DEVICE_ID_CODEMERCS_IOW40, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_CODEMERCS, USB_DEVICE_ID_CODEMERCS_IOW24, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_CODEMERCS, USB_DEVICE_ID_CODEMERCS_IOW48, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_CODEMERCS, USB_DEVICE_ID_CODEMERCS_IOW28, HID_QUIRK_IGNORE },
Danach müssen natürlich die Module des Kernels neu compilert und installiert werden, damit die Änderungen auch wirksam werden.

Warum allerdings das Verzeichnis /dev/usb unter Debian nicht existiert, bzw. auch nach einem Reboot wieder verschwindet kann ich als Suse-Nutzer auch nicht beantworten.

Ein einfacher Test für das korrekte Funktioneren des Moduls ist in jedem Fall sich die Ausgabe von dmesg (nur als root möglich) anzusehen.
Das Einstecken des IOWarrior sollte mit einer ähnlichen Meldung verzeichnet sein wie diese hier:

Code: Select all

/home/wyd/iow/SDK/LinuxSDK/Kernel_2.6/Driver/iowarrior.c: IOWarrior product=0x1501, serial=00000117 interface=0 now attached to iowarrior0
/home/wyd/iow/SDK/LinuxSDK/Kernel_2.6/Driver/iowarrior.c: IOWarrior product=0x1501, serial=00000117 interface=1 now attached to iowarrior1
Sie wird direkt vom Modul iowarrior erzeugt.

Eberhard
Post Reply