ARM Hardware und Programmierung

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: ARM Hardware und Programmierung

Beitrag von Scotty »

Mein as der Toolchain sagt (arm-linux-as --help):

Code: Alles auswählen

...
  -k                      generate PIC code
  -mthumb                 assemble Thumb code
  -mthumb-interwork       support ARM/Thumb interworking
  -mapcs-32               code uses 32-bit program counter
  -mapcs-26               code uses 26-bit program counter
  -mapcs-float            floating point args are in fp regs
  -mapcs-reentrant        re-entrant code
  -matpcs                 code is ATPCS conformant
  -mbig-endian            assemble for big-endian
  -mlittle-endian         assemble for little-endian
  -mapcs-frame            use frame pointer
  -mapcs-stack-check      use stack size checking
  -mcpu=<cpu name>	  assemble for CPU <cpu name>
  -march=<arch name>	  assemble for architecture <arch name>
  -mfpu=<fpu name>	  assemble for FPU architecture <fpu name>
  -mfloat-abi=<abi>	  assemble for floating point ABI <abi>
  -meabi=<ver>	  assemble for eabi version <ver>
  -EB                     assemble code for a big-endian cpu
  -EL                     assemble code for a little-endian cpu
Der Linker hat natürlich auch "ein paar" Optionen. Vielleicht kannst du dort was drehen.

Jay
Beiträge: 65
Registriert: Sa 29. Dez 2007, 02:21
OS, Lazarus, FPC: Linux, 0.9.30.4 Beta, FPC 2.6.0
CPU-Target: 32Bit
Kontaktdaten:

Re: ARM Hardware und Programmierung

Beitrag von Jay »

Marcovaldo hat geschrieben:Hallo Jay,

Danke für die Info!

Ist eine interessante Platform. Ich habe begonnen, eine Platformliste unter http://wiki.freepascal.org/ARM_Linux_Embedded_Systems" onclick="window.open(this.href);return false;
zu erstellen. Dort werde ich das Board auch listen.

Nativ unter ARM-Debian bekomme ich auch den FPC (2.2.2 welche Version verwendest Du?) zum laufen (auf dem ALEKTO).
Hast du schonmal für dieses Board einen crosscompiler zum laufen gebracht?

LG,

Marcovaldo
Kein Problem. Ich bin von diesem Board (Mini2440) auch ziemlich begeistert :lol:
Für das Compilieren des Kernels habe ich bereits den GCC-Cross-Compiler zum Laufen gebracht gehabt. Ansonsten versuche ich so viel wie möglich auf dem Board selber zu compilieren, da ich es dort sofort testen kann (und mich nicht mit Cross-Compilern rumärgern muss - denn die laufen oftmals nicht so wie sie sollen). Falls der an dem Board angeschlossene Bildschirm von der Größe her mal nicht ausreicht, kann man ja über SSH eine Remote-Verbindung aufbauen :wink:
Dateien hoch- oder runterladen ist über SFTP (SSH File Transfer Protocol) auch kein Problem.


Gruß

Jay

Marcovaldo
Beiträge: 43
Registriert: Mo 20. Okt 2008, 21:08

Re: ARM Hardware und Programmierung

Beitrag von Marcovaldo »

Hallo Alle,

Ich versuche wiedermal, einen aktuellen ARM crosscompiler zu bauen.
Den Anleitungen in
http://wiki.lazarus.freepascal.org/Setu ... le_For_ARM" onclick="window.open(this.href);return false;
folgend habe ich einen ARM-Crosscompiler + Lazarus unter einem virtuellen Ubuntu 9.10 (bei mir unter VMWare) gebaut.
Die scripte laufen (neben einer Menge Warnungen, scheint aber normal) komplett durch, jedoch

- Sowohl Lazarus als auch FPC (von der Commandline) bemängeln:

Free Pascal Compiler version 2.5.1 [2011/01/26] for arm
Copyright (c) 1993-2010 by Florian Klaempfl
Target OS: Linux for ARMEL
Compiling test1.lpr
Assembling test1
test1.lpr(15,16) Error: Assembler /home/kra/lazarus/fpc/binutils/as not found, switching to external assembling
test1.lpr(15,16) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted
Error: /usr/local/bin/ppcarm returned an error exitcode (normal if you did not specify a source file to be compiled)

=> allerdings existiert as an dieser Stelle (eigentlich ein shellscript das die orginalversion von AS aufruft)
/home/kra/lazarus/fpc/binutils/as -v zeigt die version korrekt an

Wenn ich mittels fpc -Tlinux -Parm -a test1.lpr ein assemblerfile erzeuge kann ich dieses auch manuell
in den assembler füttern (mittels -al liefert dieser auch scheinbar einen brauchbaren Output...)

Was könnte hier klemmen?

LG,

Marcovaldo

Marcovaldo
Beiträge: 43
Registriert: Mo 20. Okt 2008, 21:08

Re: ARM Hardware und Programmierung

Beitrag von Marcovaldo »

seh gerade, da hat jemand anderer auch an der selben Stelle gehangen
http://www.lazarus.freepascal.org/index ... ic=11730.0" onclick="window.open(this.href);return false;
(leider dort auch ohne Resultat)

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6763
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: ARM Hardware und Programmierung

Beitrag von af0815 »

Marcovaldo hat geschrieben: => allerdings existiert as an dieser Stelle (eigentlich ein shellscript das die orginalversion von AS aufruft)
/home/kra/lazarus/fpc/binutils/as -v zeigt die version korrekt an
Executable Flag ist auch auf den Script ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Marcovaldo
Beiträge: 43
Registriert: Mo 20. Okt 2008, 21:08

Re: ARM Hardware und Programmierung

Beitrag von Marcovaldo »

ja, alles sollte entsprechend gesetzt sein:

kra@ubuntu910desktop:~/lazarus/fpc/binutils$ ls -l
total 0
lrwxrwxrwx 1 kra kra 27 2011-01-26 09:47 ar -> /usr/local/bin/arm-linux-ar
lrwxrwxrwx 1 kra kra 27 2011-01-27 07:08 as -> /usr/local/bin/arm-linux-as
lrwxrwxrwx 1 kra kra 27 2011-01-26 09:47 ld -> /usr/local/bin/arm-linux-ld

bzw

/usr/local/bin:

-rwxr-xr-x 1 root root 2424585 2011-01-26 09:47 arm-linux-addr2line
-rwxr-xr-x 2 root root 2557515 2011-01-26 09:47 arm-linux-ar
-rwxr-xr-x 1 root root 54 2011-01-27 05:19 arm-linux-as
-rwxr-xr-x 2 root root 3840999 2011-01-26 09:47 arm-linux-as_org
-rwxr-xr-x 1 root root 2403264 2011-01-26 09:47 arm-linux-c++filt
-rwxr-xr-x 1 root root 2830749 2011-01-26 09:47 arm-linux-gprof
-rwxr-xr-x 2 root root 3681207 2011-01-26 09:47 arm-linux-ld
-rwxr-xr-x 2 root root 2461904 2011-01-26 09:47 arm-linux-nm
-rwxr-xr-x 2 root root 2978481 2011-01-26 09:47 arm-linux-objcopy
-rwxr-xr-x 2 root root 3314519 2011-01-26 09:47 arm-linux-objdump
-rwxr-xr-x 2 root root 2557542 2011-01-26 09:47 arm-linux-ranlib
-rwxr-xr-x 1 root root 589838 2011-01-26 09:47 arm-linux-readelf
-rwxr-xr-x 1 root root 2453576 2011-01-26 09:47 arm-linux-size
-rwxr-xr-x 1 root root 2426042 2011-01-26 09:47 arm-linux-strings
-rwxr-xr-x 2 root root 2978476 2011-01-26 09:47 arm-linux-strip
lrwxrwxrwx 1 root root 29 2011-01-26 10:00 ppcarm -> /usr/lib/fpc/2.5.1/ppcrossarm
kra@ubuntu910desktop:/usr/local/bin$ cat arm-linux-as
#!/bin/sh
/usr/local/bin/arm-linux-as_org -meabi=5 $@

kra@ubuntu910desktop:/usr/local/bin$

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6763
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: ARM Hardware und Programmierung

Beitrag von af0815 »

Den link auch gesetzt ?

Code: Alles auswählen

sudo chmod +x /usr/local/bin/arm-linux-as
ln -s /usr/local/bin/arm-linux-as ~/lazarus/fpc/binutils/as
(Aus der Setupcross wiki)

Bei dir heisst alles arm-linux-as, der fpc sucht aber den as
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Marcovaldo
Beiträge: 43
Registriert: Mo 20. Okt 2008, 21:08

Re: ARM Hardware und Programmierung

Beitrag von Marcovaldo »

af0815 hat geschrieben:Den link auch gesetzt ?

Code: Alles auswählen

sudo chmod +x /usr/local/bin/arm-linux-as
ln -s /usr/local/bin/arm-linux-as ~/lazarus/fpc/binutils/as
(Aus der Setupcross wiki)

Bei dir heisst alles arm-linux-as, der fpc sucht aber den as
in ~/lazarus/fpc/binutils war es eh korrekt: drei links auf die entsprechenden dateien:
lrwxrwxrwx 1 kra kra 27 2011-01-26 09:47 ar -> /usr/local/bin/arm-linux-ar
lrwxrwxrwx 1 kra kra 27 2011-01-27 10:13 as -> /usr/local/bin/arm-linux-as
lrwxrwxrwx 1 kra kra 27 2011-01-26 09:47 ld -> /usr/local/bin/arm-linux-ld
kra@ubuntu910desktop:~/lazarus/fpc/binutils$
Ich habe as gelöscht und entsprechend Deiner Anweisung wieder (als Link) erzeugt
-> leider keine Veränderung.

Wenn ich es richtig verstehe geht die Aufrufkette folgendermaßen:
1) Lazarus ruft ~/lazarus/fpc/binutils/as
2) dies ist ein Link auf das script /usr/local/bin/arm-linux-as
3) das script
#!/bin/sh
/usr/local/bin/arm-linux-as_org -meabi=5 $@
ruft den eigentlichen assembler /usr/local/bin/arm-linux-as_org auf

ich werde jetzt nochmals versuchen, alles Schritt für Schritt zu testen und zu posten

Marcovaldo
Beiträge: 43
Registriert: Mo 20. Okt 2008, 21:08

Re: ARM Hardware und Programmierung

Beitrag von Marcovaldo »

Hallo,

Noch ein paar Tests:

Welcher as wird im Projektfolder gefunden?
kra@ubuntu910desktop:~/proj/test1$ which as
/usr/bin/as
kra@ubuntu910desktop:~/proj/test1$ as -v
GNU assembler version 2.20 (i486-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.20
Es ist der i486-linux-gnu (liegt in der linux suchreihenfolge Scheinbar vorne...)

FPC von commandline mit -a option
fpc -a -Tlinux -Parm test1.lpr
Free Pascal Compiler version 2.5.1 [2011/01/26] for arm
Copyright (c) 1993-2010 by Florian Klaempfl
Target OS: Linux for ARMEL
Compiling test1.lpr
Assembling test1
test1.lpr(15,16) Error: Assembler /home/kra/lazarus/fpc/binutils/as not found, switching to external assembling
test1.lpr(15,16) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted
Error: /usr/local/bin/ppcarm returned an error exitcode (normal if you did not specify a source file to be compiled)
Fehler wie bisher, jedoch wird ein Assemblerfile erzeugt test1.s
.file "test1.lpr"
# Begin asmlist al_begin
# End asmlist al_begin
# Begin asmlist al_stabs
# End asmlist al_stabs
# Begin asmlist al_procedures

.section .text.n_main
.balign 4
.globl PASCALMAIN
.type PASCALMAIN,#function
PASCALMAIN:
.globl main
.type main,#function
main:
mov r12,r13
stmfd r13!,{r4,r11,r12,r14,r15}
sub r11,r12,#4
sub r13,r13,#44
bl FPC_INITIALIZEUNITS
bl fpc_get_output
mov r4,r0
mov r1,r4
ldr r2,.Lj9
mov r0,#0
bl fpc_write_text_shortstr
bl FPC_IOCHECK
mov r0,r4
bl fpc_writeln_end
bl FPC_IOCHECK
bl FPC_DO_EXIT
ldmea r11,{r4,r11,r13,r15}
.Lj9:
.long _$TEST1$_Ld1
.Le0:
.size main, .Le0 - main

Rest gekürzt....
Diese Datei schaut ganz vernünftig aus und lässt sich in den assembler füttern:
/home/kra/lazarus/fpc/binutils/as -al -meabi=5 -otest1.o test1.s > asm.lst
Das entsprechende listingfile ist
ARM GAS test1.s page 1


1 .file "test1.lpr"
2 # Begin asmlist al_begin
3 # End asmlist al_begin
4 # Begin asmlist al_stabs
5 # End asmlist al_stabs
6 # Begin asmlist al_procedures
7
8 .section .text.n_main
9 .balign 4
10 .globl PASCALMAIN
11 .type PASCALMAIN,#function
12 PASCALMAIN:
13 .globl main
14 .type main,#function
15 main:
16 0000 0DC0A0E1 mov r12,r13
17 0004 10D82DE9 stmfd r13!,{r4,r11,r12,r14,r15}
18 0008 04B04CE2 sub r11,r12,#4
19 000c 2CD04DE2 sub r13,r13,#44
20 0010 FEFFFFEB bl FPC_INITIALIZEUNITS
21 0014 FEFFFFEB bl fpc_get_output
22 0018 0040A0E1 mov r4,r0
23 001c 0410A0E1 mov r1,r4
24 0020 1C209FE5 ldr r2,.Lj9
25 0024 0000A0E3 mov r0,#0
26 0028 FEFFFFEB bl fpc_write_text_shortstr
27 002c FEFFFFEB bl FPC_IOCHECK
28 0030 0400A0E1 mov r0,r4
29 0034 FEFFFFEB bl fpc_writeln_end
30 0038 FEFFFFEB bl FPC_IOCHECK
31 003c FEFFFFEB bl FPC_DO_EXIT
32 0040 10A81BE9 ldmea r11,{r4,r11,r13,r15}
33 .Lj9:
34 0044 00000000 .long _$TEST1$_Ld1
35 .Le0:
36 .size main, .Le0 - main
37
38 .section .text
39 # End asmlist al_procedures
40 # Begin asmlist al_globals
41
42 .section .data.n_THREADVARLIST_P$TEST1
43 .balign 4
44 .globl THREADVARLIST_P$TEST1
45 .type THREADVARLIST_P$TEST1,#object
46 THREADVARLIST_P$TEST1:
47 0000 00000000 .long 0
48 .Le1:
49 .size THREADVARLIST_P$TEST1, .Le1 - THREADVARLIST_P$TEST1
50
51 .section .data.n_INITFINAL
52 .balign 4
53 .globl INITFINAL
54 .type INITFINAL,#object
55 INITFINAL:
56 0000 07000000 .long 7,0
56 00000000
ARM GAS test1.s page 2


57 0008 00000000 .long INIT$_SYSTEM
58 000c 00000000 .long 0
59 0010 00000000 .long INIT$_FPINTRES
60 0014 00000000 .long 0,0
60 00000000
61 001c 00000000 .long FINALIZE$_OBJPAS
62 0020 00000000 .long INIT$_UNIX
63 0024 00000000 .long FINALIZE$_UNIX
64 0028 00000000 .long INIT$_SYSUTILS
65 002c 00000000 .long FINALIZE$_SYSUTILS
66 0030 00000000 .long INIT$_TYPINFO
67 0034 00000000 .long FINALIZE$_TYPINFO
68 0038 00000000 .long INIT$_CLASSES
69 003c 00000000 .long FINALIZE$_CLASSES
70 .Le2:
71 .size INITFINAL, .Le2 - INITFINAL
72
73 .section .data.n_FPC_THREADVARTABLES
74 .balign 4
75 .globl FPC_THREADVARTABLES
76 .type FPC_THREADVARTABLES,#object
77 FPC_THREADVARTABLES:
78 0000 10000000 .long 16
79 0004 00000000 .long THREADVARLIST_SYSTEM
80 0008 00000000 .long THREADVARLIST_FPINTRES
81 000c 00000000 .long THREADVARLIST_OBJPAS
82 0010 00000000 .long THREADVARLIST_UNIXTYPE
83 0014 00000000 .long THREADVARLIST_BASEUNIX
84 0018 00000000 .long THREADVARLIST_UNIXUTIL
85 001c 00000000 .long THREADVARLIST_SYSCALL
86 0020 00000000 .long THREADVARLIST_UNIX
87 0024 00000000 .long THREADVARLIST_ERRORS
88 0028 00000000 .long THREADVARLIST_SYSCONST
89 002c 00000000 .long THREADVARLIST_SYSUTILS
90 0030 00000000 .long THREADVARLIST_TYPES
91 0034 00000000 .long THREADVARLIST_RTLCONSTS
92 0038 00000000 .long THREADVARLIST_TYPINFO
93 003c 00000000 .long THREADVARLIST_CLASSES
94 0040 00000000 .long THREADVARLIST_P$TEST1
95 .Le3:
96 .size FPC_THREADVARTABLES, .Le3 - FPC_THREADVARTABLES
97
98 .section .data.n_FPC_RESOURCESTRINGTABLES
99 .balign 4
100 .globl FPC_RESOURCESTRINGTABLES
101 .type FPC_RESOURCESTRINGTABLES,#object
102 FPC_RESOURCESTRINGTABLES:
103 0000 02000000 .long 2
104 0004 00000000 .long RESSTR_RTLCONSTS_START
105 0008 00000000 .long RESSTR_RTLCONSTS_END
106 000c 00000000 .long RESSTR_SYSCONST_START
107 0010 00000000 .long RESSTR_SYSCONST_END
108 .Le4:
109 .size FPC_RESOURCESTRINGTABLES, .Le4 - FPC_RESOURCESTRINGTABLES
110
111 .section .data.n_FPC_WIDEINITTABLES
112 .balign 4
ARM GAS test1.s page 3


113 .globl FPC_WIDEINITTABLES
114 .type FPC_WIDEINITTABLES,#object
115 FPC_WIDEINITTABLES:
116 0000 00000000 .long 0
117 .Le5:
118 .size FPC_WIDEINITTABLES, .Le5 - FPC_WIDEINITTABLES
119
120 .section .fpc.n_version
121 .balign 8
122 0000 46504320 .ascii "FPC 2.5.1 [2011/01/26] for arm - Linux"
122 322E352E
122 31205B32
122 3031312F
122 30312F32
123
124 0026 0000 .section .data.n___stklen
125 .balign 4
126 .globl __stklen
127 .type __stklen,#object
128 __stklen:
129 0000 00008000 .long 8388608
130
131 .section .data.n___heapsize
132 .balign 4
133 .globl __heapsize
134 .type __heapsize,#object
135 __heapsize:
136 0000 00000000 .long 0
137
138 .section .data.n___fpc_valgrind
139 .globl __fpc_valgrind
140 .type __fpc_valgrind,#object
141 __fpc_valgrind:
142 0000 00 .byte 0
143
144 .section .data.n_FPC_RESLOCATION
145 .balign 4
146 .globl FPC_RESLOCATION
147 .type FPC_RESLOCATION,#object
148 FPC_RESLOCATION:
149 0000 00000000 .long FPC_RESSYMBOL
150 # End asmlist al_globals
151 # Begin asmlist al_const
152 # End asmlist al_const
153 # Begin asmlist al_typedconsts
154
155 .section .rodata.n__$TEST1$_Ld1
156 .balign 4
157 .globl _$TEST1$_Ld1
158 _$TEST1$_Ld1:
159 0000 0548656C .ascii "\005Hello\000"
159 6C6F00
160 # End asmlist al_typedconsts
161 # Begin asmlist al_rotypedconsts
162 # End asmlist al_rotypedconsts
163 # Begin asmlist al_threadvars
164 # End asmlist al_threadvars
ARM GAS test1.s page 4


165 # Begin asmlist al_imports
166 # End asmlist al_imports
167 # Begin asmlist al_exports
168 # End asmlist al_exports
169 # Begin asmlist al_resources
170 # End asmlist al_resources
171 # Begin asmlist al_rtti
172 # End asmlist al_rtti
173 # Begin asmlist al_dwarf_frame
174 # End asmlist al_dwarf_frame
175 # Begin asmlist al_dwarf_info
176 # End asmlist al_dwarf_info
177 # Begin asmlist al_dwarf_abbrev
178 # End asmlist al_dwarf_abbrev
179 # Begin asmlist al_dwarf_line
180 # End asmlist al_dwarf_line
181 # Begin asmlist al_picdata
182 # End asmlist al_picdata
183 # Begin asmlist al_resourcestrings
184 # End asmlist al_resourcestrings
185 # Begin asmlist al_objc_data
186 # End asmlist al_objc_data
187 # Begin asmlist al_objc_pools
188 # End asmlist al_objc_pools
189 # Begin asmlist al_end
190 # End asmlist al_end
191 0007 00 .section .note.GNU-stack,"",%progbits
192
Was könnte ich noch überprüfen?

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: ARM Hardware und Programmierung

Beitrag von Scotty »

Wenn as anders heisst, kannst du einfach per ln einen symbolischen Link mit dem richtigen Namen darauf erzeugen. Per -XR kann man fpc den Pfad des Linkers mitgeben (http://www.stack.nl/~marcov/buildfaq.pdf" onclick="window.open(this.href);return false;).

Marcovaldo
Beiträge: 43
Registriert: Mo 20. Okt 2008, 21:08

Re: ARM Hardware und Programmierung

Beitrag von Marcovaldo »

Hallo Alle,

Marcov von den englischen Forums-Kollegen hatte einen Tip, der funktioniert hat:
http://forum.lazarus.freepascal.org/ind ... 84.60.html" onclick="window.open(this.href);return false;
-XParm-linux- in die Aufrufparameter hinzufügen
Vielleicht meintet Ihr das auch mit X-Flags(Ich hab das auf die Linux eXecute flags bezogen)..

So, und jetzt muss ich nur noch schaffen, Code für armV4T zu bauen....


Liegrü,

Marcovaldo

Socke
Lazarusforum e. V.
Beiträge: 3177
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: ARM Hardware und Programmierung

Beitrag von Socke »

Marcovaldo hat geschrieben:So, und jetzt muss ich nur noch schaffen, Code für armV4T zu bauen....
Die letzte Info, die ich habe, war, dass der FPC nur Thumb2 unterstützt. Andererseits frage ich mich auch, ob du unbedingt Thumb-Code brauchst.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

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: ARM Hardware und Programmierung

Beitrag von marcov »

Mit eabi sollen mehrere Einstellungen gut gemacht sein.

Also mann muss FPC dazu instruieren, und binutils.

Binutils kann mann glaub ich auf zwei weisen machen, durch das korrekte Target zu wahlen(1) wenn mann die Binutils generiert, oder mittels --meabi=.

Fuer das letzten nutze ich ein einfaches wrapper script auf Windows:

http://svn.freepascal.org/cgi-bin/viewv ... t=fpcbuild" onclick="window.open(this.href);return false;

(1) arm-elf oder so ist eabi 0, arm-none-linux-gnueabi ist meabi 5, und arm-none-linux-eabi ist 4. Aber ich habe das noch nicht testen koennen.

Letzter Woche haben ich meinen OpenRD bekommen, aber der Harddisk der ich bestellt habe ist verspätet. In naechster Woche hoffe ich darauf ein volles Fedora 14 zu installieren, und dann ganz Lazarus von Win32 nach arm-eabi 5 zu crosscompilieren.

Marcovaldo
Beiträge: 43
Registriert: Mo 20. Okt 2008, 21:08

Re: ARM Hardware und Programmierung

Beitrag von Marcovaldo »

Hallo Marcov,

Ich habe cross ARM FPC und Lazarus erfolgreich gebaut* :
- VM-ware Ubuntu 9.10 image von http://chrysaor.info/?page=images&filter=Ubuntu" onclick="window.open(this.href);return false;
(desktop Version, aktualisiert)
- Zusätzlicher Benutzer hinzugefügt (mit dem Default-benutzer 'user' lief das Skript nicht durch, vielleicht irgend ein String-Ersetzungsproblem)
- Kjow's Skript auf
http://wiki.lazarus.freepascal.org/Setu ... le_For_ARM" onclick="window.open(this.href);return false;
- die Aufrufparameter -XParm-linux- hinzugefügt (Dein Hinweis)
=> Damit sollte EABI-5 out of the box passen


1) Ich bin noch immer im Rätseln, was für einen Code ich auf meinen Plattformen wirklich brauche - und melde mich hierzu wieder.
Auf dem ALEKTO habe ich unter Debian programme mit dem nativen FPC 2.2.2 erzeugen können, die laufen:
readelf of output
ELF Header:
Magic: 7f 45 4c 46 01 01 01 61 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: ARM
ABI Version: 0
Type: EXEC (Executable file)
Machine: ARM
Version: 0x1
Flags: 0x2, has entry point, GNU EABI


=> fpc.cfg auf dieser Installation (Architektur 4DTMI!!)
-TLinux
-Mfpc free pascal dialect (default)
-Sg allow LABEL and GOTO
-Si support C++ styled INLINE
-Os generate smaller code
-CpARMV3 Select instruction set (ARMV3!!!)
-OpARMV3 set target cpu for optimizing (ARMV3!!!)
-g-
-p-
-b-
Irgendwo las ich mal dass die 4T auch V3 opcode ausführen kann, allerdings weniger effizient.

Auf dem DNP-9200 habe ich mir mit readelf die busybox angesehen:
ELF Header:
Magic: 7f 45 4c 46 01 01 01 61 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: ARM
ABI Version: 0
Type: EXEC (Executable file)
Machine: ARM
Version: 0x1
Flags: 0x2, has entry point, GNU EABI
Das schaut auch genauso aus wie das native FPC 2.2.2 Kompilat.

ABI-Version 0 , entspricht wahrscheinlich OABI (Old ABI ) in der
Debian Nomenklatur. Das ganze entspricht, wenn ich es richtig verstehe der
(in kürze aufgekündigten) 'alten' Debian ARM distribution, während die
neue EABI basierende Version 'ARMEL' eventuell(???) hierzu nicht kompatibel ist.
(Little Endian ist es aber auch)

Ich werde jetzt versuchen:
- Ob ich rausfinden kann ob die entprechenden Kernel/Distris V4 UND thumb code unterstützen
(ARM internetworking). Und ob die obigen Beispiele jetzt V4 oder Thumb(1) code sind.
- An der EABI/arch/cpu Schraube zu drehen, um ein ähnliches Kompilat zu erhalten.

2) Ich habe jetzt auch noch ein PAC-5010 als Plattform, und kann in Kürze auch auf diesem Tests durchführen
http://www.artila.com/dshtml/PAC-5010.html" onclick="window.open(this.href);return false;

LG,

Marcovaldo




*Dank Kjow selbst für solche Greenhorns wie mich möglich...

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: ARM Hardware und Programmierung

Beitrag von mschnell »

Super !

Halte uns auf dem Laufenden !

Gruß und Dank,
-Michael

Antworten