Microblaze Toolchain

Für den Aufbau eines vollständig geschlossenen Design Flow ist neben MB-Ref auch eine funktionstüchtige Toolchain der GNU Compiler Collection für das Linux Zielsystem notwendig. Mit Stand Q2/2011 gibt es für dieses Zielsystem noch keine ordentliche Unterstützung durch die aktuellen Up-Stream Versionen der FSF (mehr dazu).

Mit der Veröffentlichung der Patches für die GNU Binutils, den GCC und die GLIBC auf http://git.monstr.eu/git/gitweb.cgi besteht nun erstmalig die Möglichkeit, eine eigene Microblaze GNU Toolchain zu erzeugen. — Stephan Linz 2011/11/03 20:02

Status

Crosstool-NG Toolchain

Mit Hilfe von Crosstool-NG in Version 1.4.1 und ein paar zusätzlichen Erweiterungen können die bereitgestellten Patch Sets von http://git.monstr.eu/git/gitweb.cgi für die Erzeugung einer eigenen Toolchain genutzt werden. Eine Anleitung befindet sich weiter unten. Für diese selbst erstellte Toolchain gilt: ohne Garantie, ohne Haftung für etwaiger Schäden und ohne Unterstützung jedweder Art.

Die aktuelle Ausgabe ist: v1.4

Die aktuelle PTXdist Kennung ist: MicroBlaze Tools v1.4 (crosstool-1.4.1)

Inhalt:

  • kernel 2.6.37.6 (header + ptrace patch for gdb 7.2)
  • binutils 2.16.1
  • gcc 4.1.2
  • glibc 2.3.6
  • glibc-linuxthreads 2.3.6
  • multilib combination for:
    • barrel-shift
    • soft-mul
    • multiply-high
  • gdb 6.5
    • gdbserver 6.5.0.20060626-cvs (native prebuilt for target)
  • gdb 7.2 (native prebuilt for target)

:!: Achtung: Die aktuelle Ausgabe v1.4 kann nur auf Systemen mit glibc-2.11 oder höher benutzt werden und beinhaltet den ungeprüften Debugger gdb-6.5, da es bisher nur veraltete Veröffentlichungen der notwendigen Patches durch Xilinx bzw. Petalogix gibt. Der zugehörige GDB Server liegt als binäre Version bei (kompiliert von Petalogix). Als Alternative wurde bereits mit der Ausgabe v1.2 das Ergebnis der Science and Technology of Nuclear Fusion Group von der TU Eindhoven aufgenommen und erfolgreich getestet. Die Möglichkeit für das native Debuggen von Linux Anwendungen direkt innerhalb einer Microblaze/Linux Laufzeitumgebung mit dem gdb-7.2 verspricht mehr Geschwindigkeit und Stabilität. Eine Diskussion dazu im Xilinx Forum gibt es bereits. Seit Ausgabe v1.3 existieren Erweiterungen und auch Verbesserungen gegenüber der Toolchain von Xilinx oder PetaLogix. Diese sind:

  • Export aller inotify Systemcalls für das dynamische Linken – ermöglicht erstmalig die komplette Übersetzung von dbus und glib
  • Korrektur der System Include Pfade für C++ – ermöglicht erstmalig die Übersetzung der glib C++ Erweiterung glibmm

Xilinx Toolchain

Die Microblaze Toolchain wird durch Xilinx und PetaLogix aufbereitet und ohne Garantie, ohne Haftung für etwaiger Schäden und ohne Unterstützung jedweder Art bereitgestellt. Sie befinden sich in einem finalen Stadium und darf bei Akzeptanz der benannten Bedingungen produktiv eingesetzt werden.

Die aktuelle Ausgabe ist: v2.0

Die aktuelle PTXdist Kennung für Big Endian ist: Xilinx MicroBlaze Tools v2.0 (20110211.154242)

Die aktuelle PTXdist Kennung für Little Endian ist: Xilinx MicroBlaze (LE) Tools v2.0 (20110211.155827)

:!: Achtung: Die aktuelle Ausgabe v2.0 kann nur auf 64-bit Systemen mit glibc-2.11 oder höher benutzt werden und beinhaltet keinen Debugger (gdb/Insight). Für ältere Systeme oder bei der Notwendigkeit eines funktionstüchtigen Debugger kann nur die Version v1.0 genutzt werden.

Bezugsquellen

Crosstool-NG Binärpakete

