Ankündigung

Einklappen
Keine Ankündigung bisher.

knxd auf OSX

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

    knxd auf OSX

    Hallo zusammen,

    habe mal wieder einen neuen Anlauf genommen und versucht knxd auf OSX zum Laufen zu bekommen (es gab schon ein paar Versuche). Habe hier seit 2008 eibd auf dem Mac laufen, aber irgendwie wird es Zeit mal auf den aktuellen Zug aufzuspringen. Nach ein wenig Grübeln und Basteln hab ich es nun endlich geschafft, knxd ist übersetzt und installiert. Nur Laufen will es noch nicht und da erhoffe ich mir hier etwas Hilfe, die Unterschiede zwischen eibd und knxd sind anscheinend doch durchaus vorhanden ...

    Mein größtes Problem ist aktuell dass knxd beim Start meldet, er hätte keinen entsprechenden driver:

    E00000090: [ 1:main] Server 'knxd_tcp' not found.
    E00000091: [ 1:main] Section 'A.tcp' has no known server nor driver.
    F00000109: [ 1:main] Error setting up the KNX router.

    Wie ihr seht versuche ich über IP eine Verbindung zum KNX IP Gateway aufzubauen.

    Das ist meine aktuelle INI Datei:

    [A.tcp]
    server = knxd_tcp
    systemd-ignore = true
    [B.ip]
    driver = ip
    multicast-address = 224.0.23.12
    port = 3671
    [main]
    addr = 0.0.1
    connections = A.tcp,B.ip

    Hat jemand eine Idee, wie ich weiter machen kann, oder wie ich an die driver kommen kann? Oder wo kann ich danach suchen?

    MfG Micha
    Zuletzt geändert von m-schmidt; 25.06.2020, 14:13.

    #2
    Mit welchen Optionen und mit welchem Compiler hast du das Tier kompiliert?
    DistKV, Home Assistant, 1wire, KNX, Python, Asterisk, SMD-Lötkolben

    Kommentar


      #3
      "knxd -l driver"

      Wenn da gar nix kommt, dann hat dein Linker es nicht geschafft, die C++-Initialisierungsroutinen beim Programmstart aufzurufen und/oder die betreffenden Objekte mal eben unzulässigerweise wegoptimiert.
      Die dafür verwendeten Makros sind leider etwas haarig.

      Andere Möglichkeit ist natürlich, dass der Kram nicht dazugelinkt wurde.
      Zuletzt geändert von Smurf; 25.06.2020, 14:35.
      DistKV, Home Assistant, 1wire, KNX, Python, Asterisk, SMD-Lötkolben

      Kommentar


        #4
        Das ist das makro in src/libserver/link.h (und das darauffolgende):

        Code:
        #define RDRIVER(_cls,_name) \
        static constexpr const char _cls##_name[] = #_name; \
        class _cls; \
        static AutoRegister<_cls,Driver,_cls##_name> _auto_D_##_name; \
        class _cls : public HWBusDriver
        Du kannst probieren, da jeweils "volatile " vor das "static AutoRegister" zu schreiben. Möglicherweise hilft das.
        DistKV, Home Assistant, 1wire, KNX, Python, Asterisk, SMD-Lötkolben

        Kommentar


          #5
          Ja knxd -l driver liefert leider nix, darüber hatte ich mich auch schon gewundert.

          Gebaut hab ich mit:

          ./configure --disable-systemd --disable-usb --enable-busmonitor --enable-eibnetip --enable-eibnetserver --enable-eibnetipserver

          Wegoptimierende Makros klingt nicht gut ... Dann ist mein Build wohl doch noch nicht wirklich erfolgreich gewesen.

          Wie finde ich den compiler raus? Hab das aktuellste Xcode drauf und dazu die command line tools. Ein gcc --version liefert mir:

          Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/4.2.1
          Apple clang version 11.0.3 (clang-1103.0.32.62)
          Target: x86_64-apple-darwin19.5.0
          Thread model: posix
          InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

          Kommentar


            #6
            PS, dir fehlt die -E-Option bzw. der "client-addrs = 0.0.2:4"-Eintrag in der main-Sektion. (Oder welche Adressen auch immer bei dir frei sind.)
            DistKV, Home Assistant, 1wire, KNX, Python, Asterisk, SMD-Lötkolben

            Kommentar


              #7
              "Apple clang". Tja, von wegen gcc. Ich befürchte da musst du jemanden fragen der sich mit dem Teil besser auskennt.

              Was passieren sollte: über dieses Makro wird ein statisches Objekt (dieses AutoRegister-Ding) angelegt, das ansonsten nicht verwendet wird und auch keinerlei Daten beinhaltet. Aber es hat eine Initialisierungsroutine, die den im Makro ebenfalls erwähnten Treiber in die Liste der knxd-Treiber einträgt.
              Zuletzt geändert von Smurf; 25.06.2020, 15:26.
              DistKV, Home Assistant, 1wire, KNX, Python, Asterisk, SMD-Lötkolben

              Kommentar


                #8
                Die Client-Adressen hab ich in der INI ergänzt. Danke für den Hinweis!

                Das volatile hilft leider nicht. Dabei fällt mir aber ein, vielleicht könnte es mit meiner Modifikation im Makefile zusammenhängen. Musste das --whole-archive und --no-whole-archive im server Makefile raus nehmen. Das wird wohl unter osx nicht unterstützt. Könnte das Problem damit zusammenhängen?

                Kommentar


                  #9
                  *Seufz* sag das doch gleich … klar ist das das Problem.
                  Es gibt für Apple bestimmt irgendeine andere Methode, um eine Library einzubinden, obwohl keines der darin enthaltenen Objekte referenziert wird.
                  DistKV, Home Assistant, 1wire, KNX, Python, Asterisk, SMD-Lötkolben

                  Kommentar


                    #10
                    https://stackoverflow.com/questions/...-a-dynamic-one
                    DistKV, Home Assistant, 1wire, KNX, Python, Asterisk, SMD-Lötkolben

                    Kommentar


                      #11
                      Zitat von Smurf Beitrag anzeigen
                      *Seufz* sag das doch gleich … klar ist das das Problem.
                      Ja sorry, dachte mir schon dass sowas jetzt kommt ... Hab leider auch erst dran gedacht, als du mich ins server src Verzeichnis geschickt hast.

                      Danke für den Lösungsansatz, probiere ich aus und melde mich wieder. Heute wird es aber wahrscheinlich nicht mehr.

                      Kommentar


                        #12
                        Jetzt hab ich es doch noch geschafft und year, es funzt!

                        Sehr cool. Danke für die schnelle Hilfe! Mal schauen ob ich damit weiter komme und den eibd hinter mir lassen kann.

                        Kommentar


                          #13
                          Fein. Schick mir mal einen Patch oder so damit ich das irgendwie einbauen kann.
                          DistKV, Home Assistant, 1wire, KNX, Python, Asterisk, SMD-Lötkolben

                          Kommentar


                            #14
                            Hier die Änderung. Hab nicht wirklich Plan von Makefiles, deswegen weiß ich gerade nicht wie ich da einen switch für OSX rein bekomme. Der Rest lief dann out of the box, allerdings ohne USB.


                            Code:
                            diff --git a/src/server/Makefile.am b/src/server/Makefile.am
                            
                            index c51f98e..2a4a488 100644
                            
                            --- a/src/server/Makefile.am
                            
                            +++ b/src/server/Makefile.am
                            
                            @@ -3,7 +3,7 @@ libexec_PROGRAMS = knxd_args
                            
                            
                            
                            AM_CPPFLAGS=-I$(top_srcdir)/src/libserver -I$(top_srcdir)/src/backend -I$(top_srcdir)/src/common -I$(top_srcdir)/src/usb $(LIBUSB_CFLAGS) $(SYSTEMD_CFLAGS) -Wno-missing-field-initializers
                            
                            knxd_CPPFLAGS=$(AM_CPPFLAGS) -DLIBEXECDIR=""$(libexecdir)""
                            
                            -knxd_LDFLAGS=-Wl,--whole-archive,../backend/libbackend.a,../libserver/libserver.a,--no-whole-archive
                            
                            +knxd_LDFLAGS=-Wl,-all_load,../backend/libbackend.a,../libserver/libserver.a,-noall_load
                            
                            knxd_LDADD=../libserver/libeibstack.a ../common/libcommon.a ../usb/libusb.a $(LIBUSB_LIBS) $(SYSTEMD_LIBS) $(EV_LIBS)
                            
                            knxd_DEPENDENCIES=../libserver/libserver.a ../backend/libbackend.a ../libserver/libeibstack.a ../common/libcommon.a ../usb/libusb.a
                            
                            knxd_args_DEPENDENCIES=../common/libcommon.a

                            Kommentar


                              #15
                              Danke. Guckst du mal ob der aktuelle master das tut was du willst?
                              DistKV, Home Assistant, 1wire, KNX, Python, Asterisk, SMD-Lötkolben

                              Kommentar

                              Lädt...
                              X