Probleme mit Makefiles für eine solarlogger

lord-of-linux

Mitglied
Mitglied seit
3 Dez 2005
Beiträge
568
Punkte für Reaktionen
1
Punkte
0
Hallo,

die folgenden Fragen beziehen sich auf die unter http://nslu2.sha.rieger/svn/solarlog/other-projects/fritzbox_ds-mod/makefiles/ verfügbaren Makefiles.

1. Ich bekomme beim Kompilieren folgende Fehlermeldung, wenn ich in den Compiler Options "Number of jobs to run simultaneously" auf 3 gestellt habe:
Code:
...
(CC)    ../../driver/ip_generic.c
(CC)    ../../shell/CommonShellUIMain.c
(LINK)  libyasdi.so
(LINK)  libyasdimaster.so
(LINK)  libyasdi_drv_ip.so
(LINK)  yasdishell
./libyasdi.so: file not recognized: File format not recognized
collect2: ld returned 1 exit status
make[1]: *** [libyasdimaster.so] Fehler 1
make[1]: *** Warte auf noch nicht beendete Prozesse...
Danach hängt er, was wahrscheinlich an dem abgebrochenen Linken liegt.

Das heißt, hier scheint der Build-Prozess sein Problem damit zu haben, dass ich 3 gleichzeitige Jobs eingestellt habe. Wie kann ich dieses Problem sauber und einfach lösen?

2. Und meine zweite Frage bezieht sich auch auf den Bau von Bibliotheken, allerdings mehr im allgemeinen Sinn.
Ich habe zum Erstellen der Makefiles für die Bibliotheken einfach vorhandene Makefiles kopiert und angepasst. Eine Sache ist mir aber nicht klar. Die beiden Bibliothenken yasdi und ftplib kompilieren ohne Probleme (wenn man von dem oben absieht). Sie landen in der target-toolchain und unter root/usr/lib, allerdings werden sie beim Bau des Mods einfach ignoriert. Warum ignoriert der make beim Bauen der Firmware scheinbar das Verzeichnis root? Oder hab ich einen Fehler im Makefile und die Libs sollen wo anders landen?
Hinweis: Ich habe sie auch nach editieren gewisser Config.in's auch per menuconfig explizit gewählt.

3. An die ds-mod-Hauptentwickler:
Könntet ihr euch vorstellen, die Makefiles für die 2 Libs und den solar-logger mit in den offizielle ds-mod aufzunehmen? (Natürlich erst wenn die oben genannten Probleme und das Problem mit der /etc/services gelöst sind)
Mehr Infos, allerdings noch nicht sehr viele, zu dem solar-logger findet ihr unter http://solarlog.ingmars-bastelecke.net/.
 
Schnelle Antwort zu Frage 1: siehe Problemliste im Release-Thread. Edit: Das ist kein Multi-Job- sondern ein Crosscompiling-Problem.
 
1. Schau mal, dass du die Ausgaben ausführlicher bekommst. V=1 oder V=99 hilft manchmal. Eventuell wird nicht der Cross-Linker genommen.

2. Dateien unter root/lib und root/usr/lib werden nicht in die Firmware kopiert. Sie werden mit der Config verglichen und nur die ausgewählten Libs werden kopiert. Das ganze findest du in fwmod unter "copying libs".

MfG Oliver
 
kriegaex schrieb:
Schnelle Antwort zu Frage 1: siehe Problemliste im Release-Thread. Edit: Das ist kein Multi-Job- sondern ein Crosscompiling-Problem.
olistudent schrieb:
1. Schau mal, dass du die Ausgaben ausführlicher bekommst. V=1 oder V=99 hilft manchmal. Eventuell wird nicht der Cross-Linker genommen.
Hier ist die Ausgabe mit V=99, die Pfade scheinen zu stimmen.
Code:
(CC) ../../driver/ip_generic.c
(CC)    ../../shell/CommonShellUIMain.c
(LINK)  libyasdi.so
(LINK)  libyasdimaster.so
/home/ingmar/7170-ds26-15.2-sollog/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/bin/ld: cannot find -lyasdi
collect2: ld returned 1 exit status
make[1]: *** [libyasdimaster.so] Fehler 1
make[1]: *** Warte auf noch nicht beendete Prozesse...
make[1]: Verlasse Verzeichnis '/home/ingmar/7170-ds26-15.2-sollog/source/yasdi-1.7.2/projects/linuxlib'
make: *** [source/yasdi-1.7.2/libyasdi.so] Fehler 2
Was mich besonders verwirrt: Der Fehler tritt nur bei 3 bis 4 von fünf Versuchen auf. Und das wirklich nur, wenn ich 3 gleichzeitige Jobs eingestellt habe. Wenn ich auf einen zurückstelle, funktioniert es ohne Probleme.


