Crosscompiling für QNAP (Arm)

Für Installationen unter MacOS u.a. Betriebssystemen
Antworten
martin_frb
Beiträge: 572
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: Crosscompiling für QNAP (Arm)

Beitrag von martin_frb »

Also zum thema "gdb server cross compile" kann ich leider nix sagen.

Aber wenn man einen GDB server hat:

Es gibt eine gdb server Klasse: Im File ide\debugmanager.pas die Unit GDBMIServerDebuggerin die uses Klausel einfuegen. gdb server Einstellungen sind dann in den globalen Optionen.

Allerdings ist die noch nicht fertig. Sie leided an den selben Problemen wie *alle* anderen remote debug Klassen: http://wiki.lazarus.freepascal.org/Remote_Debugging ("Warning" Sektion)

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Crosscompiling für QNAP (Arm)

Beitrag von af0815 »

Die Anleitung kenn ich, geht über SSH (Gründe dagegen siehe ein paar Posts früher). Ich will deshalb über die HOST:PORT Version arbeiten.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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: Crosscompiling für QNAP (Arm)

Beitrag von mschnell »

af0815 hat geschrieben:Edit: der gdbserver ist mal nicht in den ipkg's vorhanden. Schaut nicht so easy aus.


Doch (aber komischerweise "arm-none-linux-gnueabi" ):

[~] # ipkg update
Downloading http://ipkg.nslu2-linux.org/feeds/optwa ... ackages.gz
Inflating http://ipkg.nslu2-linux.org/feeds/optwa ... ackages.gz
Updated list of available packages in /opt/lib/ipkg/lists/cs08q1armel
Successfully terminated.


[~] # ipkg install gdb
Package gdb (6.8-2) installed in root is up to date.
Nothing to be done
Successfully terminated.


[~] # gdb -v
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "arm-none-linux-gnueabi".



Aber: leider

[~] # gdb --tui
gdb: TUI mode is not supported
[~] #


-Michael

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Crosscompiling für QNAP (Arm)

Beitrag von af0815 »

mschnell hat geschrieben:Aber: leider

[~] # gdb --tui
gdb: TUI mode is not supported
[~] #

Jetzt kann ich vorlaut sein: Soll ich dir einen mit TUI bauen :-)

So ich habe jetzt so wie im Thread Re: Remote Debugger (Windows -> Linux) und ein paar Posts früher mal die IDE mit der geänderten ide\debugmanager.pas kompiliert. Dann kann man beim Debugger die ganzen Sachen einstellen und auf der QNAP folgendes starten

Code: Alles auswählen

 
[/share/Public] # ./gdbserver 10.0.2.15:2345 project1 -h
Process project1 created; pid = 25282
Listening on port 2345
Remote debugging from host 192.168.1.8
Usage: /share/HDA_DATA/Public/project1 -h
 
Child exited with retcode = 0
 
Child exited with status 0
GDBserver exiting
 


Damit lässt sich der Code jetzt am Debian X86 Lazarus System debuggen, wobei der Code auf der TS212 arm - basierend ausgeführt wird. Es dauert zwar von F8 zu F8 ca. 4 Sekunden aber es geht. Auch bei den Breakpoints ist er mir richtig stehengeblieben.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Crosscompiling für QNAP (Arm)

Beitrag von af0815 »

mschnell hat geschrieben:Aber: leider

[~] # gdb --tui
gdb: TUI mode is not supported
[~] #


Ich habe mal geschaut ob ich den für den GDB für den ARM mit TUI bauen kann. Jetzt weis ich auch warum es nicht so einfach ist. Es werden zusätliche Bibliotheken wie die ncurses benötigt, es entsteht also ein Rattenschwanz an benötigten weiteren Bibliotheken. Das wird der Grund sein, warum es nicht gemacht wurde.

Hinweis: Es ist auch ein zweiter Thread speziell über das Thema REMOTE DEBUG aktiv. Dort wird fleissig über Remote Debugging mittels SSH, GDB->GDBSERVER etc. diskutiert.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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: Crosscompiling für QNAP (Arm)

Beitrag von mschnell »

af0815 hat geschrieben:Jetzt kann ich vorlaut sein: Soll ich dir einen mit TUI bauen :-)

Da bist Du natürlich klar im Vorteil ! :D

Super, dass das Remote-Debugging mit erstmal prinzipiell funktioniert !!!

