Crosscompiling für QNAP (Arm)

Für Installationen unter MacOS u.a. Betriebssystemen
Antworten
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 »

Irgendwie chaotisch momentan.

Du hast von Sourcery jetzt was ? Die bin oder tar Version ?. Und du hast 'nur' make crossinstall aufgerufen ?!
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:Irgendwie chaotisch momentan.

Du hast von Sourcery jetzt was ? Die bin oder tar Version ?


Wenn ich Deiner Mitschrift folge, scheint es so, als dass ich von Sourcery nur das "bin" Directory (enthält die gnu executable aus dem gcc - Umfeld) brauche (nur das ist in einem "make" für ARM erwähnt, ist auch klar, er braucht den Assembler und den Linker für ARM). Ob die binäre oder die tar Distribution von Sourcery sollte doch eigentlich egal sein und dasselbe "bin" - Verzeichnis erzeugen. (die gnu Programme sind natürlich 32 Bit, sollten aber auf 64 bit Linux eigentlich problemlos laufen (scheinen sie auch zu tun: zumindest "gcc --version" gibt was vernünftiges aus.)

af0815 hat geschrieben:IUnd du hast 'nur' make crossinstall aufgerufen ?!


Natürlich mit den ganzen Parametern, wie in Deinem Script vorgeschlagen und an meine Directory-Struktur angepasst. So hatte ich Deine Mitschrift verstanden (obwohl ich mich auch gewundert habe, dass ich nur "make crossinstall" und nicht "make all" o.ä. machen soll.

"make crossinstall" hat aber tatsächlich einen (ansatzweise) funktionsfähigen ppcrossarm gebastelt. Vermutlich sieht "make crossinstall", dass es die zu installierenden Dateien erst noch kompilieren muss und macht das ganz brav.

-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 »

Ok, nach dem make crossinstall musst du einen komplettfunktionsfähigen ppccrossarm haben, der auf i386 läuft, aber Arm kompiliert. Das gibt er aber auf der Kommandozeile auch aus. Ohne den, macht kein weiterer Schritt einen Sinn.

Ich werde dieses WE wieder dazukommen, das ganze nochmals durchzuspielen.
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:Ok, nach dem make crossinstall musst du einen komplettfunktionsfähigen ppccrossarm haben, der auf i386 läuft, aber Arm kompiliert. Das gibt er aber auf der Kommandozeile auch aus. Ohne den, macht kein weiterer Schritt einen Sinn.

Habe ich (wie in einer vorigen Mail beschrieben:

Code: Alles auswählen

mschnell@MSchnell-XP:~/Download/svn/fpc/trunk/compiler$ ./ppcrossarm 
Free Pascal Compiler version 2.7.1 [2013/02/14] for arm
Copyright (c) 1993-2013 by Florian Klaempfl and others
/home/mschnell/Download/svn/fpc/trunk/compiler/ppcrossarm [options] <inputfile> [options]
Put + after a boolean switch option to enable it, - to disable it
  -a     The compiler doesn't delete the generated assembler file
 
mschnell@MSchnell-XP:~$ /home/mschnell/Download/svn/fpc/trunk/compiler/ppcrossarm -Tlinux -O -XP -Fu/home/mschnell/Download/svn/fpc/trunk/rtl/units/arm-linux -XParm-none-linux-gnueabi--FD/home/mschnell/Download/crosscompile hello1.pas
Free Pascal Compiler version 2.7.1 [2013/02/14] for arm
Copyright (c) 1993-2013 by Florian Klaempfl and others
Target OS: Linux for ARMEL
Compiling hello1.pas
PPU Loading /usr/local/lib/fpc/2.7.1/units/x86_64-linux/rtl/system.ppu                                                                                                                                                                                                       
PPU is compiled for another processor                                                                                                                                                                                                                                         
Fatal: Can'
t find unit system used by hello                                                                                                                                                                                                                                   
Fatal: Compilation aborted   


Klar: System.ppu konnte ja nicht erzeugt werden und ist für ARM auf dem Rechner nicht vorhanden.

Das blöde ist nur, dass der anscheinend ohne Fehlermeldung hängenbleibt, wenn "make crossinstall" system.pp kompilieren will, um die RTL auftzbauen.

Muss ich da nicht irgendweilche arm-library-Dateien (.a, .o oder .so) für das Zielsystem haben und dem Compiler zeigen ?


af0815 hat geschrieben:Ich werde dieses WE wieder dazukommen, das ganze nochmals durchzuspielen.

Super !

-Michael
Zuletzt geändert von mschnell am So 17. Feb 2013, 11:15, insgesamt 1-mal geändert.

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 »

Du arbeitest direkt mit der ppccrossarm. Eigentlich sollte man es nur mit dem fpc machen und der sollte doch entscheiden wer kompiliert. Fpc und fpc.cfg müssen da richtig 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:Du arbeitest direkt mit der ppccrossarm. Eigentlich sollte man es nur mit dem fpc machen und der sollte doch entscheiden wer kompiliert. Fpc und fpc.cfg müssen da richtig arbeiten.


Klar. Ich hatte nur erstmal testen wollen ob der neu generierte ppcrossarm überhaupt irgendwie funktioniert. "make crossinstall" hat ihn ja auch direkt aufgerufen und er ist dann abgestürzt.

Solange mir das "make crossinstall" keine RTL generiert, lohnt es sich vermutlich nicht nach "fpc" und "fpc.cfg" to schauen.

-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 »

af0815 hat geschrieben:Ich werde dieses WE wieder dazukommen, das ganze nochmals durchzuspielen.

Es wäre schön, wenn Du dabei darauf achten könntest was wirklich - und wofür - benötigt wird (z.B. sicher nur ein ganz kleiner Teil der "Code Sourcery" Diostribution).

Die Verwendbarkeit dieser Dateien können wir dann vielleicht für die verschiedenen Zielsysteme verifizieren und sie - nach prüfen der Lizenz-Bedingungen - im Wiki zur Verfügung stellen.

-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 »

Man benötigt in unserem Fall die Cross-Executables. Der Toolchain hat zusätzlich den Vorteil, falls man Kernelmodule kompilieren muß, das gleich alles richtig vorhanden ist.
Ich werde es später eventuell probieren, den Toolchain selbst aus den Binutils zu kompilieren. Nur so ist es wesentlich einfacher, das ein Schritt der problematisch sein kann wegfällt.

Es kann natürlich sein, wenn QNAP die Kernelversion und die Binutils ändert, das man dann sowieso den Vorteil verliert. Aber das ist eine andere Geschichte.

Ich bin schon dabei das ganze zu adaptieren, auch in Hinblick mit den Fragen die bereits aufgetaucht sind.

Eine Frage hat sich für mich gestellt, sind gewisse Optionen, die verschiedentlich auftauchen

Code: Alles auswählen

OPT='-gl -O3p3'

Oder ähnlich notwendig ? Oder welche sind die Optimalen ?!
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:Man benötigt in unserem Fall die Cross-Executables.

Klar. Das "bin" Directory muss man bei "make crossinstall" ja angeben. Vermutlich braucht man nur einen kleinen Teil der 23 Dateien, die darin sind. Das ist aber wenig relevant. (Die Utilities sind soweit ich weiß GPL lizensiert, wir können sie also im Wiki zur Verfügung stellen.)

Ich habe dieses Directory in meine Umgebung kopiert (und getestet, dass die Utilities prinzipiell funktionieren). Trotzdem geht "make crossinstall" bekannter Weise schief.

Beim nativen Kompilieren von Synapse auf dem ARM habe ich die Erfahrung gemacht, dass der Compiler auch bestimmte Library-Dateien (.so) sehen muss. Die waren mit Optwrare auf dem QNAP bereits vorhanden. Ich habe dem Compiler aber denn Pfad dahin angeben müssen. Ansonsten kommt eine irreführende Linker-Fehlermeldung.

Es ist also möglich, dass auch irgendwelcher "cross-libc" Dateien benötigt werden. Vermutlich gibt es sowas nicht, man braucht wohl die normalen ARM libc Dateien, aber der compiler muss ja wissen, wo sie sind.


af0815 hat geschrieben:Der Toolchain hat zusätzlich den Vorteil, falls man Kernelmodule kompilieren muß, das gleich alles richtig vorhanden ist.!

Das ist natürlich richtig. Ich hoffe aber, wir kommen ohne das aus (indem der normale native gdb mit der "ssh-Methode" zum remote-Debuggen verwendet wird). Das wäre für unsere "Nachfolger" wesentlich einfacher. Ich hoffe auch, die "ssh-Methode" zum remote-Debuggen läuft flüssiger als das, was Du bezüglich der "gdbserver"-Methode beschrieben hast.


af0815 hat geschrieben:Ich werde es später eventuell probieren, den Toolchain selbst aus den Binutils zu kompilieren. Nur so ist es wesentlich einfacher, das ein Schritt der problematisch sein kann wegfällt.

Ein ambitioniertes Vorhaben. Ich hoffe, das ist nicht nötig (s.o.). Ich habe das mal für einen anderen Prozessor gemacht. Du brauchst (wie bei fpc) eine bestimmte Version des gcc als bootstrap-Compiler (die aktuelle PC-Version geht nicht.) Diesen gcc musste ich aber auch erstmal (nicht cross) aus den Sourcen übersetzen (mit dem normalen PC-gcc). Dann besteht die komplette Toolchain aus den Binaries und der library (libc und Genossen) Das Compilieren der Toolchain hat - nachdem alles richtig eingerichtet war - mehrere Stunden gebraucht.

af0815 hat geschrieben:Es kann natürlich sein, wenn QNAP die Kernelversion und die Binutils ändert, das man dann sowieso den Vorteil verliert. Aber das ist eine andere Geschichte.

Bitte erzählie sie uns bei Gelegenheit.

af0815 hat geschrieben:Eine Frage hat sich für mich gestellt, sind gewisse Optionen, die verschiedentlich auftauchen

Code: Alles auswählen

OPT='-gl -O3p3'



Wo genau taucht das auf ? (Ich habe noch nicht verstanden ob Du nur "make crossinstall" machst, oder den fpc vorher separat kompilierst und erst dann installierst, und welche optionen bei welchem der beiden Vorgänge notwendig und sinnvoll sind. <Für die nicht-Cross Installation von fpx auf dem PC mache ich bisher immer erst "make all" und dann "make install" mit völlig unterschiedlichen Parametern).

-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 »

Ich kompiliert den fpc mal ganz normal, mit dem bootstrapcompiler. Das Cross mache ich dann mit den neuen ppc386 als bootstrapcompiler.

Die Optionen tauchen auf wenn nach fpc Crosscompiling sucht.
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:Das Cross mache ich dann mit den neuen ppc386 als bootstrapcompiler.


Ich glaube nicht, dass das "supported" ist. Ich sehe auch keinen Nachteil darin den crosscompiler mit 2.6.0 zu bootstrappen. (Vermutlich ist es Wurscht)

-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:Ich glaube nicht, dass das "supported" ist. Ich sehe auch keinen Nachteil darin den crosscompiler mit 2.6.0 zu bootstrappen. (Vermutlich ist es Wurscht)

dann ist der ppc386 aber Version 2.7.1 nicht 2.6.0. Und wenn man sich Cycle in den makefiles ansieht macht das auch nicht anderes als sich selbst zu kompilieren. Es müssen nur mindesten 3 Durchläufe sein, damit sichergestellt ist, das der Compiler und die Bibliotheken mit dem selben stabilen ppc kompiliert sind.
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:
Ich hänge momentan beim Nachvollziehen meiner ersten Versuche, alledings habe ich diesmal probiert das als Benutzer durchzuführen und nicht als root. Das sind böse Fallstricke drinnen. Wird noch etwas dauern.
Insgesamt betrachtet ist der Aufwand für den Toolchain und das selbstcompileren von gdb/gdbserver nicht sooo hoch wie befürchtet, nur das Wissen ist das Problem. Ausserdem muß es ja nicht unbedingt selbst gemacht werden. Wie in unserem Beispiel kann ich den gdb/gdbserver oder gdb allein ja erstellen und dann zur Verfügung stellen.
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: Wie in unserem Beispiel kann ich den gdb/gdbserver oder gdb allein ja erstellen und dann zur Verfügung stellen.


Hast Du 'mal probiert, den gdb (und/oder den gdbserver) aus den aktuellen Quellen auf dem Zielsystem mit dem per Optware zu bekommenden gcc zu kompilieren ? Ich sehe nicht, warum das nicht gehen soll. (Ich hole mir gleich mal die Quellen für gdb 7.x ... ) Dann brauchst Du aus der Toolchain zum, cross-Compilieren mit fpc (ppcarm) doch vermutlich nur die gnu tools aus /bin (da vielleicht sogar nur ld und auch das nicht mehr, wenn fpc demnächst auf ARM smart linken kann).

-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 »

Ja, mehr brauchst auch meiner Meinung nach nicht.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten