Reanimation eines Netzwerk USB Servers

Wenn mehrere Rechnern und USB Geräte gemeinsam nutzt werden sollen gibt es diverse Lösungen. Ein USB Netzwerk Server ist eine solche. Aber was tun wenn der Hersteller keine aktuellen Treiber mehr liefert?

Wenn man in einem Netzwerk USB Geräte gemeinsam nutzen will gibt es verschiedene Lösungen um diese zu teilen:

  • über einen Rechner
  • Router
  • NAS
  • Netzwerk USB Server

Letzteres Möglichkeit hat mir speziell beim heiklen Thema Multifunktionstdurcker / Scannern stets gute Dienste geleistet.

Mein verwendeter Netzwerk USB Server basiert auf einem Network USB over Ethernet SoCs der Firma Elite Silicon. Diese stecken in den meisten günstigen Geräte wie:

  • Sharkoon USB Lanport 400
  • LogiLink 4-Port Hub USB 2.0 Netzwerk Server
  • etc.

Im Gegensatz zu den OEMs stellt Elite Silicon seit Jahren  Treiber für diese Geräte bereit. Sogar für Linux (wenn auch nicht mehr die neusten Versionen)!

http://www.elitesilicon.com/linux_software_eng.html

Leider kam es bei der Neuinstallation meines Rechners zu folgem
Fehler bei der Installation:

$ dpkg -i ./nhci_0.9.22-1usbserver1_amd64.deb 
Selecting previously unselected package nhci.
(Reading database ... 263226 files and directories currently installed.)
Preparing to unpack .../nhci_0.9.22-1usbserver1_amd64.deb ...
Unpacking nhci (0.9.22-1usbserver1) ...
Setting up nhci (0.9.22-1usbserver1) ...
Loading new nhci-0.9.22 DKMS files...
Building for 4.13.0-37-generic
Building for architecture x86_64
Building initial module for 4.13.0-37-generic
ERROR (dkms apport): unable to determine source package for nhci
Error! Bad return status for module build on kernel: 4.13.0-37-generic (x86_64)
Consult /var/lib/dkms/nhci/0.9.22/build/make.log for more information.
Processing triggers for ureadahead (0.100.0-20) ...
Processing triggers for man-db (2.7.6.1-2) ...

Schauen wir mal ins Log: hier finden wir ein paar warnings wegen nicht verwendete Variablen ect. Der Hauptgrund sind fehlende Funktionsaufrufe: wie signal_pending und send_sig.

/var/lib/dkms/nhci/0.9.22/build/nhci_kernel.c: In function ‘kern_signal_pending’:
/var/lib/dkms/nhci/0.9.22/build/nhci_kernel.c:263:12: error: implicit declaration of function ‘signal_pending’; did you mean ‘kern_signal_pending’? [-Werror=implicit-function-declaration]
     return signal_pending((struct task_struct *)p);
            ^~~~~~~~~~~~~~
            kern_signal_pending
/var/lib/dkms/nhci/0.9.22/build/nhci_kernel.c: In function ‘kern_thread_setting’:
/var/lib/dkms/nhci/0.9.22/build/nhci_kernel.c:272:5: error: implicit declaration of function ‘allow_signal’; did you mean ‘do_signal’? [-Werror=implicit-function-declaration]
     allow_signal(SIGKILL);
     ^~~~~~~~~~~~
     do_signal
/var/lib/dkms/nhci/0.9.22/build/nhci_kernel.c: In function ‘kern_send_sig’:
/var/lib/dkms/nhci/0.9.22/build/nhci_kernel.c:286:12: error: implicit declaration of function ‘send_sig’; did you mean ‘send_sigio’? [-Werror=implicit-function-declaration]
     return send_sig(sig, (struct task_struct *)p, priv);
            ^~~~~~~~
            send_sigio
cc1: some warnings being treated as errors
scripts/Makefile.build:308: recipe for target '/var/lib/dkms/nhci/0.9.22/build/nhci_kernel.o' failed

Diese wurden mit dem Kernel 4.11 in eine neue Include-Datei verschoben.

Um das Paket zu reparieren entpacken wir die .deb Datei zunächst.
Um die Rechte der Dateien nicht zu ändern führen wir alles als root aus :

$ sudo su
$ dpkg-deb -R nhci_0.9.22-1usbserver1_amd64.deb ./tmp

Nun finden wir unter ./tmp/usr/src/nhci-0.9.22/nhci_kernel.c die Problemstelle.

Also passen wir die die nhci_kernel.c etwas an und fügen folgende Zeile unterhalb der anderen Includes ein um auch die Rückwärtskompatibilität zu erhalten:

#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
#include <linux/sched/signal.h>
#endif

Weil das Paket von 2015 stammt und hier noch up-start Standard war benötigen wir auch noch einen Wrapper für system.d

Hierfür fügen wir noch eine .service-Datei unter ./tmp/lib/systemd/system mit folgendem Inhalt hinzu:

[Unit]
Description=EST Network USB Host configuration
Documentation=man:virtualusbc(8)

[Service]
Type=oneshot
ExecStart=/usr/sbin/nhci start
EexcStop=/usr/sbin/nhci stop
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Nach dem nun alle Fehler behoben sind packen wir uns wieder ein neues Packet mit:

$dpkg-deb -b tmp ./nhci_0.9.22-1usbserver1_amd64_fixed.deb

Nun kann die Installation erneut getestet werden:

$ dpkg -i ./nhci_0.9.22-1usbserver1_amd64_fixed.deb 
Selecting previously unselected package nhci.
(Reading database ... 263226 files and directories currently installed.)
Preparing to unpack .../nhci_0.9.22-1usbserver1_amd64_fixed.deb ...
Unpacking nhci (0.9.22-1usbserver1) ...
Setting up nhci (0.9.22-1usbserver1) ...
Loading new nhci-0.9.22 DKMS files...
Building for 4.13.0-37-generic
Building for architecture x86_64
Building initial module for 4.13.0-37-generic
Done.

nhci:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/4.13.0-37-generic/updates/dkms/

depmod...

DKMS: install completed.
Processing triggers for ureadahead (0.100.0-20) ...
Processing triggers for man-db (2.7.6.1-2) ...
Processing triggers for shim-signed (1.33.1~17.10.1+13-0ubuntu2) ...

Und schon läuft wieder alles.

Die .deb-Datei könnt ihr auch hier herunterladen:

Download

6 Gedanken zu „Reanimation eines Netzwerk USB Servers“

    1. Wenn ich die Zeit finde mach ich das. Ich bin aber ich bin mittlerweile selbst auf einen RasberyPi als Druck und Printserver umgestiegen.

      1. Hi,
        kannst Du Dich noch erinnern, wie Du den virtualusb-Kram zum Laufen bekommen hast?
        Leider scheitere ich am Verbinden mit den Devices, da wird ein Fehler (-3/10) geworfen.
        Auch eine Anleitung zu dem Zeug habe ich nicht, nur die Man-Page. Da steh aber nix drinnen.
        Wäre toll, wenn Du mir da weiter helfen könntest.
        Danke und Gruß
        Alex

        1. Hallo Alex,

          das weiß ich leider nicht mehr so genau.
          Das einzige was mir dazu gerade einfällt wäre zu wenig Rechte. Hast du es schon mal mit sudo versucht und geprüft dass keine Firewall Regel im weg ist?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.