USB-Modem, CDC-Ethernet und SuSE Problem: Unterschied zwischen den Versionen
Yehudi (Diskussion | Beiträge) (Netzwerk) |
Robi (Diskussion | Beiträge) K (hat USB-Modem, CDC-Ethernet und SuSE . Problem nach USB-Modem, CDC-Ethernet und SuSE Problem verschoben: Umgehung Sonderzeichenproblematik) |
||
(2 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | {{ | + | Autor: Haveaniceday |
+ | |||
+ | Nur für 10.0, falls die Geräte unter 9.3 schon unterstützt wurden. | ||
+ | |||
+ | Es gibt ein bekanntes und gelöstes Problem im Bereich USB-Erkennung. | ||
+ | Aus diesem Grund werden einige USB-Modem Geräte und USB Ethernetschnittstellen nicht richtig erkannt. | ||
+ | |||
+ | '''Lösung A:''' Das Modul "von Hand" in /etc/sysconfig/kernel das Modul in | ||
+ | MODULES_LOADED_ON_BOOT="" eintragen. | ||
+ | |||
+ | '''Lösung B:''' Warten bis SuSE einen Kernelupdate rausgibt. | ||
+ | Edit: "kotd" enthält den Fix. | ||
+ | |||
+ | '''Lösung C:''' folgenden Patch in einen selbstgebauten Kernel einbauen: Code: | ||
+ | |||
+ | <nowiki>--- gregkh-2.6.orig/drivers/usb/core/sysfs.c | ||
+ | +++ gregkh-2.6/drivers/usb/core/sysfs.c | ||
+ | @@ -462,30 +462,23 @@ static ssize_t show_modalias(struct devi | ||
+ | { | ||
+ | struct usb_interface *intf; | ||
+ | struct usb_device *udev; | ||
+ | - int len; | ||
+ | + struct usb_host_interface *alt; | ||
+ | |||
+ | intf = to_usb_interface(dev); | ||
+ | udev = interface_to_usbdev(intf); | ||
+ | + alt = intf->cur_altsetting; | ||
+ | |||
+ | - len = sprintf(buf, "usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic", | ||
+ | - le16_to_cpu(udev->descriptor.idVendor), | ||
+ | - le16_to_cpu(udev->descriptor.idProduct), | ||
+ | - le16_to_cpu(udev->descriptor.bcdDevice), | ||
+ | - udev->descriptor.bDeviceClass, | ||
+ | - udev->descriptor.bDeviceSubClass, | ||
+ | - udev->descriptor.bDeviceProtocol); | ||
+ | - buf += len; | ||
+ | - | ||
+ | - if (udev->descriptor.bDeviceClass == 0) { | ||
+ | - struct usb_host_interface *alt = intf->cur_altsetting; | ||
+ | - | ||
+ | - return len + sprintf(buf, "%02Xisc%02Xip%02X\n", | ||
+ | - alt->desc.bInterfaceClass, | ||
+ | - alt->desc.bInterfaceSubClass, | ||
+ | - alt->desc.bInterfaceProtocol); | ||
+ | - } else { | ||
+ | - return len + sprintf(buf, "*isc*ip*\n"); | ||
+ | - } | ||
+ | + return sprintf(buf, "usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02X" | ||
+ | + "ic%02Xisc%02Xip%02X\n", | ||
+ | + le16_to_cpu(udev->descriptor.idVendor), | ||
+ | + le16_to_cpu(udev->descriptor.idProduct), | ||
+ | + le16_to_cpu(udev->descriptor.bcdDevice), | ||
+ | + udev->descriptor.bDeviceClass, | ||
+ | + udev->descriptor.bDeviceSubClass, | ||
+ | + udev->descriptor.bDeviceProtocol, | ||
+ | + alt->desc.bInterfaceClass, | ||
+ | + alt->desc.bInterfaceSubClass, | ||
+ | + alt->desc.bInterfaceProtocol); | ||
+ | } | ||
+ | static DEVICE_ATTR(modalias, S_IRUGO, show_modalias, NULL); | ||
+ | |||
+ | --- gregkh-2.6.orig/drivers/usb/core/usb.c | ||
+ | +++ gregkh-2.6/drivers/usb/core/usb.c | ||
+ | @@ -569,6 +569,7 @@ static int usb_hotplug (struct device *d | ||
+ | { | ||
+ | struct usb_interface *intf; | ||
+ | struct usb_device *usb_dev; | ||
+ | + struct usb_host_interface *alt; | ||
+ | int i = 0; | ||
+ | int length = 0; | ||
+ | |||
+ | @@ -585,7 +586,8 @@ static int usb_hotplug (struct device *d | ||
+ | |||
+ | intf = to_usb_interface(dev); | ||
+ | usb_dev = interface_to_usbdev (intf); | ||
+ | - | ||
+ | + alt = intf->cur_altsetting; | ||
+ | + | ||
+ | if (usb_dev->devnum < 0) { | ||
+ | pr_debug ("usb %s: already deleted?\n", dev->bus_id); | ||
+ | return -ENODEV; | ||
+ | @@ -627,46 +629,27 @@ static int usb_hotplug (struct device *d | ||
+ | usb_dev->descriptor.bDeviceProtocol)) | ||
+ | return -ENOMEM; | ||
+ | |||
+ | - if (usb_dev->descriptor.bDeviceClass == 0) { | ||
+ | - struct usb_host_interface *alt = intf->cur_altsetting; | ||
+ | + if (add_hotplug_env_var(envp, num_envp, &i, | ||
+ | + buffer, buffer_size, &length, | ||
+ | + "INTERFACE=%d/%d/%d", | ||
+ | + alt->desc.bInterfaceClass, | ||
+ | + alt->desc.bInterfaceSubClass, | ||
+ | + alt->desc.bInterfaceProtocol)) | ||
+ | + return -ENOMEM; | ||
+ | |||
+ | - /* 2.4 only exposed interface zero. in 2.5, hotplug | ||
+ | - * agents are called for all interfaces, and can use | ||
+ | - * $DEVPATH/bInterfaceNumber if necessary. | ||
+ | - */ | ||
+ | - if (add_hotplug_env_var(envp, num_envp, &i, | ||
+ | - buffer, buffer_size, &length, | ||
+ | - "INTERFACE=%d/%d/%d", | ||
+ | - alt->desc.bInterfaceClass, | ||
+ | - alt->desc.bInterfaceSubClass, | ||
+ | - alt->desc.bInterfaceProtocol)) | ||
+ | - return -ENOMEM; | ||
+ | - | ||
+ | - if (add_hotplug_env_var(envp, num_envp, &i, | ||
+ | - buffer, buffer_size, &length, | ||
+ | - "MODALIAS=usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic%02Xisc%02Xip%02X", | ||
+ | - le16_to_cpu(usb_dev->descriptor.idVendor), | ||
+ | - le16_to_cpu(usb_dev->descriptor.idProduct), | ||
+ | - le16_to_cpu(usb_dev->descriptor.bcdDevice), | ||
+ | - usb_dev->descriptor.bDeviceClass, | ||
+ | - usb_dev->descriptor.bDeviceSubClass, | ||
+ | - usb_dev->descriptor.bDeviceProtocol, | ||
+ | - alt->desc.bInterfaceClass, | ||
+ | - alt->desc.bInterfaceSubClass, | ||
+ | - alt->desc.bInterfaceProtocol)) | ||
+ | - return -ENOMEM; | ||
+ | - } else { | ||
+ | - if (add_hotplug_env_var(envp, num_envp, &i, | ||
+ | - buffer, buffer_size, &length, | ||
+ | - "MODALIAS=usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic*isc*ip*", | ||
+ | - le16_to_cpu(usb_dev->descriptor.idVendor), | ||
+ | - le16_to_cpu(usb_dev->descriptor.idProduct), | ||
+ | - le16_to_cpu(usb_dev->descriptor.bcdDevice), | ||
+ | - usb_dev->descriptor.bDeviceClass, | ||
+ | - usb_dev->descriptor.bDeviceSubClass, | ||
+ | - usb_dev->descriptor.bDeviceProtocol)) | ||
+ | - return -ENOMEM; | ||
+ | - } | ||
+ | + if (add_hotplug_env_var(envp, num_envp, &i, | ||
+ | + buffer, buffer_size, &length, | ||
+ | + "MODALIAS=usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic%02Xisc%02Xip%02X", | ||
+ | + le16_to_cpu(usb_dev->descriptor.idVendor), | ||
+ | + le16_to_cpu(usb_dev->descriptor.idProduct), | ||
+ | + le16_to_cpu(usb_dev->descriptor.bcdDevice), | ||
+ | + usb_dev->descriptor.bDeviceClass, | ||
+ | + usb_dev->descriptor.bDeviceSubClass, | ||
+ | + usb_dev->descriptor.bDeviceProtocol, | ||
+ | + alt->desc.bInterfaceClass, | ||
+ | + alt->desc.bInterfaceSubClass, | ||
+ | + alt->desc.bInterfaceProtocol)) | ||
+ | + return -ENOMEM; | ||
+ | |||
+ | envp[i] = NULL;</nowiki> | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | Bei meinem Fritz!BOX USB Ethernetinterface hat es mit dem Patch geklappt. | ||
http://www.linux-club.de/ftopic45256.html | http://www.linux-club.de/ftopic45256.html | ||
+ | |||
+ | |||
+ | == siehe auch == | ||
+ | * http://www.linux-club.de/viewtopic.php?t=48579#272616 - Problem, wegen der fehlenden Unterstützung der Ethernetschnittstelle nicht ins Internet. Ein Online-Update scheidet deshalb aus. | ||
+ | * | ||
+ | |||
+ | == Quellen und weiterführende Links == | ||
+ | * http://www.linux-club.de/viewtopic.php?t=43585 - Der Patch ist aus Bug 105621 | ||
---- | ---- | ||
[[Netzwerk|zurück zum Netzwerk]][[Category:TCP/IP]] | [[Netzwerk|zurück zum Netzwerk]][[Category:TCP/IP]] |
Aktuelle Version vom 12. Dezember 2007, 23:08 Uhr
Autor: Haveaniceday
Nur für 10.0, falls die Geräte unter 9.3 schon unterstützt wurden.
Es gibt ein bekanntes und gelöstes Problem im Bereich USB-Erkennung. Aus diesem Grund werden einige USB-Modem Geräte und USB Ethernetschnittstellen nicht richtig erkannt.
Lösung A: Das Modul "von Hand" in /etc/sysconfig/kernel das Modul in MODULES_LOADED_ON_BOOT="" eintragen.
Lösung B: Warten bis SuSE einen Kernelupdate rausgibt. Edit: "kotd" enthält den Fix.
Lösung C: folgenden Patch in einen selbstgebauten Kernel einbauen: Code:
--- gregkh-2.6.orig/drivers/usb/core/sysfs.c +++ gregkh-2.6/drivers/usb/core/sysfs.c @@ -462,30 +462,23 @@ static ssize_t show_modalias(struct devi { struct usb_interface *intf; struct usb_device *udev; - int len; + struct usb_host_interface *alt; intf = to_usb_interface(dev); udev = interface_to_usbdev(intf); + alt = intf->cur_altsetting; - len = sprintf(buf, "usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic", - le16_to_cpu(udev->descriptor.idVendor), - le16_to_cpu(udev->descriptor.idProduct), - le16_to_cpu(udev->descriptor.bcdDevice), - udev->descriptor.bDeviceClass, - udev->descriptor.bDeviceSubClass, - udev->descriptor.bDeviceProtocol); - buf += len; - - if (udev->descriptor.bDeviceClass == 0) { - struct usb_host_interface *alt = intf->cur_altsetting; - - return len + sprintf(buf, "%02Xisc%02Xip%02X\n", - alt->desc.bInterfaceClass, - alt->desc.bInterfaceSubClass, - alt->desc.bInterfaceProtocol); - } else { - return len + sprintf(buf, "*isc*ip*\n"); - } + return sprintf(buf, "usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02X" + "ic%02Xisc%02Xip%02X\n", + le16_to_cpu(udev->descriptor.idVendor), + le16_to_cpu(udev->descriptor.idProduct), + le16_to_cpu(udev->descriptor.bcdDevice), + udev->descriptor.bDeviceClass, + udev->descriptor.bDeviceSubClass, + udev->descriptor.bDeviceProtocol, + alt->desc.bInterfaceClass, + alt->desc.bInterfaceSubClass, + alt->desc.bInterfaceProtocol); } static DEVICE_ATTR(modalias, S_IRUGO, show_modalias, NULL); --- gregkh-2.6.orig/drivers/usb/core/usb.c +++ gregkh-2.6/drivers/usb/core/usb.c @@ -569,6 +569,7 @@ static int usb_hotplug (struct device *d { struct usb_interface *intf; struct usb_device *usb_dev; + struct usb_host_interface *alt; int i = 0; int length = 0; @@ -585,7 +586,8 @@ static int usb_hotplug (struct device *d intf = to_usb_interface(dev); usb_dev = interface_to_usbdev (intf); - + alt = intf->cur_altsetting; + if (usb_dev->devnum < 0) { pr_debug ("usb %s: already deleted?\n", dev->bus_id); return -ENODEV; @@ -627,46 +629,27 @@ static int usb_hotplug (struct device *d usb_dev->descriptor.bDeviceProtocol)) return -ENOMEM; - if (usb_dev->descriptor.bDeviceClass == 0) { - struct usb_host_interface *alt = intf->cur_altsetting; + if (add_hotplug_env_var(envp, num_envp, &i, + buffer, buffer_size, &length, + "INTERFACE=%d/%d/%d", + alt->desc.bInterfaceClass, + alt->desc.bInterfaceSubClass, + alt->desc.bInterfaceProtocol)) + return -ENOMEM; - /* 2.4 only exposed interface zero. in 2.5, hotplug - * agents are called for all interfaces, and can use - * $DEVPATH/bInterfaceNumber if necessary. - */ - if (add_hotplug_env_var(envp, num_envp, &i, - buffer, buffer_size, &length, - "INTERFACE=%d/%d/%d", - alt->desc.bInterfaceClass, - alt->desc.bInterfaceSubClass, - alt->desc.bInterfaceProtocol)) - return -ENOMEM; - - if (add_hotplug_env_var(envp, num_envp, &i, - buffer, buffer_size, &length, - "MODALIAS=usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic%02Xisc%02Xip%02X", - le16_to_cpu(usb_dev->descriptor.idVendor), - le16_to_cpu(usb_dev->descriptor.idProduct), - le16_to_cpu(usb_dev->descriptor.bcdDevice), - usb_dev->descriptor.bDeviceClass, - usb_dev->descriptor.bDeviceSubClass, - usb_dev->descriptor.bDeviceProtocol, - alt->desc.bInterfaceClass, - alt->desc.bInterfaceSubClass, - alt->desc.bInterfaceProtocol)) - return -ENOMEM; - } else { - if (add_hotplug_env_var(envp, num_envp, &i, - buffer, buffer_size, &length, - "MODALIAS=usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic*isc*ip*", - le16_to_cpu(usb_dev->descriptor.idVendor), - le16_to_cpu(usb_dev->descriptor.idProduct), - le16_to_cpu(usb_dev->descriptor.bcdDevice), - usb_dev->descriptor.bDeviceClass, - usb_dev->descriptor.bDeviceSubClass, - usb_dev->descriptor.bDeviceProtocol)) - return -ENOMEM; - } + if (add_hotplug_env_var(envp, num_envp, &i, + buffer, buffer_size, &length, + "MODALIAS=usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic%02Xisc%02Xip%02X", + le16_to_cpu(usb_dev->descriptor.idVendor), + le16_to_cpu(usb_dev->descriptor.idProduct), + le16_to_cpu(usb_dev->descriptor.bcdDevice), + usb_dev->descriptor.bDeviceClass, + usb_dev->descriptor.bDeviceSubClass, + usb_dev->descriptor.bDeviceProtocol, + alt->desc.bInterfaceClass, + alt->desc.bInterfaceSubClass, + alt->desc.bInterfaceProtocol)) + return -ENOMEM; envp[i] = NULL;
Bei meinem Fritz!BOX USB Ethernetinterface hat es mit dem Patch geklappt.
http://www.linux-club.de/ftopic45256.html
siehe auch
- http://www.linux-club.de/viewtopic.php?t=48579#272616 - Problem, wegen der fehlenden Unterstützung der Ethernetschnittstelle nicht ins Internet. Ein Online-Update scheidet deshalb aus.
Quellen und weiterführende Links
- http://www.linux-club.de/viewtopic.php?t=43585 - Der Patch ist aus Bug 105621