olistudent schrieb:
2. Dateien unter root/lib und root/usr/lib werden nicht in die Firmware kopiert. Sie werden mit der Config verglichen und nur die ausgewählten Libs werden kopiert. Das ganze findest du in fwmod unter "copying libs".
OK, danke. Das funktioniert nun auch alles soweit.


Und was sagt ihr zu Frage 3?
 
Wenn das wirklich nicht mit mehreren Jobs funktioniert, dann ist das wohl ein "Fehler" im Makefile.

zu 3) Wenn du das alles fertig machst und Alexander und ich der Meinung sind, dass das Thema auch noch andere Interessieren könnte, dann nehmen wir das auch auf.

MfG Oliver
 
Über die ftplib hatten wir ja schon geredet: Es gibt kein Paket, das sie benötigt außer Deinem doch recht exotischen Solar-Modul. Und das kommt nicht in den Mod, wenn es nach mir geht, weil ich es nicht ständig bauen und testen will. Zu exotisch, ein typisches Add-On. Für die andere Bibliothek gilt das Gleiche wie für ftplib: Solange kein anderes Paket bzw. häufiger genutztes Add-On sie benötigt, tendiere ich zum Weglassen.
 
olistudent schrieb:
Wenn das wirklich nicht mit mehreren Jobs funktioniert, dann ist das wohl ein "Fehler" im Makefile.
Der Fehler tritt bei mir wirklich nur mit mehreren Jobs auf und wie geschrieben auch nicht immer. Das gleiche tritt auch auf wenn ich beim nativen x86-make -j3 anhänge.
Wenn ich ein Job verwende, dann läuft das ganze durch und lässt sich sogar auf der Box startet. (Wenn auch das Progrämmchen noch nicht funktioniert, aber das hängt hoffentlich nicht damit zusammen)
Gibt es eine Möglichkeit im makefile zu definieren, dass hier auf etwaige noch laufende Jobs gewartet werden soll? Dann könnte ich das noch patchen.

olistudent schrieb:
zu 3) Wenn du das alles fertig machst und Alexander und ich der Meinung sind, dass das Thema auch noch andere Interessieren könnte, dann nehmen wir das auch auf.
OK, super.


Noch ein Frage: Ich habe mein ds-mod-Verzeichnis um meine Makefiles ergänzt und die Config.in's gepatcht. (Alle Dateien, samt einem Script zum Patchen der Config.in's: http://nslu2.sha.rieger/svn/solarlog/other-projects/fritzbox_ds-mod/makefiles/)
Wenn ich nun die Firmware per make baue, landet alles am richtigen Fleck, allerdings steht in der /etc/static.pkg "solar-logger-pre_0.2.0" drin, müsste aber "solar-logger" heißen. Wo muss ich denn diese Bezeichnung definieren?
 
lord-of-linux schrieb:
Was mich besonders verwirrt: Der Fehler tritt nur bei 3 bis 4 von fünf Versuchen auf. Und das wirklich nur, wenn ich 3 gleichzeitige Jobs eingestellt habe. Wenn ich auf einen zurückstelle, funktioniert es ohne Probleme.
Das muß Dich nicht weiter verwirren. Es kommt öfters vor, daß Makefiles nicht alle Abhängigkeiten explizit beschreiben und deshalb mit mehreren Jobs nicht richtig laufen.
Und was sagt ihr zu Frage 3?
Nicht daß es an mir läge, da etwas zu entscheiden, aber wie wäre es, wenn Du kurz schreibst, was das überhaupt ist und warum es sinnvoll wäre, es mit aufzunehmen?
 
Wir haben außer $(MAKE) auch $(MAKE1) für störrische Pakete, die dann in einem Job gebaut werden entgegen der allgemeinen Voreinstellung. Verwende das doch mal.
 
kriegaex schrieb:
Über die ftplib hatten wir ja schon geredet: Es gibt kein Paket, das sie benötigt außer Deinem doch recht exotischen Solar-Modul. Und das kommt nicht in den Mod, wenn es nach mir geht, weil ich es nicht ständig bauen und testen will. Zu exotisch, ein typisches Add-On. Für die andere Bibliothek gilt das Gleiche wie für ftplib: Solange kein anderes Paket bzw. häufiger genutztes Add-On sie benötigt, tendiere ich zum Weglassen.
OK, wenn du meinst. Ist eure Entscheidung. Ich komm auch damit klar. Allerdings versteh ich nicht, was das mit dem bauen und testen zu tun hat? Warum müsstest du das ständig bauen und testen? Aber wie gesagt, mir ist es egal, lieber wäre es mir halt, weil es dann einfacher ist, es zu nutzen und vielleicht würden dadurch manche erst auf die Idee kommen, das zu nutzen.


RalfFriedl schrieb:
Das muß Dich nicht weiter verwirren. Es kommt öfters vor, daß Makefiles nicht alle Abhängigkeiten explizit beschreiben und deshalb mit mehreren Jobs nicht richtig laufen.
Das verwirrt mich auch nicht mehr, aber es ist unnötig und verhindert das linken. Und inzwischen ist es ja gelöst (siehe unten).