DateinameDateigrößeLetzte Änderung
tools-4.1.2-mb-ctng-v1.4-x86_64.tar.bz2141.6 MiB2011/12/20 00:33
tools-4.1.2-mb-ctng-v1.4-i686.tar.bz2136.6 MiB2011/12/19 23:29

Alternativen

Sollten obige Links nicht funktionieren, dann bitte folgende Links nutzen:

Xilinx Binärpakete

DateinameDateigrößeLetzte Änderung
tools-4.1.2-mb-xilinx-v2.0.tar.bz2105.7 MiB2011/04/08 02:15
tools-4.1.2-mb-xilinx-v1.0.tar.bz2245.3 MiB2011/04/08 01:11

Alternativen

Sollten obige Links nicht funktionieren, dann bitte folgende Links nutzen:

Repositories

Letzte Änderungen

Anleitung zur Übersetzung

Crosstool-NG

Crosstoll-NG ist ein bekanntes Werkzeug zur Übersetzung von GNU Toolchains für verschiedene Prozessoren wie ARM, PowerPC, MIPS, x86 und viele mehr. Die Nutzung für Microblaze ist nicht neu wurde aber bisher nie als offizielle Unterstützung veröffentlicht. Nachdem PetaLogix im Februar 2011 alle notwendigen Patches für die GNU Binutils, den GCC und die GLIBC veröffentlicht hat und nach über einem halben Jahr keine Erweiterung in die Mainline Entwicklung von Grosstool-NG beigesteuert wurde, habe ich mir letztendlich selber diese Erweiterung erstellt und auf Gitorious als Git Repository veröffentlicht.

Die Übersetzung erfolgt in mehreren einzelnen Schritten, wobei zunächst Grosstool-NG für die lokale Benutzung vorbereitet werden muss, dann die beiden Toolchains für Big und Little Endian übersetzt und abschließend die Ergebnisse eingepackt werden. Im Verlauf der Übersetzung einer GNU Toolchain müssen verschiedene Zwischenergebnisse bereits in eine gültige Laufzeitumgebung installiert werden. Die in Crosstoll-NG hinterlegten Konfigurationen für die beiden Microblaze Toolchains sind so eingestellt, dass diese Installationen unterhalb von /tmp erfolgen. Somit ist auf ausreichend Plattenplatz in diesem Bereich zu achten (ca. 2,5GB). Je nach Leistungsfähigkeit der benutzen Maschine können Übersetzungszeiten von mehr als einer Stunde erwartet werden. Ein gutes Buch, viel Kaffee oder auch ein nicht aufgeräumtes Büro werden da sehr nützlich.

Vorbereitung

  1. Crosstool-NG mit den enthaltenen Erweiterungen für Microblaze von meinem Git Repository herunterladen:
    user@host: cd /tmp
    user@host: git clone git://gitorious.org/oselas/crosstool-ng.git
    
    Initialized empty Git repository in /tmp/crosstool-ng/.git/
    remote: Counting objects: 19150, done.
    remote: Compressing objects: 100% (6517/6517), done.
    remote: Total 19150 (delta 12597), reused 18683 (delta 12219)
    Receiving objects: 100% (19150/19150), 11.45 MiB | 156 KiB/s, done.
    Resolving deltas: 100% (12597/12597), done.
    
  2. Zweig der Microblaze Erweiterungen herausholen:
    user@host: cd crosstool-ng
    user@host: git checkout -b build crosstool-ng-1.4.1-microblaze-v1.4
    
    Switched to a new branch 'build'
    
  3. Crosstol-NG für die lokale Benutzung konfigurieren und …:
    user@host: LANG=C ./configure --local
    
    Checking for 'grep'... /bin/grep
    Checking whether '/bin/grep' supports -E... yes
    Checking for 'sed'... /bin/sed
    Checking whether '/bin/sed' supports -i and -e... yes
    Checking for 'bash'... /bin/bash
    Checking for 'cut'... /usr/bin/cut
    Checking for 'xargs'... /usr/bin/xargs
    Checking for 'install'... /usr/bin/install
    Checking for 'make'... /usr/bin/make
    Checking for 'gcc'... /usr/bin/gcc
    Checking for 'awk'... /usr/bin/awk
    Checking for 'bison'... /usr/bin/bison
    Checking for 'flex'... /usr/bin/flex
    Checking for 'makeinfo'... /usr/bin/makeinfo
    Checking for 'automake'... /usr/bin/automake
    Checking for 'libtool'... /usr/bin/libtool
    Checking for 'curl'... /usr/bin/curl
    Checking for 'patch'... /usr/bin/patch
    Checking for 'tar'... /bin/tar
    Checking for 'gzip'... /bin/gzip
    Checking for 'bzip2'... /bin/bzip2
    Computing version string... 1.4.1
    Building up Makefile... done
    
    crosstool-NG configured as follows:
      PREFIX='/tmp/crosstool-ng'
      BINDIR='/tmp/crosstool-ng'
      LIBDIR='/tmp/crosstool-ng'
      DOCDIR='/tmp/crosstool-ng/docs'
      MANDIR='/tmp/crosstool-ng/docs'
    
    Now run:
      make
    
  4. … und erstellen:
    user@host: make
    
      SED    'ct-ng'
      SED    'scripts/crosstool-NG.sh'
      SED    'scripts/saveSample.sh'
      GEN    'paths.mk'
      SED    'docs/ct-ng.1'
      GZIP   'docs/ct-ng.1.gz'
    

