eigene Programme und Libs in ds-mod einfügen

wetzstein513

Mitglied
Mitglied seit
29 Jan 2007
Beiträge
515
Punkte für Reaktionen
0
Punkte
0
Hallo erstmal,

Nach einem Hinweis nun als neues Thema:
Ich habe ich schon ein paar Tage erfolglos nahezu das gesamte Forum und den Wiki durchstöbert aber irgendwie nichts gefunden. Ich bin zwar nicht ganz neu in Linux, aber mit diesem Cross-Compiling habe noch nicht gearbeitet.

Daher nun meine Frage direkt an euch: Wie ist es möglich eigene noch nicht kompilierte Libraries einzubinden? Ich habe dazu in der /ds.../make/libs die Config.in und Makefile.in erweiter sowie eine libftdi.mk-Datei erstellt, aber wenn ich es unter make menuconfig angewählt habe, nimmt er es danach nicht mit und ignoriert es einfach.
Daher meine Frage: Gibt es irgendwo noch einen globalen Schalter wo man etwas ändern muss? Oder findet sich hier irgendwo noch ein Posting wo es für die neuen Versionen erklärt ist. (Nur als Randnotiz: liftdi-0.7)
Zu eigene Programme integrieren: Da findet sich etwas im Wiki, kann ich aber erst testen wenn ich die lib intgeriert habe.

Meine mk-Datei habe ich mal als txt angehangen. Ich vermute, das sie noch nicht ganz ausgereift ist, aber wenigstens der upload müsste starten und die Installation

Die Erweiterung der Config.in:
snipp----->

config DS_LIB_libftdi
bool "libftdi.so"
default n
help

----> snipp

und die Makefile.in:
snipp----->

ifeq ($(strip $(DS_LIB_libftdi)),y)
LIBS+=libftdi
endif

----> snipp

Soweit bisher. Enden soll das ganze dann damit, das lcdproc auf der Fritzbox läuft, welches libftdi benötigt.
 

Anhänge

  • libftdi_mk.txt
    2.4 KB · Aufrufe: 42
Sieht schon mal gut aus. Deine libftdi.mk hast Du im Verzeichnis make/libs/ abgelegt?

Was passiert bei
Code:
make ftdi-source
und
make ftdi-precompiled
 
Danke, das du dich der Sache annimmst, habe den anderen Artikel auch gelesen, hat mir jetzt aber keinen Ansatz gebracht.

Gleich vorweg: Wenn ich es wie im Wiki beschrieben, versuche für die Fritzbox zu kompilieren macht er den ./configure -build=i386-linux-gnu --targ...
Aufruf problemlos. Allerdings gebe ich jetzt make ein. Nun weiss ich nicht ob das schon falsch ist, er bricht jedenfalls mit:
>/usr/local/lib/libusb.so: File in wrong format < ab.
Allerdings liegt diese Datei lokal auf meinem Rechner?! Ich vermute also das er gar nicht für die Fritzbox compiliert.