RalfFriedl schrieb:
Nicht daß es an mir läge, da etwas zu entscheiden, aber wie wäre es, wenn Du kurz schreibst, was das überhaupt ist und warum es sinnvoll wäre, es mit aufzunehmen?
Gerne. Die wichtigsten Infos sollten hier zu finden sein: http://solarlog.ingmars-bastelecke.net/
Bitte auch den link zur FAQ beachten.


kriegaex schrieb:
Wir haben außer $(MAKE) auch $(MAKE1) für störrische Pakete, die dann in einem Job gebaut werden entgegen der allgemeinen Voreinstellung. Verwende das doch mal.
Das hat super funktioniert, danke.
 
lord-of-linux schrieb:
Das verwirrt mich auch nicht mehr, aber es ist unnötig und verhindert das linken. Und inzwischen ist es ja gelöst (siehe unten).
Das Problem ist nicht gelöst, Du gehst ihm nur aus dem Weg, indem Du nur einen make-Job auf einmal laufen läßt.

MAKE1 ist ja (vermutlich) das gleich wie MAKE -j1.
 
Korrekt, Ralf. Es ist das Gleiche.

Lord-of-Linux, Bauen und Testen bedeutet, daß ich immer eine .config mit sämtlichen Paketen, Modulen und Bibliotheken vorrätig habe, welche ich regelmäßig mal durchkompiliere, insbesondere, wenn sich was an Makefiles, Toolchain, BusyBox etc. geändert hat. Jedes zusätzlich mitgeschleppte Paket muß geprüft, ggf. gefixt und bei Umstellungen - z.B. Mirror-Download, irgendwann mal MD5-Prüfsummen u.a. strukturelle Änderungen, die an jedem *.mk durchzuführen sind - berücksichtigt werden. Und das macht keinen Spaß, aber jede Menge Arbeit. Daher nehmen wir nur Sachen auf, die nicht nur extremen Nischen-Charakter haben. Ist es jetzt klarer geworden, was das Eine mit dem Anderen zu tun hat?
 
@RalfFriedl: Ja, das ist schon ein bisschen aus dem Weg gehen, aber wie sonst, wenn die Lib mit -j3 Probleme hat?

@kriegaex: Das leuchtet mir ein. Wie gesagt, ich kann damit leben.


Also diskutieren wir wieder über die Sache hier. Falls es mal mehr wollen, dann könnt ihr es ja überlegen, das Paket aufzunehmen.

Könnte das bitte mal noch jemand kommentieren?
lord-of-linux schrieb:
Noch ein Frage: Ich habe mein ds-mod-Verzeichnis um meine Makefiles ergänzt und die Config.in's gepatcht. (Alle Dateien, samt einem Script zum Patchen der Config.in's: http://nslu2.sha.rieger/svn/solarlog/other-projects/fritzbox_ds-mod/makefiles/)
Wenn ich nun die Firmware per make baue, landet alles am richtigen Fleck, allerdings steht in der /etc/static.pkg "solar-logger-pre_0.2.0" drin, müsste aber "solar-logger" heißen. Wo muss ich denn diese Bezeichnung definieren?
 
RalfFriedl schrieb:
Das Makefile in Ordnung bringen?
Da ich davon nicht so viel Ahnung habe, um das in Ornung zu bringen, lass ich es so, es sei den, jemand von euch will das machen.
 
Wenn der Eintrag in static.pkg falsch ist, dann stimmt was mit dem Paketnamen nicht. Probier mal ohne "-" usw.

MfG Oliver
 
olistudent schrieb:
Wenn der Eintrag in static.pkg falsch ist, dann stimmt was mit dem Paketnamen nicht. Probier mal ohne "-" usw.
OK, danke. So ist dieses Problem auch schon gelöst.


Ich habe noch ein Problem mit dem eigentlichen Projekt, dem solar-logger. Dieser soll nun als Daemon laufen und tut das auf einem x86-System auch ohne Probleme. Auf der Fritz macht er allerdings Probleme, die wie es bisher aussieht am Daemon-Teil liegen, da nach auskommentieren der Funktionen start_daemon und stop_daemon, die den Daemon steuern, der Logger läuft. Kann bitte mal jemand den Source (also speziell die Dateien daemon.h und daemon.c) anschauen? Ihr kennt euch mit C und den Cross-Eigenheiten ja besser aus. Vielleicht könnt ihr mir ja sagen, warum dieser daemon auf der Fritz stehen zu bleiben scheint.
Hier die Sourcen: http://solarlog.ingmars-bastelecke.net/downloads/solar-logger-0.2.1.tar.bz2http://solarlog.ingmars-bastelecke.net/downloads/solar-logger-0.2.2.tar.bz2
 
Zuletzt bearbeitet:
Kostenlos!

Statistik des Forums

Themen
248,917
Beiträge
2,305,038
Mitglieder
378,638
Neuestes Mitglied
Patrick89