Ich hoffe im Moment auf die SSH-Lösung. Die scheint mir das Ideale zu sein, wenn man sie an's Laufen bringt.

Mal sehen, Ob diese Variante flotter ist und die Breakpoints keine Probleme machen. Sie wäre auch einfacher zu installieren, weil man ja keinen gdbserver für das Target braucht (auch keinen gdb mit TUI) .

-Michael
Zuletzt geändert von mschnell am Fr 8. Feb 2013, 09:51, insgesamt 1-mal geändert.

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: Crosscompiling für QNAP (Arm)

Beitrag von mschnell »

af0815 hat geschrieben:es entsteht also ein Rattenschwanz an benötigten weiteren Bibliotheken. Das wird der Grund sein, warum es nicht gemacht wurde.

Es gibt schon einen Grund, warum wir lieber mit Lazarus entwickeln als mit C :twisted:

-Michael

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Crosscompiling für QNAP (Arm)

Beitrag von af0815 »

Mein nächster Schritt ist, das ganze nochmals durchzuspielen und dabei die Doku zu testen. Ausserdem das ganze sauber zu schreiben. Vielleich so, das man das auch in die Wiki kopieren kann.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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: Crosscompiling für QNAP (Arm)

Beitrag von mschnell »

af0815 hat geschrieben:Mein nächster Schritt ist, das ganze nochmals durchzuspielen und dabei die Doku zu testen. Ausserdem das ganze sauber zu schreiben. Vielleich so, das man das auch in die Wiki kopieren kann.


Falls Du das auf Deutsch erzeugst, mache ich gerne eine Englische Übersetzung.

Gut wäre es natürlich sowohl die gdbserver als auch die SSH-Variante zu dokumentieren.

Gruß,
-Michael

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: Crosscompiling für QNAP (Arm)

Beitrag von mschnell »

Ein Anfänger-Frage:

Ich habe bisher immer Suse 32 Bit verwendet und bin jetzt auf Debian Squeeze 64 Bit umgestiegen. Da kenne ich mich mit der Programm-Installation nicht aus.

Um Lazarus auis dem trunk zu übersetzen benötigt man fpc trunk (2.7.x).

Um fpc aus dem trunk zu übersetzen braucht man fpc 2.6.0.

Mit apt-get in Debian Squeeze bekommt man aber nur 2.4.0.

ich habe zwar 2.6.0 für Debian gefunden: http://packages.debian.org/de/sid/fpc-2.6.0

Ich weiß aber nicht, wie ich das installieren soll.

Ich wäre für eine kurze Hilfestellung dankbar.
-Michael

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Crosscompiling für QNAP (Arm)

Beitrag von af0815 »

Schau mal auf Sourceforge Paket fpc-2.6.0.x86_64-linux.tar. Das Paket herunterladen und den ppc aus dem Paket herausextrahieren (ps liegt in /lib !!). Damit hast du den aktuellen Bootstrapcompiler.

Code: Alles auswählen

 
Install:
bootstrapcompiler in ~/fpcbootstrap
FPC: SVN checkout fpc in ~/fpc
LAZ: SVN checkout lazarus in ~/pascal
 
# cd ~/fpc
# make build PP=~/fpcbootstrap/ppc386
 
symlink auf die Datei
 
 make install INSTALL_PREFIX=/usr/local PP=/home/andi/fpc/compiler/ppc386
 
link von /usr/local/lib/fpc/2.7.1/ppc386 auf /usr/local/bin erstellen
 
 
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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: Crosscompiling für QNAP (Arm)

Beitrag von mschnell »

Danke ! Funktioniert.

Bei mir natürlich ppcx64.

Das erste "Symlink" habe ich nicht verstanden, ist aber anscheinend auch nicht nötig.

Und jetzt Lazarus übersetzen.....

Ich bekomme

Target OS: Linux for x86-64
Compiling fcllaz.pas
Compiling registerfcl.pas
registerfcl.pas(45,22) Fatal: Can't find unit process used by RegisterFCL

Vermutlich findet er die fpc Sourcen nicht.

Also habe ich in /usr/share/fpcsrc (da war ein Folder 2.4.0 mit den fpc Sourcen) einen link namens 2.7.1 angelegt.

nützt nix.

Dann habe ich auch in /urs/local/share/fpcsrc diesen link angelegt

nützt auch nix.