Und nun zu deiner Frage: Er startet (juhu) aber bricht dann mit:
Code:
tools/ds_patch: line 67: make/libs/patches/*.ftdi.patches: Datei oder Verzeichnis nicht gefunden
ERROR: modpatch: Error in patch-file make/libs/patches/*.ftdi.patch
make: *** [source/libftdi-0.7/.unpacked] Fehler 2

EDIT: Ich muss die mk-Datei nochmal überarbeiten... Aber zum oberen Punkt hätte ich trotzdem gern einen Hinweis.

Sorry, mein Rechner zum schreiben ist nicht der auf dem das Linux läuft...
 
Zuletzt bearbeitet:
Danke RalfFriedl! Warum auch immer kann es jetzt cross-compilieren... Bin also auf dem Weg....
 
Hallo,
für smusbutil benötige ich auch die libftdi. Kann ich deine Angaben aus Post #1 nutzen um die libftdi einzubinden? Falls du eine verbesserte Version hast, sei doch so nett und häng sie hier an.
 
Code:
FTDI_VERSION:=0.7
FTDI_LIB_VERSION:=0.7.0
FTDI_SOURCE:=libftdi-$(FTDI_VERSION).tar.gz
FTDI_SITE:=http://www.intra2net.com/de/produkte/opensource/ftdi/TGZ
FTDI_MAKE_DIR:=$(MAKE_DIR)/libs
FTDI_DIR:=$(SOURCE_DIR)/libftdi-$(FTDI_VERSION)
FTDI_BINARY:=$(FTDI_DIR)/.libs/libFTDI.so.$(FTDI_LIB_VERSION)
FTDI_STAGING_BINARY:=$(TARGET_TOOLCHAIN_STAGING_DIR)/usr/lib/libftdi.so.$(FTDI_LIB_VERSION)
FTDI_TARGET_DIR:=root/usr/lib
FTDI_TARGET_BINARY:=$(FTDI_TARGET_DIR)/libftdi.so.$(FTDI_LIB_VERSION)
 
$(DL_DIR)/$(FTDI_SOURCE): | $(DL_DIR)
    wget -P $(DL_DIR) $(FTDI_SITE)/$(FTDI_SOURCE)
 
$(FTDI_DIR)/.unpacked: $(DL_DIR)/$(FTDI_SOURCE)
    tar -C $(SOURCE_DIR) $(VERBOSE) -xzf $(DL_DIR)/$(FTDI_SOURCE)
    #for i in $(FTDI_MAKE_DIR)/patches/*.ftdi.patch; do \
    #    $(PATCH_TOOL) $(FTDI_DIR) $$i; \
    #done
    touch $@
 
$(FTDI_DIR)/.configured: $(FTDI_DIR)/.unpacked
    ( cd $(FTDI_DIR); rm -f config.cache; \
        $(TARGET_CONFIGURE_OPTS) \
        PATH="$(TARGET_TOOLCHAIN_PATH)" \
        CFLAGS="$(TARGET_CFLAGS)" \
        CPPFLAGS="-I$(TARGET_TOOLCHAIN_STAGING_DIR)/usr/include" \
        LDFLAGS="-L$(TARGET_TOOLCHAIN_STAGING_DIR)/usr/lib" \
        ./configure \
        --target=$(GNU_TARGET_NAME) \
        --host=$(GNU_TARGET_NAME) \
        --build=$(GNU_HOST_NAME) \
        --program-prefix="" \
        --program-suffix="" \
        --prefix=/usr \
        --exec-prefix=/usr \
        --bindir=/usr/bin \
        --datadir=/usr/share \
        --includedir=/usr/include \
        --infodir=/usr/share/info \
        --libdir=/usr/lib \
        --libexecdir=/usr/lib \
        --localstatedir=/var \
        --mandir=/usr/share/man \
        --sbindir=/usr/sbin \
        --sysconfdir=/etc \
        $(DISABLE_NLS) \
        $(DISABLE_LARGEFILE) \
        --enable-shared \
        --enable-static \
    );
    touch $@
 
$(FTDI_BINARY): $(FTDI_DIR)/.configured
    PATH=$(TARGET_TOOLCHAIN_PATH) \
       $(MAKE) -C $(FTDI_DIR)  all
 
$(FTDI_STAGING_BINARY): $(FTDI_BINARY)
    PATH=$(TARGET_TOOLCHAIN_PATH) \
        $(MAKE) -C $(FTDI_DIR) \
        DESTDIR="$(TARGET_TOOLCHAIN_STAGING_DIR)" \
        install
 
$(FTDI_TARGET_BINARY): $(FTDI_STAGING_BINARY)
    cp -a $(TARGET_TOOLCHAIN_STAGING_DIR)/usr/lib/libftdi*.so* $(FTDI_TARGET_DIR)/
    $(TARGET_STRIP) $@
 
ftdi: $(FTDI_STAGING_BINARY)
 
ftdi-precompiled: uclibc usb-precompiled ftdi $(FTDI_TARGET_BINARY)
 
ftdi-source: $(FTDI_DIR)/.unpacked
 
ftdi-clean:
    -$(MAKE) -C $(FTDI_DIR) clean
    rm -f $(TARGET_TOOLCHAIN_STAGING_DIR)/usr/lib/libftdi*
 
ftdi-uninstall:
    rm -f $(FTDI_TARGET_DIR)/libftdi*.so*
 
ftdi-dirclean:
    rm -rf $(FTDI_DIR)
Die Erweiterung der Config.in:
snipp----->

config DS_LIB_libftdi
bool "libftdi.so"
select DS_LIB_libusb
default n
help

----> snipp

und die Makefile.in:
snipp----->

ifeq ($(strip $(DS_LIB_libftdi)),y)
LIBS+=ftdi
endif

----> snipp
make ftdi-precompiled

MfG Oliver
 
Hallo,
ich denke ich hab es endlich hinbekommen die libftdi.so zu bauen. Danke!
Wenn ich aber ein davon anhängiges Programm compilieren will, klapps nicht:
bash-3.1$ mipsel-linux-gcc -lftdi -o smusbutil smusbutil.c
/home/fbox/7171_ds26-15.2/toolchain/build/gcc-4.2.0-uClibc-0.9.28/mipsel-linux-uclibc/bin/../lib/gcc/mipsel-linux-uclibc/4.2.0/../../../../mipsel-linux-uclibc/lib/libftdi.so: undefined reference to `usb_bulk_write'
/home/fbox/7171_ds26-15.2/toolchain/build/gcc-4.2.0-uClibc-0.9.28/mipsel-linux-uclibc/bin/../lib/gcc/mipsel-linux-uclibc/4.2.0/../../../../mipsel-linux-uclibc/lib/libftdi.so: undefined reference to `usb_find_busses'
/home/fbox/7171_ds26-15.2/toolchain/build/gcc-4.2.0-uClibc-0.9.28/mipsel-linux-uclibc/bin/../lib/gcc/mipsel-linux-uclibc/4.2.0/../../../../mipsel-linux-uclibc/lib/libftdi.so: undefined reference to `usb_init'
/home/fbox/7171_ds26-15.2/toolchain/build/gcc-4.2.0-uClibc-0.9.28/mipsel-linux-uclibc/bin/../lib/gcc/mipsel-linux-uclibc/4.2.0/../../../../mipsel-linux-uclibc/lib/libftdi.so: undefined reference to `usb_find_devices'
/home/fbox/7171_ds26-15.2/toolchain/build/gcc-4.2.0-uClibc-0.9.28/mipsel-linux-uclibc/bin/../lib/gcc/mipsel-linux-uclibc/4.2.0/../../../../mipsel-linux-uclibc/lib/libftdi.so: undefined reference to `usb_open'
/home/fbox/7171_ds26-15.2/toolchain/build/gcc-4.2.0-uClibc-0.9.28/mipsel-linux-uclibc/bin/../lib/gcc/mipsel-linux-uclibc/4.2.0/../../../../mipsel-linux-uclibc/lib/libftdi.so: undefined reference to `usb_control_msg'
/home/fbox/7171_ds26-15.2/toolchain/build/gcc-4.2.0-uClibc-0.9.28/mipsel-linux-uclibc/bin/../lib/gcc/mipsel-linux-uclibc/4.2.0/../../../../mipsel-linux-uclibc/lib/libftdi.so: undefined reference to `usb_busses'
/home/fbox/7171_ds26-15.2/toolchain/build/gcc-4.2.0-uClibc-0.9.28/mipsel-linux-uclibc/bin/../lib/gcc/mipsel-linux-uclibc/4.2.0/../../../../mipsel-linux-uclibc/lib/libftdi.so: undefined reference to `usb_get_string_simple'
/home/fbox/7171_ds26-15.2/toolchain/build/gcc-4.2.0-uClibc-0.9.28/mipsel-linux-uclibc/bin/../lib/gcc/mipsel-linux-uclibc/4.2.0/../../../../mipsel-linux-uclibc/lib/libftdi.so: undefined reference to `usb_release_interface'
/home/fbox/7171_ds26-15.2/toolchain/build/gcc-4.2.0-uClibc-0.9.28/mipsel-linux-uclibc/bin/../lib/gcc/mipsel-linux-uclibc/4.2.0/../../../../mipsel-linux-uclibc/lib/libftdi.so: undefined reference to `usb_close'
/home/fbox/7171_ds26-15.2/toolchain/build/gcc-4.2.0-uClibc-0.9.28/mipsel-linux-uclibc/bin/../lib/gcc/mipsel-linux-uclibc/4.2.0/../../../../mipsel-linux-uclibc/lib/libftdi.so: undefined reference to `usb_bulk_read'
/home/fbox/7171_ds26-15.2/toolchain/build/gcc-4.2.0-uClibc-0.9.28/mipsel-linux-uclibc/bin/../lib/gcc/mipsel-linux-uclibc/4.2.0/../../../../mipsel-linux-uclibc/lib/libftdi.so: undefined reference to `usb_claim_interface'
Hat jemand ne Idee woran es liegen könnte?
 
libftdi braucht libusb. Mach mal noch ein "-lusb" dazu.

MfG Oliver
 
Danke, habs hinbekommen!
Für alle die nachbasteln: Der Eintrag in die Makefile.in muss unter den libusb Eintrag!

kriegaex: Zwei Beiträge zusammengefügt. Manche lernen es nie...

Edit: Die Library läuft hier ohne Probleme. Nur eines stört mich noch ein bisschen: bei jedem "make" wird die libftdi neu erstellt. Ich hab mir die .mk Datei angeschaut und mit anderen verglichen. Das einzigste was ich gefunden habe ist, dass "FTDI" in Zeile 7 gross geschrieben ist. Dies hat aber leider nichts gebracht.
Wieso wird die denn immer neu erstellt?
 
Zuletzt bearbeitet von einem Moderator:
Ich kann dergleichen nicht feststellen. Wenn ftdi-precompiled durchgelaufen ist, wird es bei mir nicht neu erstellt. Vermutlich hast Du an den Makefiles in einer Art und Weise gespielt, die das verursacht.

P.S.: Auch Du bitte nicht zweimal hintereinander posten, sondern den vorigen Eintrag ändern!
 
Die Makefiles sind nicht in ds26-15.2. In dem von mir geposteten Makefile war der Fehler auch drin.

MfG Oliver
 
Auch bei mir keine Auffälligkeiten.
Gibt es irgendwo Probleme mit dem Änderungsdatum von Dateien?
Gibt es einen Meldung, daß das Änderungsdatum einer Datei in der Zukunft liegt?
 
Oliver, Deine Antwort verstehe ich nicht ganz. Klar, in 15.2 war FTDI noch nicht drin, aber in unserer Hauptlinie ist es ja inzwischen drin. Hast Du hier etwas Abweichendes gepostet? Falls ja, wie lautet der Fix?
 
Hallo,

so nun bin ich wieder zurück und kann mich dem ganzen wieder annehmen.

Hatte auch den Fehler mit dem Datum in der Zukunft, allerdings nutze ich gerade FrBoLi und habe die Datei außerhalb erstellt und dann per Freigabe hineinkopiert. Wenn ich sie mit VI nocheinmal speichere ist alles ok!

Habe allerdings das Problem, das ich lcdproc nicht erstellen kann. Wenn ich es wie im wiki beschrieben mit:
Code:
./configure --build=i386-linux-gnu --target=mipsel-linux --host=mipsel-linux

ausführe. (Vorher natürlich Pfad angepasst) Sagt er, er kann libftdi nicht finden. Selbiges Problem hatte ich auch in meinem Basissystem. Dort habe ich dann die libftdi.so in den /lib ordner kopiert und dann ging es. Hat hier einer eine Idee? Danke... Bis hierher schon ein großes Danke für eure Hilfe. Top Forum...
 
Keine Ahnung, was lcdproc nun wieder ist, aber das ist prinzipiell auch egal. Sieh zu, daß die Libs ins Toolchain-Staging-Directory kopiert werden, was Olivers Makefile ja für FTDI schon tut, und daß abhängige Builds sie dort ($(TARGET_TOOLCHAIN_STAGING_DIR)/usr/lib/libftdi*) suchen.

Aufgelöst ist TARGET_TOOLCHAIN_STAGING_DIR übrigens toolchain/target bzw. "ganz" aufgelöst sowas wie toolchain/build/gcc-4.2.1-uClibc-0.9.28/mipsel-linux-uclibc.
 
@wetzstein513: Die libftdi ist wie am Anfang dieses Threads beschrieben ins ds-mod eingebunden und compiliert? Dann muss ja nur noch der Parameter "-l" wie in Post #7 zu sehen mit "-lusb -lftdi" gesetzt werden

zum compilieren von libftdi: "make ftdi-precompiled" habe ich nicht benutzt! Ist dies zwingend erforderlich? Die anderen Libs muss man ja auch nicht extra mir -precompiled erstellen. Ich werde aber Morgen mal testen, das Neucompilieren dauert bei mit immer so lange..
Ein Problem mit der Zeit ist auszuschliessen, da ich Fedora Core 6 benutzte welches immer die aktuelle Zeit hat. Dateien kopiere ich auch nicht hin und her.
Ich benutze die in Post #6 gelisteten Dateien zum erstellen der ftdi Dateien. Kann man auf die "Hauptlinie" zugreifen und falls ja wie?
 
Unser SVN-Repository ist nicht aus Bosheit, sondern aus juristischen und organisatorischen Gründen, die ich bereits mehrfach im Forum zu erläutern versucht habe, zurzeit leider nicht öffentlich, auch wenn es mir selbst andersherum im Grunde lieber wäre.

Zum Precompiled: Schau Dir doch einfach im oben geposteten Makefile die beiden Zeilen an:
Code:
ftdi: $(FTDI_STAGING_BINARY)
 
ftdi-precompiled: uclibc usb-precompiled ftdi $(FTDI_TARGET_BINARY)

D.h., wenn Du ftdi-precompiled aufrufst, wird auch dafür gesorgt, daß uClibc und USB als Voraussetzungen aktuell sind.
 
Hi.
Ich hätte mir gestern auch mehr Zeit nehmen können, den Bus hab ich trotzdem verpasst. :-(
Code:
--- trunk/make/libs/ftdi.mk	2007/08/15 21:30:36	986
+++ trunk/make/libs/ftdi.mk	2007/08/16 09:01:38	988
@@ -4,7 +4,7 @@
 FTDI_SITE:=[URL="http://www.intra2net.com/de/produkte/opensource/ftdi/TGZ"]http://www.intra2net.com/de/produkte/opensource/ftdi/TGZ[/URL]
 FTDI_MAKE_DIR:=$(MAKE_DIR)/libs
 FTDI_DIR:=$(SOURCE_DIR)/libftdi-$(FTDI_VERSION)
-FTDI_BINARY:=$(FTDI_DIR)/.libs/libFTDI.so.$(FTDI_LIB_VERSION)
+FTDI_BINARY:=$(FTDI_DIR)/src/.libs/libftdi.so.$(FTDI_LIB_VERSION)
FTDI_STAGING_BINARY:=$(TARGET_TOOLCHAIN_STAGING_DIR)/usr/lib/libftdi.so.$(FTDI_LIB_VERSION)
FTDI_TARGET_DIR:=root/usr/lib FTDI_TARGET_BINARY:=$(FTDI_TARGET_DIR)/libftdi.so.$(FTDI_LIB_VERSION)
@wetzstein513
Du musst "$(TARGET_TOOLCHAIN_STAGING_DIR)/usr/include" zu deinem Include-Pfad hinzufügen, wenn include kein Link auf usr/include ist.
Ansonsten musst du in config.log nachschauen wo das Problem liegt.

MfG Oliver
 
Hi ,

sorry ich weiss das Thema hier ist Uralt , aber ich möchte hierzu nicht extra ein neues Thema machen.
Ich versuche hier smusbutil als Paket zu bauen und hab da so meine Probleme
Die sourcen sind ja da über den alten link aus den letzten postings hier

smsubuti.mk
Code:
$(call PKG_INIT_BIN,0.1)
$(PKG)_SOURCE:=$(pkg)-$($(PKG)_VERSION).tar.bz2
$(PKG)_SITE:=http://www.wbstore.dk/files 
$(PKG)_BINARY:=$($(PKG)_DIR)/
$(PKG)_TARGET_BINARY:=$($(PKG)_DEST_DIR)/usr/bin/smusbutil

$(PKG)_DEPENDS_ON := libusb
$(PKG)_DEPENDS_ON := libftdi

$(PKG_SOURCE_DOWNLOAD)
$(PKG_UNPACKED)
$(PKG_CONFIGURED_NOP)

$($(PKG)_BINARY): $($(PKG)_DIR)/.configured
	$(SUBMAKE) -C $(SMUSBUTIL_DIR) \
		CC="$(TARGET_CC)" \
	CFLAGS="$(TARGET_CFLAGS)"

$($(PKG)_TARGET_BINARY): $($(PKG)_BINARY)
	$(INSTALL_BINARY)

$(pkg):

$(pkg)-precompiled: $($(PKG)_TARGET_BINARY)$($(PKG)_TARGET_LIB)

$(pkg)-clean:
	-$(SUBMAKE) -C $(SMUSBUTIL_DIR) clean
	$(RM) $(SMUSBUTIL_DIR)/.configured

$(pkg)-uninstall:
	$(RM) $(SMUSBUTIL_TARGET_BINARY)

$(PKG_FINISH)

Config.in
Code:
config FREETZ_PACKAGE_SMUSBUTIL
	bool "Smusbutil 0.1 (binary only)"
        bool "libftdi.so"
	default n
	help

makefile.in
Code:
ifeq ($(strip $(FREETZ_PACKAGE_SMUSBUTIL)),y)
PACKAGES+=smusbutil
endif


make smusbutil-precompiled bricht ab
Code:
:~/freetz-trunk$ make smusbutil-precompiled
make: Zirkuläre Datei libftdi-precompiled--int <- libftdi-precompiled Abhängigkeit wird nicht verwendet.
mkdir -p packages/target-mipsel_uClibc-0.9.31.1/smusbutil-0.1/root
if test -d make/smusbutil/files; then tar -c -C make/smusbutil/files --exclude=.svn . | tar -x -C packages/target-mipsel_uClibc-0.9.31.1/smusbutil-0.1 ; fi
---> package/smusbutil: preparing... tools/tar -C source/target-mipsel_uClibc-0.9.31.1  -xjf dl/smusbutil-0.1.tar.bz2
set -e; shopt -s nullglob; for i in make/smusbutil/patches/*.patch; do tools/freetz_patch source/target-mipsel_uClibc-0.9.31.1/smusbutil-0.1 $i; done
cmd() { PATH="/home/freetz-trunk/toolchain/build/mipsel_gcc-4.5.3_uClibc-0.9.31.1/mipsel-linux-uclibc/bin:/home/freetz-trunk/toolchain/build/mipsel_gcc-4.4.6/mipsel-unknown-linux-gnu/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" LD_RUN_PATH="/usr/lib/freetz" make -j2  "$@"  || { printf "\n\\033[33m%s\\033[m\n" "ERROR: Build failed.";  exit 1; } }; 	if [ -e source/.echo_item_start -a ! -e source/.echo_item_build ]; then echo -n "building... "; touch source/.echo_item_build; fi; cmd -C source/target-mipsel_uClibc-0.9.31.1/smusbutil-0.1 \
	
building... make[1]: Betrete Verzeichnis '/home/freetz-trunk/source/target-mipsel_uClibc-0.9.31.1/smusbutil-0.1'
gcc -lftdi -o smusbutil smusbutil.c
smusbutil.c:20:18: fatal error: ftdi.h: Datei oder Verzeichnis nicht gefunden
compilation terminated.
make[1]: *** [all] Fehler 1
make[1]: Verlasse Verzeichnis '/home/freetz-trunk/source/target-mipsel_uClibc-0.9.31.1/smusbutil-0.1'

ERROR: Build failed.
make: *** [source/target-mipsel_uClibc-0.9.31.1/smusbutil-0.1/] Fehler 1

Kann da vielleicht jemand helfen ?
Sowie ich das wohl sehe muß ich da irrgendwie nach ftdi.h verlinken bzw ftdi
Weiss jetzt aber nicht wie am besten ect ect.

Gruss
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.