ARM Hardware und Programmierung

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Marcovaldo
Beiträge: 43
Registriert: Mo 20. Okt 2008, 21:08

Re: ARM Hardware und Programmierung

Beitrag von Marcovaldo »

mschnell hat geschrieben:In einem mit Lazarus erstellten Programm das auf Linux läuft ?
Nein, das ist ein GCC crosscompilat. Ich meinte nur dass es scheinbar möglich ist, am OS vorbei direkt auf die Hardware zuzugreifen(so sehr sowas halt fragwürdig ist...)

-Marcovaldo

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 »

Direkter I/O Access geht in einem MMU-Linux nur wenn der Admin es mit ioperm erlaubt. Sonst ist das Linux buggy.

-Michael

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

Re: ARM Hardware und Programmierung

Beitrag von Marcovaldo »

Hallo Alle,

Habe jetzt wenigstens eine Variante zum laufen gebracht:
- Ein lokal(unter Debian Etch ARM) installierter (alter, aber scheinbar nach wie vor aktueller) FPC 2.2.2 läuft auf dem ALEKTO
- Die damit erzeugten Kompilate laufen auch auf dem (schlankeren) DNP-9200 von SSV
Ersterer hat einen ARM 922DTMI, letzerer einen 920DTMI

Den i386 Linux (Ubuntu) auf ARM Linux Crosscompiler (basierend auf 2.5.1 ) habe ich noch nicht zum laufen gebracht
(Illegal opcode meldung beim Start)

Melde mich in kürze zurück mit mehr Infos.


LG,

Marcovaldo

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 »

Prima !

Ideal wäre es natürlich, einen FPC Cross-Compiler und die entsprechende Lazarus IDE aus dem SVN zu erzeugen....

Danke !
-Michael

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

Re: ARM Hardware und Programmierung

Beitrag von Marcovaldo »

mschnell hat geschrieben:Prima !

Ideal wäre es natürlich, einen FPC Cross-Compiler und die entsprechende Lazarus IDE aus dem SVN zu erzeugen....
-Michael
Das ist sowieso der Plan :-)
Die Sache mit dem 2.2.2 ist nur mein persönlicher Plan B (Ich muss möglichts bald was am Laufen haben,
da ich Lösungen durch eine ARM-basierende Lösung ersetzen muss...)

So arbeite ich im Moment 2-Gleisig:
1) Die 2.2.2 Schiene (schlimmstenfalls auf dem ALEKTO ARM-Linux nativ compiliert und am DNP-9200 ausgeführt
Solange bis
2) FPC cross aus SVN (erst cross von i386 Linux, später von Win32) funktionier. Dabei bin ich auch auf der Suche nach einer
Debug/IDE Lösung (MSide?)

Für TCP/Seriell möchte ich die Ararat Lösungen verwenden.
(Die sollten sich ja dann auch in die neueste Version ziehen lassen)

LG,

Marcovaldo

Weiters habe ich begonnen eine (vorläufig ods) Tabelle
ARM-Plattformen vs FPC zu erstellen. Was mir hier vorschwebt ist so eine Art Hardwarekompatibilitätstabelle wie
es sie beim OpenWRT oder beim ddWRT Projekt gibt. Die möchte ich dann ins englischsprachige Wiki einpflegen.

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 »

Marcovaldo hat geschrieben:2) FPC cross aus SVN (erst cross von i386 Linux, später von Win32) funktionier. Dabei bin ich auch auf der Suche nach einer
Debug/IDE Lösung (MSide?)
Warum nicht Lazarus ? Der Debugger ist bei Lazarus und MSEIDE derselbe (gdb), und es sollte mit beiden IDE's auf dieselbe Weise möglich sein, den Debugger über TCP/IP remote mit dem ARM zu verbinden.
Marcovaldo hat geschrieben:Für TCP/Seriell möchte ich die Ararat Lösungen verwenden.
Kenne ich nicht. Ist das = Synapse?
Marcovaldo hat geschrieben:Weiters habe ich begonnen eine (vorläufig ods) Tabelle
ARM-Plattformen vs FPC zu erstellen.
Ich habe hier gerade testweise ein OMAP Entwicklungs-KIT (Texas Instruments ARM Architektur). Vielleicht Kann man damit etwas versuchen....

-Michael

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

Re: ARM Hardware und Programmierung

Beitrag von Marcovaldo »

mschnell hat geschrieben:Warum nicht Lazarus ? Der Debugger ist bei Lazarus und MSEIDE derselbe (gdb), und es sollte mit beiden IDE's auf dieselbe Weise möglich sein, den Debugger über TCP/IP remote mit dem ARM zu verbinden.
Das wäre sowieso das Beste. Muss mich aber erst einlesen wie das geht(remote debug via gdb). Beim FPC 2.2.2, den ich derzeit verwende, ist überhaupt die
ganze debugseite deaktiviert...
Ich versuche gerade am SVN FPC weiterzuttun und herauszubekommen warum die crosscompilate nicht laufen...
mschnell hat geschrieben:Kenne ich nicht. Ist das = Synapse?
Ja - Synapse (TCP) und Synaser (Seriell)
mschnell hat geschrieben: Ich habe hier gerade testweise ein OMAP Entwicklungs-KIT (Texas Instruments ARM Architektur). Vielleicht Kann man damit etwas versuchen....
Ich glaube dass jede Erfahrung, die gesammelt wird (und geteilt wird) positiv für embedded FPC/Lazarus ist. So sind mir auch die Seiten von
Paul Breneman http://www.turbocontrol.com/helloworld.htm" onclick="window.open(this.href);return false; aufgefallen. Die Idee einen fpc + ein hello.pas + libs in ein zip zu packen um es
auf Zielhardware auszuprobieren finde ich super (leider fehlte für das DNP noch der GNU as)
Genauso bin ich auf Beas ARM projekt gestoßen http://www.freepascal.dk/" onclick="window.open(this.href);return false;

Ziel wäre alles das an zentraler Stelle zusammenzutragen, so daß die, die nach uns auf die Suche gehen es leichter haben.
So sammle ich zb auch die /proc/cpuinfo etc in tabellen

Ich muss mal alle meine Toolbox CDs durchkämmen, ob ich noch eine 2.2.2 source finden kann um einen 2.2.2 cross zu probieren
(hab ja erst einen 2.2.2 nativ unter ARM linux im laufen) - und die alten FPCs sind ja alle aus dem Netz genommen worden(angeblich
wegen copyright Bedenken in Richtung BP...)

Melde mich wieder wenn ich mehr weiss...

LG,

Christian

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

Re: ARM Hardware und Programmierung

Beitrag von Marcovaldo »

Hallo,

Endlich wieder etwas Zeit gefunden, hier weiterzutun....

Der SVN(2.5.1) Crosscompiler erzeugt nach wie vor 'illegal instruction' traps....

readelf -a liefert
-------------------

Code: Alles auswählen

[size=85]ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            [color=#FFFF00]UNIX - System V
[/color]  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           ARM
  Version:                           0x1
  Entry point address:               0x8094
  Start of program headers:          52 (bytes into file)
  Start of section headers:          27272 (bytes into file)
  Flags:                             [color=#FFFF00]0x5000002, has entry point, Version5 EABI
[/color]  Size of this header:               52 (bytes)
 ................
Attribute Section: aeabi
File Attributes
  Tag_CPU_arch:[color=#FF0000] v5TE[/color]
  Tag_ARM_ISA_use: Yes
  Tag_THUMB_ISA_use: [color=#FF0000]Thumb-1[/color][/size]

wohingegen die unter FPC 2.2.2 kompilierten Programme

Code: Alles auswählen

OS/ABI:                            ARM
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           ARM
  Flags:                             0x2, has entry point, GNU EABI
liefern

Wie kann ich ARMV4T erzwingen?
Habe versucht bei den build-Aufrufen -meabi=4 zu setzen (aber scheinbar ohne Wirkung)

LG,

Christian

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 »

Soweit ich weiß, wird defaultmäßig ARMv5 Code erzeugt.

Du musst aber auch die RTL entsprechend übersetzten

In der RTL wird die Sub-Architektur berücksichtigt:

(z.B. in ARM.inc Zeile 140)
{$if defined(cpuarmv3) or defined(cpuarmv4) or defined(cpuarmv5)}

(z.B. in ARM.inc Zeile 555)
{$if defined(cpuarmv6) or defined(cpuarmv7m) or defined(cpucortexm3)}

Hat ARMNv4 überhaupt dem atomischen swp Befehl (Zeile 569 ?)

-Michael
Zuletzt geändert von mschnell am Di 13. Jul 2010, 11:37, insgesamt 1-mal geändert.

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

Re: ARM Hardware und Programmierung

Beitrag von Marcovaldo »

Hi Michael,

Dein Familienname scheint Programm - Danke für die schnelle Antwort :-O

Laut diesem Dokument http://www.doulos.com/knowhow/arm/Hints ... emaphores/" onclick="window.open(this.href);return false;

Code: Alles auswählen

Aware of this issue, ARM has created the SWP (SWaP) instruction, which is available on all ARM architectures prior to version 7...
sollte alles unter V7 den SWP Befehl kennen.

Ich hoffe heute etwas später mit Deinen Tipps einen neuen Compiler nebst RTL bauen zu können.

LG,

Christian

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: Wie kann ich ARMV4T erzwingen?
Habe versucht bei den build-Aufrufen -meabi=4 zu setzen (aber scheinbar ohne Wirkung)
Ich hab auch einen ARMv4 in meinem Navi, aber noch nichts zum Laufen bekommen (mit FPC 2.4.0).
Die ARM-Version kannst du mit -Cparmv4 auf ARMv4 einstellen (ich glaub mit fpc -i gibt der Compiler alle unterstützten Versionen aus).
Die Option -m<x> kenne ich nicht (muss mir wohl erst mal wieder einen Crosscompiler bauen); ich habs mal mit -dFPC_ARMEL versucht.
Ansonsten kann ich nur noch meinen Thread verlinken, auch wenn ich selbst noch nicht zum Ziel meiner Träume gekommen bin: http://www.lazarusforum.de/viewtopic.php?f=10&t=3775
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

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

Re: ARM Hardware und Programmierung

Beitrag von Marcovaldo »

Marcovaldo hat geschrieben: -Cparmv4

habe ich auch versucht, aber ohne Erfolg.
readelf zeigt nach wie vor ein Flag als V5 an.

Kann es sein das auch die Binutils auf ARM V4 kompiliert sein müssen?
( unter http://www.freaknet.org/martin/crosstool/packages/" onclick="window.open(this.href);return false; gibt es entsprechend compilierte)

LG,

Marcovaldo

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 »

Ich nutze das Mini2440 von friendlyarm (gibts u.a. bei eBay für deutlich unter 100€ zu kaufen). Das kann man fast so wie einen "normalen" PC verwenden (wenn man sich etwas mit Embedded Systemen auskennt) und ist daher ziemlich interessant, zumal es sehr stromsparend ist durch den ARM9-Prozessor. Es besitzt RS232, USB, RJ-45 (Netzwerk)-Schnittstellen, 64MB RAM, LCD mit Touchscreen und einen NAND-Flash-Speicher (64MB - 1GB Varianten). Hier kann man sich Teile meines Projektes dafür anschauen: http://www.programmers-projects.de/proj ... lungsboard" onclick="window.open(this.href);return false;

Programmieren dürfte damit auch kein Problem sein. Ich hab nen angepassten 2.6.33er Linux Kernel und ein Debian Dateisystem drauf laufen, bei dem ich über APT auch die vorhandenen .deb Pakete für ARM-Prozessoren installieren kann (so auch z.B. den Free Pascal-Compiler, der sowieso auf nahezu allen Systemen lauffähig ist). Durch Verwendung eines speziellen Dateisystems (hier YAFFS2) ist das Ganze auch bei NAND-Speicherzugriffen ziemlich schnell, stabil und langlebig. So läuft bei mir nebenbei noch CUPS (Druckerserver), lighttpd (ein "leichtgewichtiger" Webserver), NTFS-3G (für NTFS-Dateisysteme auf externen Festplatten - Lese-/Schreibzugriff) u.v.m.

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

Re: ARM Hardware und Programmierung

Beitrag von Marcovaldo »

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

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:Kann es sein das auch die Binutils auf ARM V4 kompiliert sein müssen?
( unter http://www.freaknet.org/martin/crosstool/packages/" onclick="window.open(this.href);return false; gibt es entsprechend compilierte)
Zum einen muss der FPC deinen Quelltext in Assembler übersetzen. Dabei muss er darauf achten, nur die Befehle zu nutzen, die der Zielprozessor unterstützt (x86, x86_64, ARM, ARMv4, ARMv5, usw.). Danach werden die Assembler-Dateien in Maschinencode übersetzt (assembliert) und dann miteinander verlinkt, sodass alle Funktionen richtig aufgerufen werden und das Betriebssystem die fertige Datei verarbeiten kann (laden und starten).
Dazu braucht es selbstverständlich einen Assembler und einen Linker, die das Zielsystem (Prozessor und Betriebssystem) kennen (entweder die GNU Binutils oder teilweise FPC-intern). Für WinCE gibt es soweit ich das sehe einen Internen Assembler und Linker, aber der Linker funktioniert nicht. Daher brauchst du die Binutils in einer funktionierenden Version.
Versuche es einmal mit den GNU Binutils Version 2.15 und dem Assembler aus Version 2.13. Mit diesen Versionen (aus den Debian Paketen pocketpc-binutils bzw. pocketpc-gas) konnte ich meine Programme zum Laufen bringen (die aktuelle Version 2.20 funktioniert nicht). Zusätzlich musst du dann noch zwei Compilerschalter (im Projekt oder in der fpc.cfg) setzen:

Code: Alles auswählen

# Externen Linker benutzen
  -Xe
  # binutils Präfix setzen (damit wird aus "as" bspw. "arm-wince-as"
  -XP$fpctarget-
Wenn du für Linux cross compilieren willst, musst du dir die binutils evtl. selbst bauen. Eine spezielle Variante für ARMv4 gibt es aber nicht (dafür ist allein der Compiler verantwortlich).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten