Welchen Arm-Assembler-Kompiler für Linux?

OP #2070820
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
#2070838
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.
#2070840
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
#2070841
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.
#2070845
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.
Gast #2070852
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.
OP #2070859
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
#2070863
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.
Gast #2070874
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.
#2070888
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.
OP #2070900
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
Gast #2070904
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?
Gast #2070922
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.
Angehängte Dateien:
OP #2070932
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren