[gelöst] lazdaemon - Crosscompiling linuxi386 nach linux arm

Rund um die LCL und andere Komponenten
Antworten
Laserer
Beiträge: 12
Registriert: Mo 21. Jul 2008, 18:57

[gelöst] lazdaemon - Crosscompiling linuxi386 nach linux arm

Beitrag von Laserer »

Ich hoffe, dass ich hier im richtigen Forum poste! Wenn nicht, bitte den Thread an die richtige Stelle verschieben.

Liebe Community, Ich habe mal wieder ein Problem: Ich bin gerade dabei, eine Anwendung für die NSLU2 zu schreiben (http://de.wikipedia.org/wiki/NSLU2" onclick="window.open(this.href);return false;) Und wie ihr dem Wiki Artikel und dem Threadtitel unschwer entnehmen könnt, basiert die NSLU2 auf einem ARM - Prozessor. Weiters hat sie nur einen begrenzten Arbeitsspeicher und keinen Monitoranschluss o.Ä. Zusammenfassend: Die Verwendung von Lazarus auf diesem Gerät ist definitv indiskutabel.

Auf der anderen Seite benötige ich für mein Programm (ein Messprogramm, das automatisch beim Booten starten soll, Daten erfasst und diese in regelm. Abständen speichert) das Lazarus-Package lazdaemon. Auf meiner Arbeitsumgebung (i386, Ubuntu 8.04.1) lauft das Programm bereits, so wie ich mir das vorstelle.

Bisher benötigte ich das Package lazdaemon nicht und kam daher bisher ganz ohne Lazarus aus. Ich hab es zwar als Entwicklungsumgebung verwendet, doch da keine Lazarus-spezifischen Packages verwendet wurden, konnte ich die *.lpr Datei einfach auf die NSLU2 kopieren und dort direkt kompilieren (da auf der NSLU2 ein normales Debian 4.0r3 läuft, konnte ich ganz einfach das ARM - Linux Paket von der Freepascal Website installieren).

Nun ja, da ich aber nun dieses Package benötige, funktioniert die bisherige Methode natürlich nicht mehr.

Ich habe zwar ein Tutorial für eine Cross-Compiling Umgebung für ARM gefunden, jedoch kompiliert ja Lazarus bereits beim installieren des packages für i386.

Ich hoffe, ihr könnt mir helfen.
Zuletzt geändert von Laserer am Fr 31. Okt 2008, 12:15, insgesamt 2-mal geändert.

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: lazdaemon - Crosscompiling linux i386 nach linux arm

Beitrag von theo »

Für einen Daemon braucht man ja kein GUI, ergo auch nicht unbedingt die LCL.
Schau mal ob du damit was machen kannst:

/2.2.2/packages/fcl-base/src/daemonapp.pp
/2.2.2/packages/fcl-base/examples/daemon.pp
/2.2.2/packages/fcl-base/examples/daemon.txt

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: lazdaemon - Crosscompiling linux i386 nach linux arm

Beitrag von mschnell »

In Linux ist das doch eigentlich ganz einfach:

Du schreibst ein normales Command-Line Tool (In Lazarus New-> "Programm" (Statt "Application").

Um es automatisch zu starten schreibst Du einfach in einem Initialisierungs-Script eine Zeile

"programmname &"

Dann läuft das Programm im Hintergrund und das Script wird weiter ausgeführt

-Michael

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: lazdaemon - Crosscompiling linux i386 nach linux arm

Beitrag von theo »

Es gab mal noch ein einfaches Template für Linux, welches selber forkt und auf HUP und TERM hört.
Leider finde ich es nur noch im Google Cache:
http://64.233.183.104/search?q=cache:-U ... nt=mozilla" onclick="window.open(this.href);return false;

Laserer
Beiträge: 12
Registriert: Mo 21. Jul 2008, 18:57

Re: lazdaemon - Crosscompiling linux i386 nach linux arm

Beitrag von Laserer »

theo hat geschrieben:Für einen Daemon braucht man ja kein GUI, ergo auch nicht unbedingt die LCL.
Schau mal ob du damit was machen kannst:

/2.2.2/packages/fcl-base/src/daemonapp.pp
/2.2.2/packages/fcl-base/examples/daemon.pp
/2.2.2/packages/fcl-base/examples/daemon.txt

Vielen Vielen Dank Theo! Hast mir (mal wieder :mrgreen: ) den Tag gerettet! Hab leider nicht gewusst, dass es dieses daemonapp auch außerhalb des Lazdaemon - Packages gibt. Habs allerdings erst gefunden, nachdem ich die veraltete linux to arm Crosscompile - Version (Version 2.0.4, was neueres gibts offensichtlich nicht) von meinem System entfernt und durch eine normale 2.2.2 ersetzt hab.
mschnell hat geschrieben:In Linux ist das doch eigentlich ganz einfach:

Du schreibst ein normales Command-Line Tool (In Lazarus New-> "Programm" (Statt "Application").

Um es automatisch zu starten schreibst Du einfach in einem Initialisierungs-Script eine Zeile

"programmname &"

Dann läuft das Programm im Hintergrund und das Script wird weiter ausgeführt

-Michael
Das hätte mir leider nichts geholfen, da ein Programm, welches man mit & in den Hintergrund verbannt meines Wissens nach beendet wird, sobald man sich ausloggt. Und da das Programm auf einem Server ohne jegliche User-Interaktion laufen soll, kommt das für mich nicht in Frage. Aber es kann auch gut sein, dass ich da was falsch verstanden habe.

Faktum est, das daemonapp Beispiel aus dem aktuellen FPC - Source hat mein Problem vollends gelöst (zum Glück ist die ARM-Version auch 2.2.2 :mrgreen: ), sodass ich wieder wie gewohnt einfach die Dateien auf die NSLU2 kopieren konnte und dort einfach mit der Console kompilieren konnte. Weiterer Vorteil: Die Programmdatei ist nicht so groß, wie die, die von Lazarus mit dem lazdaemon Package erstellt wurde (500kb versus 12MB).

Vielen Vielen Dank, dank init - Scripts und eurer Hilfe dürfte das jetzt endlich so funktionieren, wie ich mir das vorstelle!

mfg

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: lazdaemon - Crosscompiling linux i386 nach linux arm

Beitrag von mschnell »

Laserer hat geschrieben:Das hätte mir leider nichts geholfen, da ein Programm, welches man mit & in den Hintergrund verbannt meines Wissens nach beendet wird, sobald man sich ausloggt.
Glaube ich nicht. Wenn das Programm natürlich eine X-Session oder ein stream-Schnittstelle (konsole) verwendet, die mit dem ausloggen beendet wird, muss es beendet werden.
Ich hatte gedacht, Du wolltest deinen Daemon beim Systemstart automatisch aktivieren. Ich hatte deshalb geschrieben: "in einem Initialisierunsscript". Dieses läuft beim Start des Systems unter "root" noch bevor irgendjemand eingeloggt ist.
Laserer hat geschrieben: Und da das Programm auf einem Server ohne jegliche User-Interaktion laufen soll, kommt das für mich nicht in Frage.
Soll es denn nicht auch laufen wenn das System gestartet wird und sich überhaupt niemand einloggt ?

-Michael
Zuletzt geändert von mschnell am Fr 31. Okt 2008, 09:25, insgesamt 1-mal geändert.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: lazdaemon - Crosscompiling linux i386 nach linux arm

Beitrag von Christian »

Die 12 mb sind hauptsächlich Debuginformationen die du im Betrieb nicht brauchst und auch entfernen kannst dann sinds ca 500kb vs 1,2 mb
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Laserer
Beiträge: 12
Registriert: Mo 21. Jul 2008, 18:57

Re: lazdaemon - Crosscompiling linux i386 nach linux arm

Beitrag von Laserer »

mschnell hat geschrieben:
Laserer hat geschrieben:Das hätte mir leider nichts geholfen, da ein Programm, welches man mit & in den Hintergrund verbannt meines Wissens nach beendet wird, sobald man sich ausloggt.
Glaube ich nicht. Wenn das Programm natürlich eine X-Session oder ein stream-Schnittstelle (konsole) verwendet, die mit dem ausloggen beendet wird, muss es beendet werden.
Ich hatte gedacht, Du wolltest deinen Daemon beim Systemstart automatisch aktivieren. Ich hatte deshalb geschrieben: "in einem Initialisierunsscript". Dieses läuft beim Start des Systems unter "root" noch bevor irgendjemand eingeloggt ist.
Laserer hat geschrieben: Und da das Programm auf einem Server ohne jegliche User-Interaktion laufen soll, kommt das für mich nicht in Frage.
Soll es denn nicht auch laufen wenn das System gestartet wird und sich überhaupt niemand einloggt ?

-Michael
Mhm, wie gesagt, kann gut sein, dass ich das falsch in Erinnerung hatte. Das mit dem "kommt für mich nicht in Frage", bezog sich auf die vermutete Beendigung des Programms beim ausloggen des users.

Ich habs vielleicht auch etwas schlecht formuliert. Du hast das schon richtig Verstanden, das Ganze soll als Service laufen, und wenn alles glatt läuft, will ich mich gar nie auf den Server einloggen müssen :wink: Und dank eines init - skripts startet der service auch wie gewollt beim systemstart. ich hab sogar probiert, bevor ich den thread hier erstellt habe, eine normale konsolen-anwendung zu verwenden und diese per init-skript zu starten, nur das hat nicht ganz funktioniert. Ich vermute, dass ich wahrscheinlich noch ein paar writeln - Befehle im Code hatte (Überbleibsel vom debuggen) und das möglicherweise der Grund war.

Aber jetzt verwende ich eben das Beispiel-Konstrukt von daemon.pp und hab ebenfalls den Code auch gleich ein wenig aufgeräumt und Altlasten entfernt. War natürlich insofern nicht besonders schlau, da, wenn ich dadurch jetzt mehrere Fehlerquellen beseitigt habe und es nun natürlich schwer nachzuvollziehen ist, woran der Fehler wirklich lag.
Christian hat geschrieben:Die 12 mb sind hauptsächlich Debuginformationen die du im Betrieb nicht brauchst und auch entfernen kannst dann sinds ca 500kb vs 1,2 mb
Mhm, ist gut möglich, habs leider nicht ausprobiert. Ist aber schon irgendwie verwunderlich, dass der Unterschied so gravierend ist, denn bei einem normalen Konsolen - Programm wars meistens ein Faktor 2 oder 3 (zumindest bei mir). Aber offensichtlich durch die LResources, etc. (die ja lazdaemon benötigt) scheint da dann doch noch einiges dazuzukommen. Dennoch bin ich froh darüber, wenn die Applikation so wenig Speicher wie möglich benötigt, denn die NSLU2 hat nunmal nur 266Mhz, 32MB Ram, und ist mit Debian 4.0r3 und den diversen Diensten auch so schon ganz gut ausgelastet :mrgreen:

Hauptsache ist derzeit jedenfalls für mich, dass es so funktioniert, wie ich mir das vorstelle :mrgreen: Danke euch allen nochmals, denn trotz vielen Googlens tappte ich stundenlang im Dunkeln. Und dank euch wars dann in ein paar Minuten gelöst.

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: lazdaemon - Crosscompiling linux i386 nach linux arm

Beitrag von marcov »

Laserer hat geschrieben:
Christian hat geschrieben:Die 12 mb sind hauptsächlich Debuginformationen die du im Betrieb nicht brauchst und auch entfernen kannst dann sinds ca 500kb vs 1,2 mb
Mhm, ist gut möglich, habs leider nicht ausprobiert. Ist aber schon irgendwie verwunderlich, dass der Unterschied so gravierend ist, denn bei einem normalen Konsolen - Programm wars meistens ein Faktor 2 oder 3 (zumindest bei mir). Aber offensichtlich durch die LResources, etc. (die ja lazdaemon benötigt) scheint da dann doch noch einiges dazuzukommen. Dennoch bin ich froh darüber, wenn die Applikation so wenig Speicher wie möglich benötigt, denn die NSLU2 hat nunmal nur 266Mhz, 32MB Ram,
Auf Linux und Windows wird debug info nicht im speicher geladen.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: [gelöst] lazdaemon - Crosscompiling linuxi386 nach linux arm

Beitrag von Christian »

Und auf MacOS wirds ??
Glaub kaum das irgend eine Plattform ein ungenutzes Segment in den Speicher lädt.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten