Programme in ANSI-C für ARMv7a unter amd64 bzw. i386 entwick

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
mgolbs
Beiträge: 275
Registriert: 22.03.2009 18:08:17
Wohnort: Tirschenreuth - Löbau

Programme in ANSI-C für ARMv7a unter amd64 bzw. i386 entwick

Beitrag von mgolbs » 24.11.2012 17:57:33

Hallo,

ich würde gern ANSI-C Programme für Debian ARMv7a unter Debian amd64 bzw. i386 entwickeln. Wass müsste ich unter Debian amd64 bzw. i386 für Arm mit gcc installieren, dass ich crosscompile Zielplattform Arm realisieren kann?

Man könnte sicher nativ auf dem Debian des Arm Rechners entwicklen, dass hätte bezüglich zusätzlicher Hardware neben LCD sicher seine Einschränkungen.

http://elinux.org/BeagleBoardDebian

Hat da jemand Erfahrungen, kann Tipps geben?

Gruß und Dank Markus
Dem Überflüssigen nachlaufen, heißt das Wesentliche verpassen.
Jules Saliège

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Programme in ANSI-C für ARMv7a unter amd64 bzw. i386 ent

Beitrag von Cae » 24.11.2012 18:04:49

Naja, testen und debuggen kannst du ja wohl auf dem Desktop. Evtl. ist eine VM zum Bauen fuer die Zielplattform am schnellsten eingerichtet, sonst musst du dir halt eine ARM-Toolchain bauen. Dazu findet sich etwas [1,2] in meinen Bookmarks.

Gruss Cae

[1] http://www.ailis.de/~k/archives/19-ARM- ... howto.html
[2] http://www.hermann-uwe.de/blog/building ... rom-source
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Benutzeravatar
catdog2
Beiträge: 5352
Registriert: 24.06.2006 16:50:03
Lizenz eigener Beiträge: MIT Lizenz

Re: Programme in ANSI-C für ARMv7a unter amd64 bzw. i386 ent

Beitrag von catdog2 » 24.11.2012 18:11:12

Unix is user-friendly; it's just picky about who its friends are.

mgolbs
Beiträge: 275
Registriert: 22.03.2009 18:08:17
Wohnort: Tirschenreuth - Löbau

Re: Programme in ANSI-C für ARMv7a unter amd64 bzw. i386 ent

Beitrag von mgolbs » 24.11.2012 20:52:34

Hallo,

danke für die Tipps. Einige Fragen habe ich dann doch noch:
... eine VM zum Bauen fuer die Zielplattform...
Gibt es virtuelle Maschinen die als Host amd64 bzw. i386 sind, und Gast Arm... können?
...testen und debuggen...
Also Code erst einmal nach amd64 bzw. i386 debuggen/kompillieren? Wobei es ja gewissse Feinheiten im Code geben wird, die nicht 1:1 kompatibel sind?


http://emdebian.org/crosstools.html >> Das sieht ganz nach dem aus was ich suche. Ich muss aber erst mal verstehen wie ins System amd64 bzw. i386 einzubinden.
Prinzip: Paketquellen einbinden?
Prinzip: apt-get install ... ?

Gruß und Dank Markus
Dem Überflüssigen nachlaufen, heißt das Wesentliche verpassen.
Jules Saliège

DeletedUserReAsG

Re: Programme in ANSI-C für ARMv7a unter amd64 bzw. i386 ent

Beitrag von DeletedUserReAsG » 24.11.2012 21:21:32

Gibt es virtuelle Maschinen die als Host amd64 bzw. i386 sind, und Gast Arm... können?
qemu wäre ein Kandidat. Afaik steckt der auch hinter dem Android-Emulator.

cu,
niemand

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Programme in ANSI-C für ARMv7a unter amd64 bzw. i386 ent

Beitrag von Cae » 24.11.2012 21:26:54

mgolbs hat geschrieben:
... eine VM zum Bauen fuer die Zielplattform...
Gibt es virtuelle Maschinen die als Host amd64 bzw. i386 sind, und Gast Arm... können?
Ja, qemu kann das. Ist rein in Software, also nicht Hardware-beschleunigt (weil eben kein ARM da ist), aber es laeuft auf heutigen Prozessoren sicher nicht "langsamer" als auf der typischen Embedded-Kiste. 20-Sekunden-Suchmaschine-benutzen-ungefaehr-so-geht-es-Anleitung unter [1], vergiss den wget- und ./configure-Teil oben und installiere Debianqemu aus den Repositories. Dann rufst du qemu mit ein paar magischen Argumenten auf und schaust der Kiste beim Booten zu.

Gruss Cae

[1] http://www.aurel32.net/info/debian_arm_qemu
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

mgolbs
Beiträge: 275
Registriert: 22.03.2009 18:08:17
Wohnort: Tirschenreuth - Löbau

Re: Programme in ANSI-C für ARMv7a unter amd64 bzw. i386 ent

Beitrag von mgolbs » 24.11.2012 23:08:45

Hallo,

danke für die tollen Tipps. Kann ich in qemu eventuell sogar ein Debian Image des realen ArmV7A - beagle bone nutzen?

Gruß Markus
Dem Überflüssigen nachlaufen, heißt das Wesentliche verpassen.
Jules Saliège

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Programme in ANSI-C für ARMv7a unter amd64 bzw. i386 ent

Beitrag von Cae » 24.11.2012 23:12:57

Probier's aus, entwerder es geht, oder es geht nicht. Ein direktes Hindernis sehe ich da nicht, nur der Bootloader ist bei den ARM-Dingern immer so eine Sache fuer sich. Musst du halt mal gucken, welche(n) initrd/Kernel du da mitgeben musst.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

mgolbs
Beiträge: 275
Registriert: 22.03.2009 18:08:17
Wohnort: Tirschenreuth - Löbau

Re: Programme in ANSI-C für ARMv7a unter amd64 bzw. i386 ent

Beitrag von mgolbs » 05.12.2012 14:23:42

Hallo,

habe erst mal auf dem Arm selbst mit dem Makefile eines Projekts eine Kompilierung ohne Probleme hinbekommen. Programm läuft, trotz:

Code: Alles auswählen

make: warning:  Clock skew detected.  Your build may be incomplete.  
Hat auch nicht wirklich lange gedauert. Ob da die 720MHz des Arm schon hilfreich sind...

Werde jetzt mal http://emdebian.org/crosstools.html versuchen zum Laufen zu bringen. Dann soll qemu dran kommen. Habe qemu schon gestartet, muss nur mal schauen ob mein Arm Type unterstützt wird.

Kann ich in qemu eine Installation von z.B. einer Arm Debian iso & Co. realisieren (analog VMware...), oder muss ich immer auf ein fertiges Image zugreifen?


Gruß und Dank Markus
Dem Überflüssigen nachlaufen, heißt das Wesentliche verpassen.
Jules Saliège

Benutzeravatar
hikaru
Moderator
Beiträge: 13911
Registriert: 09.04.2008 12:48:59

Re: Programme in ANSI-C für ARMv7a unter amd64 bzw. i386 ent

Beitrag von hikaru » 05.12.2012 15:03:16

Cae hat geschrieben:Naja, testen und debuggen kannst du ja wohl auf dem Desktop.
Meist ja, verlassen sollte man sich darauf aber nicht. So ist z.B. gcc-4.4 in Wheezy noch sehr verbuggt wenn es um armhf geht. Debianchromium lässt sich damit z.B. nicht kompilieren was unter amd64 oder i386 überhaupt kein Problem ist. Mit gcc-4.6 geht es dann auch unter armhf. Eine Zeit lang ging auch das nicht da chromium einen Bug hatte der unter den arm-Architekturen generell die Kompilierung verhinderte, unter den x86-Architekturen aber nicht auftrat.
Man kann also nicht einfach auf einer Architektur entwickeln und dann davon ausgehen dass es auf allen funktioniert.
Cae hat geschrieben:Ja, qemu kann das. Ist rein in Software, also nicht Hardware-beschleunigt (weil eben kein ARM da ist), aber es laeuft auf heutigen Prozessoren sicher nicht "langsamer" als auf der typischen Embedded-Kiste.
Täusch dich da mal nicht! Ehrlich gesagt habe ich keine Ahnung was aktuelle Embedded-Kisten können, aber mein Nokia N900 (3 Jahre altes Smartphone mit 850MHz Cortex A8) kompiliert chromium in Easy Debian (armel-Squeeze-chroot) dreimal schneller als mein Intel Core i7-2700k-Desktop (3,5GHz) unter qemu.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Programme in ANSI-C für ARMv7a unter amd64 bzw. i386 ent

Beitrag von Cae » 05.12.2012 15:50:33

Hm. Merke: Probiere saemtliche Aussagen, die du schreibst, zuvor selbst aus... ;) Mit ARM-qemu hatte ich mal herumprobiert, es ist gelaufen und es kam mir performant vor. Benchmarks hab' ich natuerlich nicht gefahren, die das irgendwie untermauern wuerden.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

mgolbs
Beiträge: 275
Registriert: 22.03.2009 18:08:17
Wohnort: Tirschenreuth - Löbau

Re: Programme in ANSI-C für ARMv7a unter amd64 bzw. i386 ent

Beitrag von mgolbs » 05.12.2012 16:48:57

Hallo,

danke für die Tipps. qemu wird für meinen Arm [omap3] ausfallen, da ich dafür qemu mit gcc-3.x kompilieren müsste - leider.

Wenn ich für kleine Programme nicht mit make arbeiten will, wie kann ich den "gcc-4.3-arm-linux-gnueabi-base" von der Konsole aus aufrufen?

arm-linux-gnueabi-gcc file.c?

Wie könnte ich per Makefile nicht den "amd64-gcc" sondern den arm-linux-gnueabi-gcc ansprechen?

So:? make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-gcc

Wobei dann auf dem Arm kommt dann. binary file kann nicht ausgeführt werden - Arm Type oder

make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm omap3_evm_config oder am335x_evm_config

Wobei die omap3 / am335x_evm_config wohl der Schlüssel ist?

Über Tips und Infos wäre ich sehr dankbar.

Gruß und Dank Markus
Dem Überflüssigen nachlaufen, heißt das Wesentliche verpassen.
Jules Saliège

mgolbs
Beiträge: 275
Registriert: 22.03.2009 18:08:17
Wohnort: Tirschenreuth - Löbau

Re: Programme in ANSI-C für ARMv7a unter amd64 bzw. i386 ent

Beitrag von mgolbs » 12.12.2012 13:23:14

Hallo,

ein "make CC=arm-linux-gnueabi-gcc-4.3" bring das Übersetzen erst einmal in Gang. Wobei die Spezifikationen zum nativen Debian Arm auf der Armhardware und dem crossarm http://emdebian.org/crosstools.html mit arm-linux-gnueabi-gcc-4.3 irgendwie nicht passen. Die erzeugten Programme sind vom "bin" Code noch unterschiedlich, der auf dem Crosssystem erzeugte Code ist auf dem Debian arm noch nicht lauffähig...

Müssen auf beiden Systemen die gleichen Kernelversionen laufen? Beim nativen Debian Arm wird 2.6.26 und beim cross über amd64 wird 2.6.18 angezeigt... Dynamisches linken der libs...

Wenn ich ein "make ARCH=armel CROSS_COMPILE=arm-linux-gnueabi-gcc-4.3" genutzt habe, entstand amd64 lauffähiger Code, warum auch immer.

Auf dem Arm System selbst funktioniert der make Befehl, ohne jegliche sonstige Anpassungen.


Gruß und Dank Markus
Dem Überflüssigen nachlaufen, heißt das Wesentliche verpassen.
Jules Saliège

Antworten