-Michael

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Crosscompiling für QNAP (Arm)

Beitrag von af0815 »

Gib die Links wieder weg.

Der Link

Code: Alles auswählen

link von /usr/local/lib/fpc/2.7.1/ppc386 auf /usr/local/bin erstellen

ist dann notwendig wenn der fpc den ppc... nicht findet der normalerweise in /usr/... erwartet wird. der FPC selbst ist ja nur ein stub der den richtigen ppc auswählt.

Schaut dir mal die fpc.cfg's an. bzw. fragen den fpc welche er nimmt auf der Kommandozeile. Versuch dann mal eine Minimalbeispiel mit dem fpc zu kompilieren ob das geht.

Code: Alles auswählen

program Hello;
begin
WriteLn('Hello World');
end.
SCNR :mrgreen:

Standardmässig gibt es keine fpc.cfg !! Die muß man sich erst erzeugen und konfigurieren (oder eine alte nehmen)

Siehe auch Erzeugen_Sie_die_Datei_fpc.cfg ist zwar für Win, unter Linux gehts ähnlich.

Dann erst kümmere dich um Lazarus.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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: Crosscompiling für QNAP (Arm)

Beitrag von mschnell »

af0815 hat geschrieben:Gib die Links wieder weg.

Scheinen ja nix zu bringen..

af0815 hat geschrieben:Der Link

Code: Alles auswählen

link von /usr/local/lib/fpc/2.7.1/ppc386 auf /usr/local/bin erstellen

ist dann notwendig wenn der fpc den ppc... nicht findet der normalerweise in /usr/... erwartet wird. der FPC selbst ist ja nur ein stub der den richtigen ppc auswählt.

Das ist mir klar. Der macht auch was er soll. "fpc" (mit $PATH gefunden) startet ppcx64 v2.7.1

af0815 hat geschrieben:Schaut dir mal die fpc.cfg's an. bzw. fragen den fpc welche er nimmt auf der Kommandozeile.

Ich glaube, ich habe noch keine. Das bekannte Problem bei fpc.cfg ist, dass sie an diversen verschiedenen Stellen gesucht wird und die gefundenen Varianten möglicherweise gemerged werden (oder auch nicht). Es gibt eine Kommandozeilen-Option, die die gefundenen fpc.cfgs anzeigt.

af0815 hat geschrieben:Versuch dann mal eine Minimalbeispiel mit dem fpc zu kompilieren ob das geht.

Code: Alles auswählen

program Hello;
begin
WriteLn('Hello World');
end.

Das klappte nach der Installation auf Anhieb.


af0815 hat geschrieben:Standardmässig gibt es keine fpc.cfg !! Die muß man sich erst erzeugen und konfigurieren (oder eine alte nehmen)

Siehe auch Erzeugen_Sie_die_Datei_fpc.cfg ist zwar für Win, unter Linux gehts ähnlich.

OK.
af0815 hat geschrieben:Dann erst kümmere dich um Lazarus.


Also jetzt ?!?!?!?
-Michael

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Crosscompiling für QNAP (Arm)

Beitrag von af0815 »

Zur fpc.cfg: Soweit ich das durchblickt habe, schaut er zuerst auf /etc/fpc.cfg, dann ins Benutzer home Verzeichnis. Man sieht es, wenn man sich die Infos auf der Kommandozeile anzeigen lässt, welche Pfade er in welcher Reihenfolge absucht. Durch dieses Verhalten kann man eine Systemweite fpc.cfg durch die im Benutzerverzeichnis installierte Überschreiben bzw. ergänzen.

Ev. mit which fpc mal sehen ob überhaupt der richtige verwendet wird.

Installierst du für Crosscompile ? Wenn ja, das auch gleicht mit dem fpc auf der Kommandozeile Crooskompilieren, dann das Ergebnis auf der Zielplattform laufen lassen.

Wenn das soweit alles ok ist, dann habe ich im Lazarusverzeichnis ein make all oder make bigide gemacht (kein ./configure). wenn alle Bibliotheken da waren, ist das durchgelaufen und mit ./startlazarus hat sich der Compiler gemeldet und sich über gdb, fpcpfade,... beschwert. Die dann eingegeben und das erste Hello world ist zum komplieren gegangen.

Das zeigt auch, das nach dem fpc eigentlich der gdb zur Installation/Kompilierung dran ist, besonders wenn man Crosssompiling machen will.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten