Forum: Mikrocontroller und Digitale Elektronik Welchen Arm-Assembler-Kompiler für Linux?


von Jobst M. (jobstens-de)


Lesenswert?

Hallo!

Ich bin auf der Suche nach einem ARM-Assembler-Kompiler für Linux. Ein 
einfaches Komandozeilentool wäre perfekt.
Mit Google bekommt man leider viel zu viel, bzw. gar nichts.

:-/

Vielleicht kann mir ja mal jemand einen Stoß in die richtige Richtung 
geben ...


Gruß

Jobst

von Klaus W. (mfgkw)


Lesenswert?

gcc?

von Jobst M. (jobstens-de)


Lesenswert?

Der gcc kann Assembler?

von Knilch (Gast)


Lesenswert?

GNU ARM Toolchain?
http://www.gnuarm.com/

von (prx) A. K. (prx)


Lesenswert?

Jobst M. schrieb:

> Der gcc kann Assembler?

Nö, der erzeugt Assembler-Code, weshalb man ihn als Assembler-Compiler 
bezeichnen kann, so wie andere dann Binärcode-Compiler sind. Ein 
Assembler hingegen kompiliert nichts mehr, der assembliert.

von Jobst M. (jobstens-de)


Lesenswert?

Auf der Seite war ich schon ein paar mal - da steht nichts von 
Assembler.


Gruß

Jobst

von Jobst M. (jobstens-de)


Lesenswert?

Okay - ich benötige ein ASM-to-HEX Konverter ...


Gruß

Jobst

von Klaus W. (mfgkw)


Lesenswert?

Aber in der toolchain ist der Assembler doch dabei.
Sonst hätte die Kette eine Lücke vor dem Linker...

von Klaus W. (mfgkw)


Lesenswert?

Jobst M. schrieb:
> Okay - ich benötige ein ASM-to-HEX Konverter ...

oder eher Assembler=ASM-to-OBJ und einen OBJ-to-HEX?
Beides in der tool chain dabei...

von Klaus W. (mfgkw)


Lesenswert?

Jobst M. schrieb:
> Der gcc kann Assembler?

gcc steht schon lange nicht mehr für "GNU C-Compiler", sondern
für "GNU compiler collection".

von Jobst M. (jobstens-de)


Lesenswert?

Klaus Wachtler schrieb:
> oder eher Assembler=ASM-to-OBJ und einen OBJ-to-HEX?
> Beides in der tool chain dabei...

Schaue ich mir (noch)mal an ...

Vielen Dank erstmal. Vielleicht kommen ja noch andere Vorschläge.


Gruß

Jobst

von (prx) A. K. (prx)


Lesenswert?

In Linux sind Tools wie Assembler und Linker als "bintools" 
zusammengefasst. Wenn man keinen Compiler braucht, dann besorgt man sich 
die bei GNU und installiert die über Sourcecode - fertige compilerfreie 
Pakete werden bei ARM nicht sehr häufig nachgefragt. Mit Compiler drin 
gibts eine aktuelle Version als freie Version bei Codesourcery.

GnuARM ist ein bischen alt, könnte bei den Cortexen zu Problemen führen.

von Jobst M. (jobstens-de)


Lesenswert?

Klaus Wachtler schrieb:
> gcc steht schon lange nicht mehr für "GNU C-Compiler", sondern
> für "GNU compiler collection".

Habe ich auch nie behauptet. Aber:

The GNU Compiler Collection includes front ends for C, C++, Objective-C, 
Fortran, Java, Ada, and Go



Gruß

Jobst

von Klaus W. (mfgkw)


Lesenswert?

Mit der Toolchain geht assembler aber auch, selbst wenn es nicht
außen drauf steht.

Aus man gcc:
1
       Suffixes of source file names indicate the language and kind of processing to be
2
       done:
3
4
       .c    C source; preprocess, compile, assemble
5
       .C    C++ source; preprocess, compile, assemble
6
       .cc   C++ source; preprocess, compile, assemble
7
       .cxx  C++ source; preprocess, compile, assemble
8
       .m    Objective-C source; preprocess, compile, assemble
9
       .i    preprocessed C; compile, assemble
10
       .ii   preprocessed C++; compile, assemble
11
       .s    Assembler source; assemble
12
       .S    Assembler source; preprocess, assemble
13
       .h    Preprocessor file; not usually named on command line
14
15
       Files with other suffixes are passed to the linker.  Common cases include:
16
17
       .o    Object file
18
       .a    Archive file

von (prx) A. K. (prx)


Lesenswert?

Jobst M. schrieb:

> The GNU Compiler Collection includes front ends for C, C++, Objective-C,
> Fortran, Java, Ada, and Go

Jau, und diese Frontends erzeugen Zwischencode für den Rest des GCC, der 
wiederum Assemblercode erzeugt, der wiederum vom Assembler zu Binärcode 
umgesetzt wird.

Dieser Assembler gehört nun aber tatsächlich formal nicht zu GCC, 
sondern eben zu den bintools. Die aber logischerweise Bestandteil vom 
Compilerpaketen wie GnuARM oder Codesourcery sind.

Am einfachsten kommt man also an einen Assembler ran, in dem man sich 
ein solches Compilerpaket besorgt.

von Jobst M. (jobstens-de)


Lesenswert?

Mal 'ne ganz blöde Frage: ist der gcc für alle Prozessoren gleichzeitig?

von (prx) A. K. (prx)


Lesenswert?

Er hat verschiedene Architekturmodule im Codegenerator, von denen bei 
der Übersetzung einer bestimmten Version des Compilers (z.B. für ARM) 
eines ausgewählt wird. Diese Module sind aber Bestandteil der 
Quellcodedistribution.

Bei Assembler ist das ähnlich. Jede compilierte Version des ähnlich 
aufgebauten Quellcodes davon verdaut nur eine Architkturfamilie.

von Tobi (Gast)


Lesenswert?

Moin,

nee ist er nicht

von Jobst M. (jobstens-de)


Lesenswert?

Tobi schrieb:
> Moin,
>
> nee ist er nicht

Scheint so :-/

Dann werde ich mir wohl noch einen zweiten gcc auf den Rechner setzen 
...


Ich berichte, wie es weiter geht ...


Gruß

Jobst

von Rolf Magnus (Gast)


Lesenswert?

A. K. schrieb:
> bintools

Eigentlich 'binutils'.

Jobst M. schrieb:
> The GNU Compiler Collection includes front ends for C, C++, Objective-C,
> Fortran, Java, Ada, and Go

GCC enthält nicht den Assembler, aber trotzdem kann man über ihn 
assemblieren, genauso wie er keinen Linker enthält, man aber trotzdem 
darüber linken kann. Assembler und Linker sind eben nicht Teil von GCC, 
müssen aber vorhanden sein, damit man GCC sinnvoll nutzen kann. Also 
sind die bei jeder Toolchain schon mit dabei.

von Jobst M. (jobstens-de)


Lesenswert?

Okay. Der aktuelle gcc setzt einen kompletten Umbau meines Systems 
voraus um diesen zu bauen.

rpmseek findet keinen gcc dummguck ... das ist ja merkwürdig. Man kann 
danach browsen und wenn man ihn anklickt, kommt man wieder zur Suche ??

Das ist mir jetzt schon zu viel. Da schreibe ich mir lieber selber einen 
...


Gruß

Jobst

von (prx) A. K. (prx)


Lesenswert?

Jobst M. schrieb:

> rpmseek findet keinen gcc dummguck ... das ist ja merkwürdig.

Jedenfalls keinen für ARM, wenn dein System nicht grad zufällig einen im 
Bauch haben sollte (was noch selten ist).

> Man kann
> danach browsen und wenn man ihn anklickt, kommt man wieder zur Suche ??

Vielleicht heisst er anders, aber wie immer er heisst, den so 
verbreiteten GCC für x86 oder amd64 wirst du nur dafür verwenden können, 
die gewünschten Binutils zu übersetzen. Nicht aber dazu, irgendwas für 
ARM zu übersetzen.

Es könnte allerdings helfen, wenn man wüsste, was für eine Distro das 
überhaupt ist. Bis jetzt weiss ich dank der Erwähnung von rpmseek nur, 
welche es nicht sein kann.

