Jump to content

[Gelöst] BrickD auf Asus Router (Asuswrt-Merlin)


Recommended Posts

Geschrieben

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?

Geschrieben

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.

Geschrieben

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. ?

Geschrieben

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

Geschrieben

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.

Geschrieben

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

Geschrieben

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

Geschrieben

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.0

config.log

Geschrieben

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?

Geschrieben

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

Geschrieben

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 ;D:

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...