Nic Geschrieben January 9, 2017 at 12:04 Geschrieben January 9, 2017 at 12:04 Ich versuche auf dem Asus Router RT-AC56U mit freier FW Asuswrt-Merlin und Entware/Opkg den BrickD zu installieren. libusb wird aber nicht in der passenden Version gefunden, Makefile:305: *** Could not find libusb-1.0 >= 1.0.6. Stop obwohl die 1.0.20 darauf ist: admin@nas:/tmp/mnt/Optware/_test/brickd/src/brickd# ldconfig -v | grep libusb* ldconfig: Path `/lib' given more than once ldconfig: Can't link /usr/lib/libtmrg.so.0 to libtmrg.so.0.1 ldconfig: Can't link /usr/lib/libprotobuf-c.so.1 to libprotobuf-c.so libusb-1.0.so.0 -> libusb-1.0.so.0.1.0 libusb-1.0.so.0 -> libusb-1.0.so.0.0.0 libusb-0.1.so.4 -> libusb.so admin@nas:/tmp/mnt/Optware/_test/brickd/src/brickd# make Makefile:305: *** Could not find libusb-1.0 >= 1.0.6. Stop. admin@nas:/tmp/mnt/Optware/_test/brickd/src/brickd# opkg list | grep libusb libhid - 0.2.16-1 - libhid provides a generic and flexible way to access and interact with USB HID devices, much like libusb does for plain USB devices. It is based on libusb 0.1, thus it requires no special HID support in the kernel. Furthermore, it aims to support all operating system supported by libusb. libusb-1.0 - 1.0.20-1 - libusb is a C library that gives applications easy access to USB devices on many different operating systems. libusb-compat - 0.1.4-2 - libusb is a C library that gives applications easy access to USB devices on many different operating systems. admin@nas:/tmp/mnt/Optware/_test/brickd/src/brickd# opkg install libusb-1.0 Package libusb-1.0 (1.0.20-1) installed in root is up to date. Muss ich die Makefile noch anpassen oder was ist da los? Zitieren
photron Geschrieben January 9, 2017 at 16:01 Geschrieben January 9, 2017 at 16:01 Das Makefile verwendet pkg-config um libusb zu finden. Das ldconfig die .so Datei auslistet ist nicht genug. Das sagt nichts darüber aus, ob die libusb Header installiert sind und ohne die Header funktioniert das Kompilieren nicht. libusb-1.0 ist schon das richtige Package, aber du brauchst das Development Package dazu (unter Debian: libusb-1.0-0-dev), um brickd von Source kompilieren zu können. Teste mal was diese beiden Befehle ausgeben: pkg-config --modversion libusb-1.0 pkg-config --list-all | grep libusb Aber ich würde erwarten, dass du einfach nur die .so Datei hast und der Rest fehlt. Ich würde sogar fast erwarten, dass da nicht mal ein Compiler drauf ist. Was gibt folgender Befehl aus? gcc --version Diese Router OSe sind nicht dafür gemacht auf dem Router selbst Software zu kompilieren. Normalerweise hat man da ein Build System auf dem PC mit dem man ein angepasstes Router Image bauen kann. Dort musst du dann brickd integrieren, denke ich. Zitieren
Nic Geschrieben January 9, 2017 at 19:15 Autor Geschrieben January 9, 2017 at 19:15 Ja das ist schon richtig mit der Build Umgebung, allerdings ist das nicht so banal und mal eben schnell erledigt Ein gcc ist im Entware repo aber dabei, der Rest anscheinend nicht: admin@nas:/tmp/home/root# pkg-config --modversion libusb-1.0 Package libusb-1.0 was not found in the pkg-config search path. Perhaps you should add the directory containing `libusb-1.0.pc' to the PKG_CONFIG_PATH environment variable No package 'libusb-1.0' found admin@nas:/tmp/home/root# pkg-config --list-all | grep libusb admin@nas:/tmp/home/root# gcc --version gcc (OpenWrt GCC 5.4.0) 5.4.0 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Das repo gibt sonst nur admin@nas:/tmp/home/root# opkg list | grep libusb* libhid - 0.2.16-1 - libhid provides a generic and flexible way to access and interact with USB HID devices, much like libusb does for plain USB devices. It is based on libusb 0.1, thus it requires no special HID support in the kernel. Furthermore, it aims to support all operating system supported by libusb. libusb-1.0 - 1.0.20-1 - libusb is a C library that gives applications easy access to USB devices on many different operating systems. libusb-compat - 0.1.4-2 - libusb is a C library that gives applications easy access to USB devices on many different operating systems. Wenn ich den gcc schon habe, ließen sich die libusb-1.0-0-dev über das Sourcen Paket von libusb https://github.com/libusb/libusb ggf. compilieren und install. ? Zitieren
photron Geschrieben January 10, 2017 at 12:16 Geschrieben January 10, 2017 at 12:16 Du kannst libusb aus Source installieren, dass sollte prinzipiell funktionieren mit folgenden Befehlen: wget https://github.com/libusb/libusb/releases/download/v1.0.21/libusb-1.0.21.tar.bz2 tar xf libusb-1.0.21.tar.bz2 cd libusb-1.0.21 ./configure make sudo make install Am besten deinstalliert du dann vorher das libusb Package, damit die sich nicht in die quere kommen. configure wird sich aber wahrscheinlich über das Fehlen von libudev beschweren. Du muss dann also entweder libudev + Header installieren oder libusb ohne libudev und damit auch ohne Hotplug Support verwenden. ./configure --disable-udev Zitieren
Nic Geschrieben January 10, 2017 at 13:41 Autor Geschrieben January 10, 2017 at 13:41 In https://github.com/libusb/libusb/releases/download/v1.0.21 ist dann auch die Developer libusb_dev enthalten? Zitieren
photron Geschrieben January 11, 2017 at 09:33 Geschrieben January 11, 2017 at 09:33 Ja, wenn du von Source installiert dann installiert das die .so und .h Dateien. Das installiert dann das was die libusb-1.0 und libusb-1.0-dev Packages installieren würden. Zitieren
Nic Geschrieben January 11, 2017 at 09:55 Autor Geschrieben January 11, 2017 at 09:55 Ok, prima und danke, das probiere ich dann. Gibt es die libudev auch als Sourcen zum Compilieren? Im Entware repo ist die nicht drin. Zitieren
photron Geschrieben January 11, 2017 at 11:17 Geschrieben January 11, 2017 at 11:17 Ich würde erstmal testen, ob du das ohne libudev ans laufen bekommst und wenn das funktioniert mir dann erst über libudev Sorgen machen. Zitieren
photron Geschrieben January 11, 2017 at 11:23 Geschrieben January 11, 2017 at 11:23 Teste mal brickd mit WITH_LIBUDEV=yes WITH_LIBUDEV_DLOPEN=yes make zu kompilieren. Dadurch solltest brickd mit libudev und dadurch Hotplug kompilieren können auch wenn du nur libudev.so hast, aber nicht den Header. Sprich du kannst libusb mit --disable-udev kompilieren und dennoch brickd mit Hotplug haben. Zitieren
Nic Geschrieben January 11, 2017 at 20:29 Autor Geschrieben January 11, 2017 at 20:29 So mit dem tar geht das auf dem Entware nicht admin@nas:/tmp/mnt/Optware/entware/_compile# tar xf libusb-1.0.21.tar.bz2 tar: invalid tar magic Aber mit geht es bzip2 -d libusb-1.0.21.tar.bz2 tar xf libusb-1.0.21.tar Aber ich komme nur soweit mit libusb admin@nas:/tmp/mnt/Optware/entware/_compile/libusb-1.0.21# ./configure checking for a BSD-compatible install... ./install-sh -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... ./install-sh -c -d checking for gawk... no checking for mawk... no checking for nawk... no checking for awk... awk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking whether make supports nested variables... (cached) yes checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... configure: error: in `/tmp/mnt/Optware/entware/_compile/libusb-1.0.21': configure: error: cannot run C compiled programs. If you meant to cross compile, use `--host'. See `config.log' for more details config.log Zitieren
photron Geschrieben January 13, 2017 at 20:21 Geschrieben January 13, 2017 at 20:21 Warum auch immer configure da ein Cross-Compile erkennen will. Egal. Kommando zurück! Die aktuell git Version von brickd kommt jetzt mit der libusb.so Datei alleine aus. Du hast libusb Version 1.0.20, die kann von sich aus Hotplug, wenn derjenige der das opkg Package erstellt hat, libudev Support aktiviert hat. brickd kann das zur Laufzeit von libusb Abfragen und falls Hotplug nicht über libusb verfügbar ist, selbst libudev verwenden. brickd kommt schon länger mit der libudev.so Datei alleine aus. Sprich es sollte funktionieren, wenn du das libusb und libudev opkg Package für die .so Dateien installiert hast. Wenn du libudev nicht hast, geht das auch, dann hast du halt nur kein Hotplug. Also einmal frisch den brickd und daemonlib Source Code von github herunterladen und dann make so aufrufen: make WITH_LIBUSB_DLOPEN=yes WITH_LIBUDEV_DLOPEN=yes Zitieren
Nic Geschrieben January 14, 2017 at 17:44 Autor Geschrieben January 14, 2017 at 17:44 Hey, danke für deinen unermüdlichen Support Also wir scheinen der Sache langsam näher zu kommen. Die libudev gibt es zwar nicht im Entware-ng repo: http://pkg.entware.net/binaries/armv7/Packages.html Und der opkg Manager listet nichts mit opkg list | grep libudev auf. Nachdem ich die Vorgaben gem. https://github.com/Entware-ng/Entware-ng/wiki/Using-gcc-%28native-compilation%29 erfüllt habe, ging auch das Compilieren der libusb. Sorry in die doc hätte ich mal früher schauen sollen admin@nas:/tmp/mnt/Optware/entware/_compile/brickd/src/brickd# pkg-config --modversion libusb-1.0 1.0.21 admin@nas:/tmp/mnt/Optware/entware/_compile/brickd/src/brickd# pkg-config --list-all | grep libusb libusb-1.0 libusb-1.0 - C API for USB device access from Linux, Mac OS X, Windows, OpenBSD/NetBSD and Solaris userspace Aus dem git habe den Brickd neu geholt und das make kommt hier weiter, aber bricht ab: admin@nas:/tmp/mnt/Optware/entware/_compile/brickd/src/brickd# make WITH_LIBUSB_DLOPEN=yes WITH_LIBUDEV_DLOPEN=yes libraries/tools: - libusb: dlopen - libudev: dlopen - pm-utils: no features: - logging: yes - epoll: yes - debug: no - profiling: no - red-brick: no - hotplug: libusb (if supported) or libudev - mesh-single-root-node: no CC ../daemonlib/array.o /bin/sh: cc: not found cp: can't stat '../daemonlib/array.d': No such file or directory /bin/sh: can't open ../daemonlib/array.d: no such file /bin/sh: cc: not found make: *** [Makefile:518: ../daemonlib/array.o] Error 127 Ist da noch ein Pfad Problem? daemonlib ist parallel zum Verzeichnis brickd unter /src/brickd. Bei der libusb Erstellung musste ich den Standardpfad ändern statt "/usr/local" --PREFIX=/opt anderenfalls würde das im ReadOnly FW des Routers landen.libusb-1.0config.log Zitieren
Nic Geschrieben January 14, 2017 at 18:28 Autor Geschrieben January 14, 2017 at 18:28 Das produziert mir zumindest ein brickd File: admin@nas:/tmp/mnt/Optware/entware/_compile/brickd/src/brickd# make WITH_LIBUSB_DLOPEN=yes WITH_LIBUDEV_DLOPEN=yes CC=gcc prefix=/opt libraries/tools: - libusb: dlopen - libudev: dlopen - pm-utils: no features: - logging: yes - epoll: yes - debug: no - profiling: no - red-brick: no - hotplug: libusb (if supported) or libudev - mesh-single-root-node: no CC ../daemonlib/array.o CC ../daemonlib/base58.o CC ../daemonlib/config.o CC ../daemonlib/conf_file.o CC ../daemonlib/enum.o CC ../daemonlib/event.o CC ../daemonlib/file.o CC ../daemonlib/io.o CC ../daemonlib/log.o CC ../daemonlib/node.o CC ../daemonlib/packet.o CC ../daemonlib/queue.o CC ../daemonlib/socket.o CC ../daemonlib/utils.o CC ../daemonlib/writer.o CC ../daemonlib/daemon.o CC ../daemonlib/log_posix.o CC ../daemonlib/pid_file.o CC ../daemonlib/pipe_posix.o CC ../daemonlib/signal.o CC ../daemonlib/socket_posix.o CC ../daemonlib/threads_posix.o CC ../daemonlib/event_linux.o CC ../daemonlib/timer_linux.o CC base64.o CC client.o CC config_options.o CC hardware.o CC hmac.o CC mesh.o CC mesh_stack.o CC network.o CC sha1.o CC stack.o CC usb.o CC usb_stack.o CC usb_transfer.o CC websocket.o CC zombie.o CC usb_posix.o CC main_linux.o CC udev.o CC ../build_data/linux/libusb/libusb.o LD brickd Jedenfalls sehe ich es im aktuellen Verz. admin@nas:/tmp/mnt/Optware/entware/_compile/brickd/src/brickd# ls Makefile config_options.p log_winapi.c network.p sha1.p usb_stack.h assets event_winapi.c main_linux.c red_ethernet_extension.c sources usb_stack.o base64.c fixes_mingw.c main_linux.o red_ethernet_extension.h stack.c usb_stack.p base64.h fixes_mingw.h main_linux.p red_extension.c stack.h usb_transfer.c base64.o fixes_msvc.c main_macosx.c red_extension.h stack.o usb_transfer.h base64.p fixes_msvc.h main_uwp.cpp red_rs485_extension.c stack.p usb_transfer.o brickd hardware.c Aber file not found admin@nas:/tmp/mnt/Optware/entware/_compile/brickd/src/brickd# ldd ./brickd -sh: ./brickd: not found Make install produziert in /opt/bin/brickd admin@nas:/tmp/mnt/Optware/entware/_compile/brickd/src/brickd# make install prefix=/opt libraries/tools: - libusb: 1.0.21 - libudev: not required - pm-utils: no features: - logging: yes - epoll: yes - debug: no - profiling: no - red-brick: no - hotplug: libusb - mesh-single-root-node: no MD /opt/bin MD /opt/etc MD /opt/etc/init.d MD /opt/etc/logrotate.d MD /opt/var/log MD /opt/var/run MD /opt/share MD /opt/share/man MD /opt/share/man/man8 MD /opt/share/man/man5 CP brickd CP brickd.conf install: cannot stat ‘../build_data/linux/etc/brickd-default.conf’: No such file or directory make: *** [Makefile:474: install] Error 1 admin@nas:/tmp/mnt/Optware/entware/_compile/brickd/src/brickd# which brickd /opt/bin/brickd admin@nas:/tmp/mnt/Optware/entware/_compile/brickd/src/brickd# ldd /opt/bin/brickd -sh: /opt/bin/brickd: not found Warum brickd nicht gefunden wird ist mir ein Rätsel? Zitieren
Nic Geschrieben January 15, 2017 at 12:43 Autor Geschrieben January 15, 2017 at 12:43 Jetzt verstehe ich, gem. https://github.com/Entware-ng/Entware-ng/wiki/Using-gcc-%28native-compilation%29 muss ich zuerst source /opt/bin/gcc_env.sh ausführen. Dann klappt das mit make und erzeugt ein ausführbares Compilat. admin@nas:/tmp/mnt/Optware/entware/_compile/brickd/src/brickd# ./brickd 2017-01-15 12:45:43.160641 <I> <main_linux.c:284> Brick Daemon 2.2.4 started (pid: 2900, daemonized: 0) 2017-01-15 12:45:43.271910 <E> <usb_stack.c:397> Could not claim interface of USB device (bus: 2, device: 6) after 10 retry(s): LIBUSB_ERROR_BUSY (-6) 2017-01-15 12:45:43.272226 <W> <usb.c:181> Ignoring USB device (bus: 2, device: 6) due to an error admin@nas:/tmp/mnt/Optware/entware/_compile/brickd/src/brickd# ldd ./brickd libdl.so.2 => /opt/lib/libdl.so.2 (0x4012e000) libpthread.so.0 => /opt/lib/libpthread.so.0 (0x40141000) libc.so.6 => /opt/lib/libc.so.6 (0x4016b000) /opt/lib/ld-linux.so.3 (0x400a0000) Da fehlt die Ref. auf libusb, oder? libusb ist aber bekannt: admin@nas:/tmp/mnt/Optware/entware/_compile/brickd/src/brickd# pkg-config --modversion libusb-1.0 1.0.21 admin@nas:/tmp/mnt/Optware/entware/_compile/brickd/src/brickd# pkg-config --list-all | grep libusb libusb-1.0 libusb-1.0 - C API for USB device access from Linux, Mac OS X, Windows, OpenBSD/NetBSD and Solaris userspace admin@nas:/tmp/mnt/Optware/entware/_compile/brickd/src/brickd# brickd Zitieren
Nic Geschrieben January 15, 2017 at 16:06 Autor Geschrieben January 15, 2017 at 16:06 Meine Vermutung stimmt anscheinend nicht, die libusb wird zur Laufzeit geladen: 2017-01-15 15:55:08.997002 <I> <main_linux.c:284> Brick Daemon 2.2.4 started (pid: 1500, daemonized: 0) 2017-01-15 15:55:08.997539 <D> <libusb.c:105> Successfully loaded libusb-1.0.so 2017-01-15 15:55:08.997654 <D> <event.c:57> Initializing event subsystem 2017-01-15 15:55:08.997760 <D> <event|event.c:221> Added generic event source (handle: 5, events: 0x0001) at index 0 2017-01-15 15:55:08.997832 <D> <hardware.c:39> Initializing hardware subsystem 2017-01-15 15:55:08.997874 <D> <usb.c:238> Initializing USB subsystem 2017-01-15 15:55:08.997937 <D> <usb_posix.c:161> Successfully loaded libusb-1.0.so [timestamp] [threadID] facility level [function call] <message> -------------------------------------------------------------------------------- [ 0.000028] [000005dc] libusb: debug [libusb_init] created default context [ 0.000111] [000005dc] libusb: debug [libusb_init] libusb v1.0.21.11156 ... Am Router habe ich jeweils am USB2 oder USB3 Port einen Master-Brick plus RTC angeschlossen, ansonsten hängen da nur Harddrives/USB Stick. lsusb und dmesg geben nicht viel her. Der Master-Brick soll ein GSM Modem sein admin@nas:/tmp/mnt/Optware/entware/_compile/brickd/src/brickd# dmesg | grep usb usbcore: registered new interface driver usbfs usbcore: registered new interface driver hub usbcore: registered new device driver usb usbcore: registered new interface driver usb-storage usb usb1: No SuperSpeed endpoint companion for config 1 interface 0 altsetting 0 ep 129: using minimum values [xhci-hub] usb2mode:[0] usbcore: registered new interface driver usblp usbcore: registered new interface driver asix usbcore: registered new interface driver cdc_ether usbcore: registered new interface driver rndis_host usbcore: registered new interface driver cdc_ncm usb 2-1: new high speed USB device using ehci_hcd and address 2 usbcore: registered new interface driver cdc_wdm usbcore: registered new interface driver qmi_wwan usbcore: registered new interface driver cdc_mbim usb 2-2: new high speed USB device using ehci_hcd and address 3 usb 2-1.1: new high speed USB device using ehci_hcd and address 4 scsi0 : usb-storage 2-1.1:1.0 usb 2-1.2: new high speed USB device using ehci_hcd and address 5 scsi1 : usb-storage 2-1.2:1.0 usb 2-1.4: new high speed USB device using ehci_hcd and address 6 usb 2-1.4.1: new high speed USB device using ehci_hcd and address 7 usb-storage 2-1.4.1:1.0: Quirks match for vid 152d pid 2329: 8020 scsi2 : usb-storage 2-1.4.1:1.0 usb 2-1.4.3: new high speed USB device using ehci_hcd and address 8 scsi3 : usb-storage 2-1.4.3:1.0 usb 2-2.1: new high speed USB device using ehci_hcd and address 9 scsi4 : usb-storage 2-2.1:1.0 usb 2-2.2: new high speed USB device using ehci_hcd and address 10 scsi5 : usb-storage 2-2.2:1.0 usb 2-2.3: new high speed USB device using ehci_hcd and address 11 usb 2-2.4: new full speed USB device using ehci_hcd and address 12 usb 2-2.3: new high speed USB device using ehci_hcd and address 13 scsi6 : usb-storage 2-2.3:1.0 usbcore: registered new interface driver usbserial usbcore: registered new interface driver usbserial_generic usbserial: USB Serial Driver core usb 2-2.4: GSM modem (1-port) converter now attached to ttyUSB0 usbcore: registered new interface driver option admin@nas:/tmp/mnt/Optware/entware/_compile/brickd/src/brickd# lsusb Bus 001 Device 001: ID 1d6b:0003 Bus 002 Device 001: ID 1d6b:0002 Bus 003 Device 001: ID 1d6b:0001 Bus 002 Device 002: ID 05e3:0608 Bus 002 Device 003: ID 2109:2811 Bus 002 Device 004: ID 174c:1153 Bus 002 Device 005: ID 1058:0830 Bus 002 Device 006: ID 05e3:0608 Bus 002 Device 007: ID 152d:2329 Bus 002 Device 008: ID 0951:1643 Bus 002 Device 009: ID 13fd:3940 Bus 002 Device 010: ID 1058:10b8 Bus 002 Device 012: ID 16d0:063d Bus 002 Device 013: ID 1058:10a8 Laut Router-Log müsste der Master-Brick das hier sein, keine Ahnung warum. Könnte dieser Kernel-Treiber blockieren? Aug 1 00:00:35 kernel: USB Serial support registered for GSM modem (1-port) Aug 1 00:00:35 kernel: option 2-2.4:1.0: GSM modem (1-port) converter detected Aug 1 00:00:35 kernel: usb 2-2.4: GSM modem (1-port) converter now attached to ttyUSB0 Aug 1 00:00:35 kernel: usbcore: registered new interface driver option Aug 1 00:00:35 kernel: option: v0.7.2:USB Driver for GSM modems Achso, ich hatte den Brick zwischendurch angesteckt, Hotplug geht aber nicht. Nachdem ich den Brickd nach Reboot autom. starte, klappt das nun ganz hervorragend : 2015-08-01 00:00:31.419171 <I> <main_linux.c:284> Brick Daemon 2.2.4 started (pid: 1076, daemonized: 0) 2015-08-01 00:00:31.435792 <I> <usb.c:191> Added USB device (bus: 2, device: 9) at index 0: Master Brick [6Qm1Qj]brickd_komplett.log Zitieren
photron Geschrieben January 16, 2017 at 13:22 Geschrieben January 16, 2017 at 13:22 Gut, du hast es zum Laufen bekommen. make install scheitert, weil ich im letzten Commit einen Fehler eingebaut hatte. Der ist jetzt wieder behoben. Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.