Ausserdem wäre da wie schon erwähnt Codesourcery lite. Nix übersetzen, 
nicht lang rpmsuchen, einfach installieren und arm-none-eabi-gcc 
aufrufen. Oder arm-none-eabi-as, wenn es dir nach dem Assembler in 
Reinform gelüstet.

von Rolf Magnus (Gast)


Lesenswert?

Jobst M. schrieb:
> Okay. Der aktuelle gcc setzt einen kompletten Umbau meines Systems
> voraus um diesen zu bauen.

Was ist das denn für ein komisches System? Ich habe schon viele GCCs 
gebaut und wüßte nicht, warum man da irgendwas am System umbauen müßte.

Abgesehen davon: Wenn du eh nur einen Assembler brauchst, warum willst 
du dann überhaupt einen GCC bauen? Wie gesagt: Assembler und Linker sind 
nicht Teil des GCC, sondern der binutils. Die kann man auch ohne GCC 
benutzen.

von Jobst M. (jobstens-de)


Lesenswert?

Das ist ein Mandriva 2009.0

Den gcc zu kompilieren habe ich ja nun auch schon gekippt. Allerdings 
bereiten mir die binutils auch gewisse Probleme. Ich habe das 
Komplettpaket gebaut - lief auch anstandslos durch. Aber zu ARM lässt 
sich das Ding nicht aus ...

Wie muss ich den gas aufrufen?


Gruß

Jobst

von Klaus W. (mfgkw)


Lesenswert?

Um nicht den hauseigenen Assembler, Compiler, Linker etc. für
das eigene Systeme aufzurufen, haben die Programme meist
die Architektur davorgesetzt, also statt gcc avr-gcc für den
gcc, der AVR-Code erzeugt, arm-gcc für den, der ARM erzeugt, u.s.w..

Wenn du also nicht nur gebaut hast, sondern auch installiert,
wäre arm-gas oder arm-as ein guter Ansatz...

Auf einem Rechner hier mit der ARM-toolchain sind das die
aufrufbaren Programme, die mit arm- beginnen:
1
arm-920t-linux-gnu-addr2line  arm-920t-linux-gnu-run
2
arm-920t-linux-gnu-ar         arm-920t-linux-gnu-size
3
arm-920t-linux-gnu-as         arm-920t-linux-gnu-strings
4
arm-920t-linux-gnu-c++        arm-920t-linux-gnu-strip
5
arm-920t-linux-gnu-c++filt    arm-elf-addr2line
6
arm-920t-linux-gnu-cpp        arm-elf-ar
7
arm-920t-linux-gnu-g++        arm-elf-as
8
arm-920t-linux-gnu-gcc        arm-elf-c++filt
9
arm-920t-linux-gnu-gcc-3.4.5  arm-elf-gasp
10
arm-920t-linux-gnu-gccbug     arm-elf-gcc
11
arm-920t-linux-gnu-gcov       arm-elf-gdb
12
arm-920t-linux-gnu-gdb        arm-elf-ld
13
arm-920t-linux-gnu-gdbtui     arm-elf-nm
14
arm-920t-linux-gnu-gprof      arm-elf-objcopy
15
arm-920t-linux-gnu-ld         arm-elf-objdump
16
arm-920t-linux-gnu-nm         arm-elf-ranlib
17
arm-920t-linux-gnu-objcopy    arm-elf-run
18
arm-920t-linux-gnu-objdump    arm-elf-size
19
arm-920t-linux-gnu-ranlib     arm-elf-strings
20
arm-920t-linux-gnu-readelf    arm-elf-strip

Vielleicht hilft dir das die Suche.

von Rolf Magnus (Gast)


Lesenswert?

Um hier mal sicher zu gehen: Du hast es auch für_ _ARM gebaut?

von Rolf Magnus (Gast)


Lesenswert?

Klaus Wachtler schrieb:
> Wenn du also nicht nur gebaut hast, sondern auch installiert,
> wäre arm-gas oder arm-as ein guter Ansatz...

Halt das, was er beim configure als target angegeben hat.

von Klaus W. (mfgkw)


Lesenswert?

Tja, wenn man wüsste, was er gemacht hat...

von Jobst M. (jobstens-de)


Lesenswert?

Seufz ...

Also gut - ich dachte, ich reiche mit dem Bau hin ...
Eigentlich wollte ich die vorhandenen binutils nicht überschreiben, da 
dann evtl. der gcc damit rumzickt. Aber die binutils habe ich ja noch 
als Paket da ...

Also los ...

[root@tube binutils-2.21]# make install

... nö ... kein arm-as, kein arm-gas, kein arm[garnüscht]

nur den as

von Klaus W. (mfgkw)


Lesenswert?

Klaus Wachtler schrieb:
> Tja, wenn man wüsste, was er gemacht hat...

Jobst M. schrieb:
> Also gut - ich dachte, ich reiche mit dem Bau hin ...

so genau wollten wir es gar nicht wissen, wie du "gebaut" hast :-)

von Rolf Magnus (Gast)


Lesenswert?

Jobst M. schrieb:
> Eigentlich wollte ich die vorhandenen binutils nicht überschreiben, da
> dann evtl. der gcc damit rumzickt.

Brauchst du ja auch nicht. Wenn du die für ARM gebaut hast, haben die ja 
eh einen anderen Namen. Außerdem installiert man sich die natürlich in 
ein anderes Verzeichnis (ich würde was wie /opt/my-arm oder so wählen).

> Also los ...
>
> [root@tube binutils-2.21]# make install
>
> ... nö ... kein arm-as, kein arm-gas, kein arm[garnüscht]

Was hast du denn nun als target angegeben beim configure? Einfach nur 
arm?

von Jobst M. (jobstens-de)


Lesenswert?

Klaus Wachtler schrieb:
> Tja, wenn man wüsste, was er gemacht hat...

ich habe ihm einfach ein ./configure gegeben - was offensichtlich wohl 
falsch war ...

Ich ging davon aus, daß er mir dann alles baut ...

also nochmal ... gnnnnn

Wo finde ich denn, wie ich den Arm dort einbaue?
./configure --help hilft nicht weiter ...


Gruß

Jobst

von (prx) A. K. (prx)


Lesenswert?


von Jobst M. (jobstens-de)


Lesenswert?

Rolf Magnus schrieb:
> Einfach nur arm?

Endet mit

*** BFD does not support target arm-unknown-none.


Gruß

Jobst

von Jürgen (Gast)


Angehängte Dateien:

Lesenswert?

Hier meine Skripte um GCC für ARM7 zu bauen, target ist arm-elf.
Für andere ARM Versionen sind evtl. Anpassungen nötig
(es wäre schön gewesen, wenn du etwas präziser schreiben würdest,
für welche ARM-Variante du das brauchst, welches Linux du hast, ...).

Wobei das für den Assembler wohl eher unkritisch ist,
dafür reicht wie schon gesagt das binutils-Paket.

Die Versionen sind auch nicht ganz aktuell.

Da mußt du dich halt mal selbst ein bißchen schlau machen,
und ein bißchen strukturierter vorgehen, sonst wird das nichts.

von Jobst M. (jobstens-de)


Lesenswert?

Jürgen schrieb:
> target ist arm-elf.

Ich weiß derzeit noch gar nicht, ob elf mich weiter bringt ...

Jürgen schrieb:
> welche ARM-Variante du das brauchst, welches Linux du hast

1.) Noch nicht festgelegt

2.)
Jobst M. schrieb:
> Das ist ein Mandriva 2009.0


Hiermit scheint es nun geklappt zu haben:

./configure --target=arm-none-eabi

Damit werde ich nun erst mal herumspielen ...

Die Optionen des Assemblers bieten ja auch noch einige Fallen ...


Zunächst einmal vielen Dank an alle!


Gruß

Jobst

von hhhhh@hhhhh (Gast)


Lesenswert?

Nimm das Tool von der rosaroten Edition

von Steve M. (steve_m)


Angehängte Dateien:

Lesenswert?

Hi,

anbei mal ein minimales Beispiel für den arm-elf-gcc, welcher so gebaut 
wurde: http://bb.osmocom.org/trac/wiki/GnuArmToolchain

Steve

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.