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

2 Gedanken zu „Reanimation eines Netzwerk USB Servers“

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.