Ankündigung

Einklappen
Keine Ankündigung bisher.

ebusd für Fritzbox 7170 Freetz - Problem während make (ppoll)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [-] ebusd für Fritzbox 7170 Freetz - Problem während make (ppoll)

    Hallo zusammen,

    ich versuche seit ein paar Tagen die ebusd Version 0.4.0 für die Fritzbox 7170 mit Freetz zu kompilieren. Ich habe dazu die Toolchain erstellt und nutze sie jetzt um ebusd für MIPS OHIO zu erstellen.
    Ich führe autogen.sh mit entsprechenden Optionen aus, was auch soweit gut geht.
    Code:
    autogen.sh --build=x86_64-linux-gnu --target=mipsel-linux --host=mipsel-linux
    Danach stößt ein 'make' auf folgenden Fehler:

    Code:
    make[2]: Entering directory '/home/stefan/ebusd/ebusd-20141118/src/lib/ebus/test'
    mipsel-linux-g++  -fpic -Wall -Wextra -I../../../../src/lib/ebus -g -O2   -o test_port  test_port.o ../../../../src/lib/ebus/libebus.a 
    ../../../../src/lib/ebus/libebus.a(port.o): In function `libebus::Device::recvBytes(long, unsigned int)':
    /home/stefan/ebusd/ebusd-20141118/src/lib/ebus/port.cpp:85: undefined reference to `ppoll'
    /home/stefan/ebusd/ebusd-20141118/src/lib/ebus/port.cpp:85: undefined reference to `ppoll'
    collect2: ld returned 1 exit status
    Makefile:350: recipe for target 'test_port' failed
    make[2]: *** [test_port] Error 1
    make[2]: Leaving directory '/home/stefan/ebusd/ebusd-20141118/src/lib/ebus/test'
    Makefile:350: recipe for target 'all-recursive' failed
    make[1]: *** [all-recursive] Error 1
    make[1]: Leaving directory '/home/stefan/ebusd/ebusd-20141118'
    Makefile:290: recipe for target 'all' failed
    make: *** [all] Error 2
    Meine Forschungen haben ergeben, dass der benutzte (Freetz-)Kernel scheinbar noch kein ppoll versteht. Beim Build eines upnp auf ARM wurde deshalb mal ein Patch erstellt und von ppoll auf poll umgestellt (https://dev.openwrt.org/ticket/5766).

    Hat jemand eine Idee ob es einen ähnlichen Patch auch für ebusd gibt oder wie man den Fehler anders umgehen/beheben könnte?

    Danke und viele Grüße

    #2
    Hi,

    kannst du nachsehen was zur Verfügung steht?
    • select
    • pselect
    • poll
    • ppoll < nein
    • epoll


    Du verwendest übrigens die letzten Commits und nicht die Version 0.4
    Aktuelle wird ebusd massiv umgebaut und dabei bleibt im Moment kein Stein auf dem anderen.

    Kommentar


      #3
      Hi,

      Danke für die schnelle Antwort. Ich mache mich gleich auf die Suche. Hast du einen Tipp wie ich das am schnellsten rausfinden kann?

      Kommentar


        #4
        find ?

        /usr/include/....

        system.h
        poll.h
        epoll.h

        Kommentar


          #5
          Hi,

          auf der Box selbst habe ich ja keine Build-Umgebung, damit auch kein /usr/include.
          Ich hoffe ich habe jetzt in der Toolchain an der richtigen Stelle gesucht
          .../toolchain/target/include
          • select -> ./sys/select.h und ./bits/select.h
          • pselect < nein
          • poll < ./linux/poll.h, ./asm/poll.h, ./bits/poll.h, ./sys/poll.h, ./poll.h
          • ppoll < nein
          • epoll < nein

          Ist das ungefähr das was du wissen wolltest? Ansonsten kann ich auch noch weiter greppen...
          Ich bin im Linux-(Kernel)-Build-Kram leider nicht so der Profi.

          Kommentar


            #6
            ok,

            kannst du mal in der .../sys/select.h nach pselect suchen?

            Kommentar


              #7
              nachdem du poll hast, werde ich dazu was einbauen.

              Kommentar


                #8
                Da gibt es Treffer...

                Code:
                ...
                /* fd_set for select and pselect.  */
                typedef struct
                  {
                    /* XPG4.2 requires this member name.  Otherwise avoid the name
                       from the global namespace.  */
                #ifdef __USE_XOPEN
                    __fd_mask fds_bits[__FD_SETSIZE / __NFDBITS];
                # define __FDS_BITS(set) ((set)->fds_bits)
                #else
                    __fd_mask __fds_bits[__FD_SETSIZE / __NFDBITS];
                # define __FDS_BITS(set) ((set)->__fds_bits)
                #endif
                  } fd_set;
                
                ...
                
                __BEGIN_DECLS
                
                /* Check the first NFDS descriptors each in READFDS (if not NULL) for read
                   readiness, in WRITEFDS (if not NULL) for write readiness, and in EXCEPTFDS
                   (if not NULL) for exceptional conditions.  If TIMEOUT is not NULL, time out
                   after waiting the interval specified therein.  Returns the number of ready
                   descriptors, or -1 for errors.
                
                   This function is a cancellation point and therefore not marked with
                   __THROW.  */
                extern int select (int __nfds, fd_set *__restrict __readfds,
                                   fd_set *__restrict __writefds,
                                   fd_set *__restrict __exceptfds,
                                   struct timeval *__restrict __timeout);
                
                #ifdef __USE_XOPEN2K
                /* Same as above only that the TIMEOUT value is given with higher
                   resolution and a sigmask which is been set temporarily.  This version
                   should be used.
                
                   This function is a cancellation point and therefore not marked with
                   __THROW.  */
                extern int pselect (int __nfds, fd_set *__restrict __readfds,
                                    fd_set *__restrict __writefds,
                                    fd_set *__restrict __exceptfds,
                                    const struct timespec *__restrict __timeout,
                                    const __sigset_t *__restrict __sigmask);
                #endif
                
                __END_DECLS
                Sieht so aus als ob pselect nur unter bestimmten Bedingungen zur Verfügung stehen würde.

                Kommentar


                  #9
                  in der sys/poll.h steht auch was von ppoll. Allerdings hinter einem
                  #ifdef __USE_GNU

                  Kommentar


                    #10
                    hi,

                    kannst du mal den aktuellen commit testen?.

                    https://github.com/yuhu-/ebusd/commi...288ca75894387f

                    Kommentar


                      #11
                      Hi,

                      jetzt scheint er schon weiter zu kommen, bleibt aber in logger.cpp 'log2' hängen.

                      Code:
                      mipsel-linux-g++ -fpic -Wall -Wextra -I../../src/lib/utils -I../../src/lib/ebus -g -O2   -o ebusd busloop.o network.o baseloop.o ebusd.o ../../src/lib/utils/libutils.a ../../src/lib/ebus/libebus.a -lpthread 
                      ../../src/lib/utils/libutils.a(logger.o): In function `LogConsole::write(LogMessage const&) const':
                      /home/stefan/ebusd/ebusd-commit-20141121/ebusd/src/lib/utils/logger.cpp:123: undefined reference to `log2'
                      /home/stefan/ebusd/ebusd-commit-20141121/ebusd/src/lib/utils/logger.cpp:123: undefined reference to `log2'
                      ../../src/lib/utils/libutils.a(logger.o): In function `LogFile::write(LogMessage const&) const':
                      /home/stefan/ebusd/ebusd-commit-20141121/ebusd/src/lib/utils/logger.cpp:136: undefined reference to `log2'
                      /home/stefan/ebusd/ebusd-commit-20141121/ebusd/src/lib/utils/logger.cpp:136: undefined reference to `log2'
                      collect2: ld returned 1 exit status
                      Makefile:356: recipe for target 'ebusd' failed
                      make[2]: *** [ebusd] Error 1
                      make[2]: Leaving directory '/home/stefan/ebusd/ebusd-commit-20141121/ebusd/src/ebusd'
                      Makefile:350: recipe for target 'all-recursive' failed
                      make[1]: *** [all-recursive] Error 1
                      make[1]: Leaving directory '/home/stefan/ebusd/ebusd-commit-20141121/ebusd'
                      Makefile:290: recipe for target 'all' failed
                      make: *** [all] Error 2

                      Kommentar


                        #12
                        ok,

                        im Verzeichnis ebusd mit "patch -p0 < patchfile" anwenden.
                        Angehängte Dateien

                        Kommentar


                          #13
                          Hi,

                          Danke soweit für deine Hilfe! Das make läuft jetzt durch und das Binary sieht ganz gut aus. Beim Ausführen auf der Fritzbox bekomme ich aber noch einen Fehler. Ich versuche es mal mit static libs.

                          Code:
                          ./ebusd: can't load library 'libstdc++.so.6'

                          Kommentar


                            #14
                            Ist 'libstdc++.so.6' auf der Fritzbox überhaupt verfügbar ?

                            Kommentar


                              #15
                              Hmm, da bin ich mir nicht sicher. Auf der Box selbst unter /usr/lib finde ich nichts. Aber in der Freetz-Toolchain unter .../toolchain/target/lib/ gibts da was. Hast du da noch ein paar Gedanken dazu? Meine Vorstellung wäre die Libs statisch einzubinden. Allerdings fehlen mir da noch etwas die Erfahrungen.

                              Code:
                              .../toolchain/target/lib$ ls -al | grep -i c++
                              -rw-r--r--  1 stefan stefan 6807936 Nov 17 12:11 libstdc++.a
                              -rwxr-xr-x  1 stefan stefan    1079 Nov 17 12:11 libstdc++.la
                              lrwxrwxrwx  1 stefan stefan      19 Nov 17 12:11 libstdc++.so -> libstdc++.so.6.0.16
                              lrwxrwxrwx  1 stefan stefan      19 Nov 17 12:11 libstdc++.so.6 -> libstdc++.so.6.0.16
                              -rwxr-xr-x  1 stefan stefan  825852 Nov 17 12:11 libstdc++.so.6.0.16
                              -rw-r--r--  1 stefan stefan  538680 Nov 17 12:11 libsupc++.a
                              -rwxr-xr-x  1 stefan stefan    1013 Nov 17 12:11 libsupc++.la
                              -rwxr-xr-x  1 stefan stefan  166184 Nov 17 12:11 libuClibc++-0.2.3.so
                              -rw-r--r--  1 stefan stefan  663354 Nov 17 12:11 libuClibc++.a
                              lrwxrwxrwx  1 stefan stefan      16 Nov 17 12:11 libuClibc++.so -> libuClibc++.so.0
                              lrwxrwxrwx  1 stefan stefan      20 Nov 17 12:11 libuClibc++.so.0 -> libuClibc++-0.2.3.so

                              Kommentar

                              Lädt...
                              X