mikrocontroller.net

Forum: Compiler & IDEs arm-elf-gcc und arm-linux-gnueabi-gcc


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Paul E. (paul_e)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
kann mir jemand erklären was der Unterschied zwischen beiden ist und ob 
ich mein HalloWelt Beispiel, welches mit arm-linux-gnueabi-gcc 
funktioniert auch mit dem arm-elf-gcc bauen kann?

Danke

Das z.B. bau ich unter Ubuntu 12.04 (x86) und funktiniert bzw. läuft 
dann auf dem Arm-Cortex A9:
arm-linux-gnueabi-gcc -o helloworld helloworld.c

http://zedboard.org/content/zedboard-setting-arm-development-environment-linux

Autor: Jörg W. (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
arm-elf-* benutzt ein API, welches meiner Kenntnis nach mittlerweile
als veraltet gilt.  Aktuell sollte man nur noch arm-*-eabi-*
benutzen.

Autor: Mano W. (Firma: ---) (manow)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg Wunsch schrieb:
> arm-elf-* benutzt ein API, welches meiner Kenntnis nach ...

Heißt das nicht ABI - Application Binary Interface?

http://en.wikipedia.org/wiki/Application_binary_interface

Autor: Jörg W. (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mano Wee schrieb:
> Heißt das nicht ABI - Application Binary Interface?

Ja, klar.

Autor: Paul E. (paul_e)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann ich das trotz das es veratlet ist mit dem arm-elf-gcc bauen und 
wenn ja welche optionen muss ich angeben?
Danke

P.S. in meinem arm-linux-gnueabi-gcc fehlt irgendwie die ranlib, 
weswegen ich den arm-elf-gcc versuchen wollte

Autor: Hans Ulli K. (elektroman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul E. schrieb:
> Kann ich das trotz das es veratlet ist mit dem arm-elf-gcc bauen und
> wenn ja welche optionen muss ich angeben?
> Danke

Wenn du mal auf
http://wiki.debian.org/ArmEabiPort
nachsehen würdest ist dieses OABI (Old ABI) und EABI (Embedded ABI) noch 
ein wenig komplexer ...

Laut deren Seite sollte es mit
-mabi=aapcs-linux -mfloat-abi=soft -meabi=4
laufen.

Autor: Jörg W. (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul E. schrieb:
> in meinem arm-linux-gnueabi-gcc fehlt irgendwie die ranlib

Dann sieh doch zu, dass du die aktuelle Toolchain komplett bekommst,
statt die Flucht nach hinten anzutreten.

Autor: Paul E. (paul_e)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einen Tipp wo ich die komplette Toolchain herbekomme? Den Kompiler 
selbst habe ich unter Ubuntu mit sudo apt-get install 
gcc-arm-linux-gnueabi bekommen.

Wohingegen ich den arm-elf-gcc komplett nach Anleitung gebaut habe:
http://wiki.ubuntuusers.de/GNU_ARM-Toolchain

Danke

Autor: Dr. Sommer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für embedded ("bare metal"):
https://launchpad.net/gcc-arm-embedded

Autor: Hans Ulli K. (elektroman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne ja Ubuntu nicht aber ....

Siehe hier
http://packages.ubuntu.com/search?lang=de&keywords=binutils&searchon=names

Entweder
binutils-arm-linux-gnueabi
oder
binutils-arm-linux-gnueabihf

ersterer ist SoftFloat und letzterer ist HardFloat

zum gcc hier
http://packages.ubuntu.com/search?suite=default&section=all&arch=any&lang=de&keywords=gcc&searchon=names

Normalerweise sollt apt-get das aufdröseln, wenn du den gcc für ARM 
haben willst.
ggf. solltest du das/die Paket(e) neu installieren.

Autor: Jörg W. (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul E. schrieb:
> Einen Tipp wo ich die komplette Toolchain herbekomme?

Kann man sich auch selbst bauen.  Ist unter Linux nicht extrem
schwierig.

Autor: Paul E. (paul_e)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mhh meine Arm-Toolchain scheint zu funktionieren, das Ranlib wird aber 
scheinbar vom Host-Compiler vermisst:

checking for i686-pc-linux-gnu-ranlib... no
checking for ranlib... ranlib
configure: error: "sorry...compiler not supported"

Das ist ein Teil des Configure scripts, zu dem der Libary die ich Cross 
Compelieren möchte, als Host habe ich i868-linux-gnu gewählt, dessen 
ranlib er nicht findet. Wenn jemand eine Idee hat wäre ich dankbar.

Autor: Hans Ulli K. (elektroman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ranlib ist Teil der binutils.
Das sollte auch auf deinem Host vorhanden sein, ggf ist irgendwie mal 
ein Symlink verloren gegangen ...

Tippe mal
i686-pc-linux-gnu-
und drücke in der Shell die TAB-Taste (Bash-Completion)
dann sollte in etwa so was auftauchen
elektroman@X200s ~ $ i686-pc-linux-uclibc-
i686-pc-linux-uclibc-addr2line   i686-pc-linux-uclibc-gprof
i686-pc-linux-uclibc-ar          i686-pc-linux-uclibc-ld
i686-pc-linux-uclibc-as          i686-pc-linux-uclibc-ld.bfd
i686-pc-linux-uclibc-c++filt     i686-pc-linux-uclibc-ldconfig
i686-pc-linux-uclibc-cpp         i686-pc-linux-uclibc-ldd
i686-pc-linux-uclibc-cpp-4.7.2   i686-pc-linux-uclibc-ld.gold
i686-pc-linux-uclibc-elfedit     i686-pc-linux-uclibc-nm
i686-pc-linux-uclibc-emerge      i686-pc-linux-uclibc-objcopy
i686-pc-linux-uclibc-fix-root    i686-pc-linux-uclibc-objdump
i686-pc-linux-uclibc-gcc         i686-pc-linux-uclibc-pkg-config
i686-pc-linux-uclibc-gcc-4.7.2   i686-pc-linux-uclibc-ranlib
i686-pc-linux-uclibc-gcc-ar      i686-pc-linux-uclibc-readelf
i686-pc-linux-uclibc-gcc-nm      i686-pc-linux-uclibc-size
i686-pc-linux-uclibc-gcc-ranlib  i686-pc-linux-uclibc-strings
i686-pc-linux-uclibc-gcov        i686-pc-linux-uclibc-strip
i686-pc-linux-uclibc-gcov-4.7.2  
Bei logischerweise alles mit dem
i686-pc-lunux-gnu-
prefix

Autor: Paul E. (paul_e)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei mir kommt da nicht annähernd so viel und auch nur wenn ich pc weg 
lasse. Das passiert in beiden virtuellen Ubuntus 12.04 und 11.04
VM@VM-VirtualBox:~$ i686-linux-gnu-
i686-linux-gnu-cpp      i686-linux-gnu-g++      i686-linux-gnu-gcc
i686-linux-gnu-cpp-4.5  i686-linux-gnu-g++-4.5  i686-linux-gnu-gcc-4.5

Gehören die Standartmässig zu Linux/Ubuntu oder hätte ich die irgendwann 
mal installieren müssen.

P.S. die Bashcomplition funktionioert bei andern Sachen wie z.B. 
arm-linux ... einwandfrei

Autor: Hans Ulli K. (elektroman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul E. schrieb:
> Bei mir kommt da nicht annähernd so viel und auch nur wenn ich pc weg
> lasse. Das passiert in beiden virtuellen Ubuntus 12.04 und 11.04
>
> VM@VM-VirtualBox:~$ i686-linux-gnu-
> i686-linux-gnu-cpp      i686-linux-gnu-g++      i686-linux-gnu-gcc
> i686-linux-gnu-cpp-4.5  i686-linux-gnu-g++-4.5  i686-linux-gnu-gcc-4.5
> 
>
> Gehören die Standartmässig zu Linux/Ubuntu oder hätte ich die irgendwann
> mal installieren müssen.
>
> P.S. die Bashcomplition funktionioert bei andern Sachen wie z.B.
> arm-linux ... einwandfrei

Soviel ich weiss ist gcc, binutils, make und linux-headers nicht in 
Ubuntu als default installiert (komme von Gentoo)
apt-get install gcc bintuils make linux-headers
sollt reichen.

Es dürfte dann fast alles vorhanden sein.
*-emerge
ist Gentoo spezifisch ..

Autor: Paul E. (paul_e)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, die scheinen alle installiert zu sein:
gcc is already the newest version.
make is already the newest version.
binutils is already the newest version.
linux-headers-2.6.38-8-generic is already the newest version.

Hab für die header den folgende Zeile genutzt und den kleinen 
Buchstabendreher in binutils verändert:
sudo apt-get install linux-headers-$(uname -r)
sudo apt-get install binutils

Ausgabe von i686 ist immer noch:
VM@VM-VirtualBox:~$ i686-linux-gnu-
i686-linux-gnu-cpp      i686-linux-gnu-g++      i686-linux-gnu-gcc
i686-linux-gnu-cpp-4.5  i686-linux-gnu-g++-4.5  i686-linux-gnu-gcc-4.5

Andere Ideen?

Autor: Hans Ulli K. (elektroman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm seltsam (aber noch nicht ganz)

Was hast du denn für eine Config
cat /proc/cpuinfo
uname -a

Wie sieht es denn aus mit der bash completion  bei
x86_64-pc-linux-gnu-
aus.

nicht das du einen 64bit ?? VirtualPC hast und deine Toolchain nur 32bit 
(i686) ist.
Sowas hatte ich schon mal wo ich von einem 64bit System in ein 32bit 
System chroot'ed habe. configure erkannte mein 64bit Host und flog bei 
dem 32bit Compiler auf die Fresse.
Ein
{code]
linux32 chroot
[/code]
war hier die Lösung.

Autor: Paul E. (paul_e)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke schon mal für deine Umfangreichen Bemühungen.

Hier die Ausgabe
VM@VM-VirtualBox:~$ uname -a
Linux systemc-VirtualBox 2.6.38-8-generic #42-Ubuntu SMP Mon Apr 11 03:31:50 UTC 2011 i686 i686 i386 GNU/Linux

VM@VM-VirtualBox:~$ cat /proc/cpuinfo
processor  : 0
vendor_id  : GenuineIntel
cpu family  : 6
model    : 23
model name  : Intel(R) Core(TM)2 Duo CPU     P9500  @ 2.53GHz
stepping  : 10
cpu MHz    : 2428.984
cache size  : 6144 KB
fdiv_bug  : no
hlt_bug    : no
f00f_bug  : no
coma_bug  : no
fpu    : yes
fpu_exception  : yes
cpuid level  : 5
wp    : yes
flags    : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx lm constant_tsc up pni monitor ssse3 lahf_lm
bogomips  : 4857.96
clflush size  : 64
cache_alignment  : 64
address sizes  : 36 bits physical, 48 bits virtual
power management:

Bashcomplition für x86_64 liefert nichts.

Autor: Jörg W. (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
% dpkg-query -L binutils | fgrep bin/
/usr/bin/addr2line
/usr/bin/ar
/usr/bin/strings
/usr/bin/readelf
/usr/bin/size
/usr/bin/gprof
/usr/bin/objcopy
/usr/bin/ld.gold
/usr/bin/c++filt
/usr/bin/ld.bfd
/usr/bin/as
/usr/bin/objdump
/usr/bin/nm
/usr/bin/elfedit
/usr/bin/strip
/usr/bin/ranlib
/usr/bin/ld
/usr/bin/gold

Ist ein Ubuntu 12.04.

Autor: Paul E. (paul_e)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sieht bei mir bis auf die Reihenfolge erst mal genauso aus, trotzdem 
findet der Compiler für den i868-pc-linux-gnu kein ranlib ?
VM@VM-VirtualBox:~$ dpkg-query -L binutils | fgrep bin/
/usr/bin/size
/usr/bin/objdump
/usr/bin/ar
/usr/bin/strings
/usr/bin/ranlib
/usr/bin/objcopy
/usr/bin/addr2line
/usr/bin/readelf
/usr/bin/elfedit
/usr/bin/nm
/usr/bin/strip
/usr/bin/c++filt
/usr/bin/as
/usr/bin/ld.gold
/usr/bin/gprof
/usr/bin/ld.bfd
/usr/bin/ld
/usr/bin/gold


Autor: Jörg W. (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul E. schrieb:
> trotzdem
> findet der Compiler für den i868-pc-linux-gnu kein ranlib

Warum musst du auch den ganzen i686-pc-linux-gnu-Präfix da
durchschleifen?

Wenn ich hier "x86_64" eintippe (ist ein 64-bit-System) und dann
<TAB> drücke, findet er auch kein ranlib mit diesem Präfix.
Offenbar sind sich die Autoren der GCC- und Binutils-Pakete nicht
einig, ob man die Binaries nun auch noch zusätzlich mit dem
Präfixsalat installieren sollte oder nicht.

Vielleicht probier' ich's ja hier auch mal, die ARM-Toolchain
aufzusetzen.  Auf diesem Ubuntu habe ich derzeit noch keine (auf
CentOS und FreeBSD war's aber kein Problem).

Autor: Hans Ulli K. (elektroman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit den Prefixen ist teilweise ein Problem von configure, gcc und 
binutils.

Normalerweise dröselt das configure Script das alles aus, aber ...

bei mir ist z.B.
gcc ein Symlink auf  x86_64-pc-linux-gnu-gcc
Das geht aber auch Rückwarts

Folgendes als User root sollte eigentlich reichen
cd /usr/bin
for f in ar as ld nm objdump ranlib readelf size strings strip; do
    ln -s "$f" "i686-pc-linux-gnu-$f";
done

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.