Big Endian Toolchain (microblaze-unknown-linux-gnu)

  1. Konfiguration auswählen:
    user@host: ./ct-ng microblaze-unknown-linux-gnu
    
      DEP   kconfig/conf.dep
      DEP   kconfig/zconf.tab.dep
      CC    kconfig/zconf.tab.o
      CC    kconfig/conf.o
      LD    kconfig/conf
      MKDIR config.gen
      IN    config.gen/arch.in
      IN    config.gen/kernel.in
      IN    config.gen/cc.in
      IN    config.gen/libc.in
      IN    config.gen/tools.in
      IN    config.gen/debug.in
      CONF  config/config.in
    
    ***********************************************************
    
    Initially reported by: Stephan Linz
    URL: http://www.li-pro.de/xilinx_mb/mbref/todo/microblaze_gnu_toolchain
    
    ***********************************************************
    
    WARNING! This sample may enable experimental features.
             Please be sure to review the configuration prior
             to building and using your toolchain!
    Now, you have been warned!
    
    ***********************************************************
    
    Now configured for "microblaze-unknown-linux-gnu"
    
  2. Toolchain übersetzen:
    user@host: ./ct-ng build
    
    [INFO ]  Build started 20111219.182418
    [INFO ]  Checking environment sanity
    [INFO ]  Building environment variables
    [WARN ]  You did not specify the build system. That's OK, I can guess...
    [INFO ]  =================================================================
    [INFO ]  Retrieving needed toolchain components' tarballs
    [INFO ]  Retrieving needed toolchain components' tarballs: done in 0.26s (at 00:01)
    [INFO ]  =================================================================
    [INFO ]  Extracting and patching toolchain components
    [INFO ]  Extracting and patching toolchain components: done in 57.28s (at 00:58)
    [INFO ]  Saving state to restart at step 'libc_check_config'...
    [INFO ]  Saving state to restart at step 'kernel_headers'...
    [INFO ]  =================================================================
    [INFO ]  Installing kernel headers
    [INFO ]  Installing kernel headers: done in 6.28s (at 01:05)
    [INFO ]  Saving state to restart at step 'gmp'...
    [INFO ]  Saving state to restart at step 'mpfr'...
    [INFO ]  Saving state to restart at step 'binutils'...
    [INFO ]  =================================================================
    [INFO ]  Installing binutils
    [INFO ]  Installing binutils: done in 72.62s (at 02:18)
    [INFO ]  Saving state to restart at step 'cc_core_pass_1'...
    [INFO ]  Saving state to restart at step 'libc_headers'...
    [INFO ]  =================================================================
    [INFO ]  Installing C library headers
    [INFO ]  Installing C library headers: done in 16.78s (at 02:37)
    [INFO ]  Saving state to restart at step 'libc_start_files'...
    [INFO ]  Saving state to restart at step 'cc_core_pass_2'...
    [INFO ]  =================================================================
    [INFO ]  Installing static core C compiler
    [INFO ]  Installing static core C compiler: done in 150.26s (at 05:10)
    [INFO ]  Saving state to restart at step 'libc'...
    [INFO ]  =================================================================
    [INFO ]  Installing C library
    [INFO ]  Installing C library: done in 406.42s (at 11:59)
    [INFO ]  Saving state to restart at step 'cc'...
    [INFO ]  =================================================================
    [INFO ]  Installing final compiler
    [INFO ]  Installing final compiler: done in 1035.25s (at 29:17)
    [INFO ]  Saving state to restart at step 'libc_finish'...
    [INFO ]  =================================================================
    [INFO ]  Finishing C library
    [INFO ]  Finishing C library: done in 152.70s (at 32:05)
    [INFO ]  Saving state to restart at step 'gmp_target'...
    [INFO ]  Saving state to restart at step 'mpfr_target'...
    [INFO ]  Saving state to restart at step 'binutils_target'...
    [INFO ]  Saving state to restart at step 'tools'...
    [INFO ]  Saving state to restart at step 'debug'...
    [INFO ]  =================================================================
    [INFO ]  Installing cross-gdb
    [INFO ]  Installing cross-gdb: done in 140.19s (at 35:45)
    [INFO ]  =================================================================
    [INFO ]  Installing native gdb
    [INFO ]    =================================================================
    [INFO ]    Installing ncurses library
    [INFO ]      =================================================================
    [INFO ]      Installing native ncurses tic
    [INFO ]      Installing native ncurses tic: done in 36.33s (at 36:21)
    [INFO ]    Installing ncurses library: done in 154.33s (at 38:19)
    [INFO ]  Installing native gdb: done in 379.25s (at 42:04)
    [INFO ]  =================================================================
    [INFO ]  Installing gdbserver binary (prebuilt)
    [INFO ]  Installing gdbserver binary (prebuilt): done in 0.02s (at 42:04)
    [INFO ]  Saving state to restart at step 'finish'...
    [INFO ]  =================================================================
    [INFO ]  Cleaning-up the toolchain's directory
    [INFO ]  Cleaning-up the toolchain's directory: done in 0.19s (at 42:25)
    [INFO ]  Build completed at 20111219.190643
    [INFO ]  (elapsed: 42:25.46)
    [INFO ]  Finishing installation (may take a few seconds)...
    [42:25]
    
  3. Übersetzungsumgebung aufräumen:
    user@host: ./ct-ng distclean
    
      CLEAN scripts
      CLEAN config
      CLEAN config.gen
      CLEAN kconfig
      CLEAN log
      CLEAN .config
      CLEAN targets
    

Little Endian Toolchain (microblazeel-unknown-linux-gnu)

  1. Konfiguration auswählen:
    user@host: ./ct-ng microblazeel-unknown-linux-gnu
    
      DEP   kconfig/conf.dep
      DEP   kconfig/zconf.tab.dep
      CC    kconfig/zconf.tab.o
      CC    kconfig/conf.o
      LD    kconfig/conf
      MKDIR config.gen
      IN    config.gen/arch.in
      IN    config.gen/kernel.in
      IN    config.gen/cc.in
      IN    config.gen/libc.in
      IN    config.gen/tools.in
      IN    config.gen/debug.in
      CONF  config/config.in
    
    ***********************************************************
    
    Initially reported by: Stephan Linz
    URL: http://www.li-pro.de/xilinx_mb/mbref/todo/microblaze_gnu_toolchain
    
    ***********************************************************
    
    WARNING! This sample may enable experimental features.
             Please be sure to review the configuration prior
             to building and using your toolchain!
    Now, you have been warned!
    
    ***********************************************************
    
    Now configured for "microblazeel-unknown-linux-gnu"
    
  2. Toolchain übersetzen:
    user@host: ./ct-ng build
    
    [INFO ]  Build started 20111219.190821
    [INFO ]  Checking environment sanity
    [INFO ]  Building environment variables
    [WARN ]  You did not specify the build system. That's OK, I can guess...
    [INFO ]  =================================================================
    [INFO ]  Retrieving needed toolchain components' tarballs
    [INFO ]  Retrieving needed toolchain components' tarballs: done in 0.12s (at 00:01)
    [INFO ]  =================================================================
    [INFO ]  Extracting and patching toolchain components
    [INFO ]  Extracting and patching toolchain components: done in 57.74s (at 00:58)
    [INFO ]  Saving state to restart at step 'libc_check_config'...
    [INFO ]  Saving state to restart at step 'kernel_headers'...
    [INFO ]  =================================================================
    [INFO ]  Installing kernel headers
    [INFO ]  Installing kernel headers: done in 6.62s (at 01:05)
    [INFO ]  Saving state to restart at step 'gmp'...
    [INFO ]  Saving state to restart at step 'mpfr'...
    [INFO ]  Saving state to restart at step 'binutils'...
    [INFO ]  =================================================================
    [INFO ]  Installing binutils
    [INFO ]  Installing binutils: done in 74.56s (at 02:21)
    [INFO ]  Saving state to restart at step 'cc_core_pass_1'...
    [INFO ]  Saving state to restart at step 'libc_headers'...
    [INFO ]  =================================================================
    [INFO ]  Installing C library headers
    [INFO ]  Installing C library headers: done in 16.89s (at 02:40)
    [INFO ]  Saving state to restart at step 'libc_start_files'...
    [INFO ]  Saving state to restart at step 'cc_core_pass_2'...
    [INFO ]  =================================================================
    [INFO ]  Installing static core C compiler
    [INFO ]  Installing static core C compiler: done in 149.48s (at 05:11)
    [INFO ]  Saving state to restart at step 'libc'...
    [INFO ]  =================================================================
    [INFO ]  Installing C library
    [INFO ]  Installing C library: done in 406.43s (at 12:00)
    [INFO ]  Saving state to restart at step 'cc'...
    [INFO ]  =================================================================
    [INFO ]  Installing final compiler
    [INFO ]  Installing final compiler: done in 1018.29s (at 29:01)
    [INFO ]  Saving state to restart at step 'libc_finish'...
    [INFO ]  =================================================================
    [INFO ]  Finishing C library
    [INFO ]  Finishing C library: done in 160.68s (at 31:57)
    [INFO ]  Saving state to restart at step 'gmp_target'...
    [INFO ]  Saving state to restart at step 'mpfr_target'...
    [INFO ]  Saving state to restart at step 'binutils_target'...
    [INFO ]  Saving state to restart at step 'tools'...
    [INFO ]  Saving state to restart at step 'debug'...
    [INFO ]  =================================================================
    [INFO ]  Installing cross-gdb
    [INFO ]  Installing cross-gdb: done in 148.34s (at 35:43)
    [INFO ]  =================================================================
    [INFO ]  Installing native gdb
    [INFO ]    =================================================================
    [INFO ]    Installing ncurses library
    [INFO ]      =================================================================
    [INFO ]      Installing native ncurses tic
    [INFO ]      Installing native ncurses tic: done in 39.32s (at 36:23)
    [INFO ]    Installing ncurses library: done in 160.50s (at 38:24)
    [INFO ]  Installing native gdb: done in 392.56s (at 42:16)
    [INFO ]  =================================================================
    [INFO ]  Installing gdbserver binary (prebuilt)
    [INFO ]  Installing gdbserver binary (prebuilt): done in 0.16s (at 42:16)
    [INFO ]  Saving state to restart at step 'finish'...
    [INFO ]  =================================================================
    [INFO ]  Cleaning-up the toolchain's directory
    [INFO ]  Cleaning-up the toolchain's directory: done in 0.21s (at 42:39)
    [INFO ]  Build completed at 20111219.195100
    [INFO ]  (elapsed: 42:39.20)
    [INFO ]  Finishing installation (may take a few seconds)...
    [42:39]
    
  3. Übersetzungsumgebung aufräumen:
    user@host: ./ct-ng distclean
    
      CLEAN scripts
      CLEAN config
      CLEAN config.gen
      CLEAN kconfig
      CLEAN log
      CLEAN .config
      CLEAN targets
    

Ergebnis einpacken und installieren

  1. Crosstool-NG hat beide Toolchains unter /tmp/tools-4.1.2-mb-ctng-v1.3 installiert, diese müssen eingepackt werden:
    user@host: cd /tmp
    user@host: tar -cj --owner=root --group=root -f tools-4.1.2-mb-ctng-v1.4-$(uname -m).tar.bz2 tools-4.1.2-mb-ctng-v1.4
    
  2. Das entstandene Archiv muss nun an einen sicheren Ort verschoben werden, dann kann das Verzeichnis gelöscht werden:
    user@host: mv tools-4.1.2-mb-ctng-v1.4-$(uname -m).tar.bz2 <safe_location>
    user@host: rm -rf tools-4.1.2-mb-ctng-v1.4
    
  3. Die Toolchains können für die Benutzung nach /opt installiert werden:
    user@host: cd /opt
    user@host: sudo tar -xjf <safe_location>/tools-4.1.2-mb-ctng-v1.4-$(uname -m).tar.bz2
    
 
xilinx_mb/toolchain/start.txt · Zuletzt geändert: 2011/12/20 08:05 von Stephan Linz
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki