INICIO   Otros temas


Instalación desde los fuentes del GNU ToolChain m68HC12 3.0

Autor: Fernando Rafael Filipuzzi

E-mail: fernando_6867@yahoo.com.ar



  1. Introducción:

    Esta guía se basa y es un resumen de la sección GCC 68HC11 & 68HC12 Sources Installation - From Sources donde se detalla los pasos para bajar, contruir e instalar "GNU Development tool chain for the Motorola 68HC11 & 68HC12 micro-controllers".


  2. Requerimientos:

    Las herramientas que se deben tener instaladas en el hosts son:

      gcc3.3
      binutils2.14 or 2.15
      texi2html1.64
      man2html?
      groff1.17.2
      bzip21.17.2
      i586-mingw32msvc-gcc(3.2 or 3.3)

    Los fuentes requieren de estos y en las versiones especificadas. Si las versiones, por ejemplo del gcc, se alejan de las especificadas, al construir, se producen errores. Otras que se pueden llegar a requerir son: bzip2, make, gcc, cvs, flex, bison, libgmp3-dev, libmpfr-dev, libncurses5-dev, libmpc-dev, autoconf, texinfo, build-essential.

    La versió de Debian en la que construí el toolchain es Etch, si se cuenta con otra versión instalada donde no se encuentren las versiones de las dependencias que son necesarias se puede crear un entorno dentro del que tengamos instalado con la versión de Debian Etch.

    Instalación en etch:

    	host:# aptitude install bzip2 flex bison libgmp3-dev libncurses5-dev \
       	> libmpc-dev autoconf texinfo build-essential make gcc-3.3 cvs \
    	> groff man2html unzip
    
    

    Antes de empezar con el siguiente punto, es necesario si se tiene otras versiones de gcc, indicarle que versión de gcc es la que vamos a usar, esto se logra con:

    	host:# export CC=gcc-3.3
    

    se necesita esta variable de entorno sino toma como valor los script de configuración el gcc más actual; si tuvieramos la versión 3.4 del gcc, como se puede encontrar en Debian Lenny, esto nos daría error. Los errores se detallan en la sección Problemas.

    Por último combiene bajar,descomprimir y construir los fuentes en una carpeta como el /usr/src, si una de las carpetas, como por ejemplo "/src/otra carpeta/", tiene espacios en el nombre dá también error al construir los fuentes.


  3. GNU Binutils:

    	host:/usr/src# wget http://ftp.gnu.org/pub/gnu/binutils/binutils-2.15a.tar.bz2 
    	host:/usr/src# wget http://www.gnu-m68hc11.org/snapshots/binutils-2.15-m68hc1x-20040801.diffs.gz	
    	host:/usr/src# tar jxvf binutils-2.15a.tar.bz2	
    	host:/usr/src# gzip -d binutils-2.15-m68hc1x-20040801.diffs.gz
    	host:/usr/src# mv binutils-2.15 binutils-2.15-m68hc1x
    	host:/usr/src# cd binutils-2.15-m68hc1x
    	host:/usr/src/binutils-2.15-m68hc1x# patch -p1 < ../binutils-2.15-m68hc1x-20040801.diffs
    	host:/usr/src/binutils-2.15-m68hc1x# ./configure --target=m6812-elf --program-prefix=m6812-elf-
    	host:/usr/src/binutils-2.15-m68hc1x# make
    	host:/usr/src/binutils-2.15-m68hc1x# make install
    	host:/usr/src/binutils-2.15-m68hc1x# cd ..
    

    El fichero binutils-2.15.tar.gz fue reemplazado por binutils-2.15a.tar.bz2.


  4. GNU GCC

    	host:/usr/src# wget http://ftp.gnu.org/pub/gnu/gcc/gcc-3.3.5/gcc-3.3.5.tar.gz
    	host:/usr/src# wget http://www.gnu-m68hc11.org/snapshots/gcc-3.3.5-m68hc1x-20050515.diffs.gz
    	host:/usr/src# gzip -d gcc-3.3.5-m68hc1x-20050515.diffs.gz
    	host:/usr/src# tar xvzf gcc-3.3.5.tar.gz
    	host:/usr/src# mv gcc-3.3.5 gcc-3.3.5-m68hc1x
    	host:/usr/src# cd gcc-3.3.5-m68hc1x
    	host:/usr/src/gcc-3.3.5-m68hc1x# patch -p1 < ../gcc-3.3.5-m68hc1x-20050515.diffs
    	host:/usr/src/gcc-3.3.5-m68hc1x# ./configure --target=m6812-elf --program-prefix=m6812-elf- --enable-languages=c,c++
    	host:/usr/src/gcc-3.3.5-m68hc1x# make
    	host:/usr/src/gcc-3.3.5-m68hc1x# make install
    	host:/usr/src/gcc-3.3.5-m68hc1x# cd ..
    

  5. GNU GDB

    	host:/usr/src# wget http://ftp.gnu.org/pub/gnu/gdb/gdb-6.2a.tar.gz
    	host:/usr/src# wget http://www.gnu-m68hc11.org/snapshots/gdb-6.2-m68hc1x-20040829.diffs.gz
    	host:/usr/src# gzip -d gdb-6.2-m68hc1x-20040829.diffs.gz
    	host:/usr/src# tar xvzf gdb-6.2a.tar.gz
    	host:/usr/src# mv gdb-6.2 gdb-6.2-m68hc1x
    	host:/usr/src# cd gdb-6.2-m68hc1x
    	host:/usr/src/gdb-6.2-m68hc1x# patch -p1 < ../gdb-6.2-m68hc1x-20040829.diffs
    	host:/usr/src/gdb-6.2-m68hc1x# ./configure --target=m6811-elf --program-prefix=m6811-elf-
    	host:/usr/src/gdb-6.2-m68hc1x# make
    	host:/usr/src/gdb-6.2-m68hc1x# make install
    	host:/usr/src/gdb-6.2-m68hc1x# cd ..
    

    El fichero gdb-6.2.tar.gz fue reemplazado por gdb-6.2a.tar.gz.


  6. Compilando NEWLIB

    	host:/usr/src# wget ftp://sources.redhat.com/pub/newlib/newlib-1.12.0.tar.gz
    	host:/usr/src# wget http://www.gnu-m68hc11.org/snapshots/newlib-1.12.0-m68hc1x-20040801.diffs.gz
    	host:/usr/src# gzip -d newlib-1.12.0-m68hc1x-20040801.diffs.gz
    	host:/usr/src# tar xvzf newlib-1.12.0.tar.gz
    	host:/usr/src# mv newlib-1.12.0 newlib-1.12.0-m68hc1x
    	host:/usr/src# cd newlib-1.12.0-m68hc1x
    	host:/usr/src/newlib-1.12.0-m68hc1x# patch -p1 < ../newlib-1.12.0-m68hc1x-20040801.diffs
    	host:/usr/src/newlib-1.12.0-m68hc1x# cd ..
    	host:/usr/src# mkdir build-newlib
    	host:/usr/src# cd build-newlib
    	host:/usr/src/build-newlib# ../newlib-1.12.0-m68hc1x/configure --disable-newlib-io-float \
    	> --disable-newlib-multithread --target=m6812-elf --program-prefix=m6812-elf-
    	host:/usr/src/build-newlib# make CFLAGS="-g -Os -Wall"
    	host:/usr/src/build-newlib# make install
    	host:/usr/src/build-newlib# cd ..
    

  7. Binarios instalados

    	host:# ls /usr/local/bin
    	m6811-elf-gdb	     m6812-elf-cpp			   m6812-elf-objcopy
    	m6811-elf-gdbtui     m6812-elf-g++			   m6812-elf-objdump
    	m6811-elf-run	     m6812-elf-gcc			   m6812-elf-ranlib
    	m6812-elf-addr2line  m6812-elf-gcc-3.3.5-m68hc1x-20050515  m6812-elf-readelf
    	m6812-elf-ar	     m6812-elf-gccbug			   m6812-elf-size
    	m6812-elf-as	     m6812-elf-gcov			   m6812-elf-strings
    	m6812-elf-c++	     m6812-elf-ld			   m6812-elf-strip
    	m6812-elf-c++filt    m6812-elf-nm
    
    	host:# ls -R /usr/local/m6812-elf
    	/usr/local/m6812-elf:
    	bin  include  lib
    
    	/usr/local/m6812-elf/bin:
    	ar  as	c++  g++  gcc  ld  nm  ranlib  strip
    
    	/usr/local/m6812-elf/include:
    	_ansi.h     dirent.h	ieeefp.h    newlib.h   search.h  termios.h  wctype.h
    	_syslist.h  envz.h	langinfo.h  paths.h    setjmp.h  time.h
    	alloca.h    errno.h	limits.h    process.h  signal.h  unctrl.h
    	ar.h	    fastmath.h	locale.h    pthread.h  stdio.h	 unistd.h
    	argz.h	    fcntl.h	machine     pwd.h      stdlib.h  utime.h
    	assert.h    grp.h	malloc.h    reent.h    string.h  utmp.h
    	ctype.h     iconv.h	math.h	    regdef.h   sys	 wchar.h
    
    	/usr/local/m6812-elf/include/machine:
    	ansi.h	    ieeefp.h  setjmp-dj.h  stdlib.h   time.h
    	fastmath.h  malloc.h  setjmp.h	   termios.h  types.h
    
    	/usr/local/m6812-elf/include/sys:
    	_types.h  errno.h     lock.h   resource.h  stdio.h	times.h   wait.h
    	cdefs.h   fcntl.h     param.h  sched.h	   syslimits.h	types.h
    	config.h  features.h  queue.h  signal.h    time.h	unistd.h
    	dirent.h  file.h      reent.h  stat.h	   timeb.h	utime.h
    
    	/usr/local/m6812-elf/lib:
    	crt0.o	       ldscripts  libc.a  libm.a   mlong-calls	sim-valid.ld
    	fshort-double  libbcc.a   libg.a  m68hc11  mshort
    
    	/usr/local/m6812-elf/lib/fshort-double:
    	crt0.o	libbcc.a  libc.a  libg.a  libm.a  mlong-calls  sim-valid.ld
    
    	/usr/local/m6812-elf/lib/fshort-double/mlong-calls:
    	crt0.o	libbcc.a  libc.a  libg.a  libm.a  sim-valid.ld
    
    	/usr/local/m6812-elf/lib/ldscripts:
    	m68hc11elf.x	m68hc11elf.xu	 m68hc11elfb.xr  m68hc12elf.xn	m68hc12elfb.xbn
    	m68hc11elf.xbn	m68hc11elfb.x	 m68hc11elfb.xu  m68hc12elf.xr	m68hc12elfb.xn
    	m68hc11elf.xn	m68hc11elfb.xbn  m68hc12elf.x	 m68hc12elf.xu	m68hc12elfb.xr
    	m68hc11elf.xr	m68hc11elfb.xn	 m68hc12elf.xbn  m68hc12elfb.x	m68hc12elfb.xu
    
    	/usr/local/m6812-elf/lib/m68hc11:
    	crt0.o	       libbcc.a  libg.a  mlong-calls  sim-valid.ld
    	fshort-double  libc.a	 libm.a  mshort
    
    	/usr/local/m6812-elf/lib/m68hc11/fshort-double:
    	crt0.o	libbcc.a  libc.a  libg.a  libm.a  mlong-calls  sim-valid.ld
    
    	/usr/local/m6812-elf/lib/m68hc11/fshort-double/mlong-calls:
    	crt0.o	libbcc.a  libc.a  libg.a  libm.a  sim-valid.ld
    
    	/usr/local/m6812-elf/lib/m68hc11/mlong-calls:
    	crt0.o	libbcc.a  libc.a  libg.a  libm.a  sim-valid.ld
    
    	/usr/local/m6812-elf/lib/m68hc11/mshort:
    	crt0.o	       libbcc.a  libg.a  mlong-calls
    	fshort-double  libc.a	 libm.a  sim-valid.ld
    
    	/usr/local/m6812-elf/lib/m68hc11/mshort/fshort-double:
    	crt0.o	libbcc.a  libc.a  libg.a  libm.a  mlong-calls  sim-valid.ld
    
    	/usr/local/m6812-elf/lib/m68hc11/mshort/fshort-double/mlong-calls:
    	crt0.o	libbcc.a  libc.a  libg.a  libm.a  sim-valid.ld
    
    	/usr/local/m6812-elf/lib/m68hc11/mshort/mlong-calls:
    	crt0.o	libbcc.a  libc.a  libg.a  libm.a  sim-valid.ld
    
    	/usr/local/m6812-elf/lib/mlong-calls:
    	crt0.o	libbcc.a  libc.a  libg.a  libm.a  sim-valid.ld
    
    	/usr/local/m6812-elf/lib/mshort:
    	crt0.o	       libbcc.a  libg.a  mlong-calls
    	fshort-double  libc.a	 libm.a  sim-valid.ld
    
    	/usr/local/m6812-elf/lib/mshort/fshort-double:
    	crt0.o	libbcc.a  libc.a  libg.a  libm.a  mlong-calls  sim-valid.ld
    
    	/usr/local/m6812-elf/lib/mshort/fshort-double/mlong-calls:
    	crt0.o	libbcc.a  libc.a  libg.a  libm.a  sim-valid.ld
    
    	/usr/local/m6812-elf/lib/mshort/mlong-calls:
    	crt0.o	libbcc.a  libc.a  libg.a  libm.a  sim-valid.ld
    

  8. Problemas:

    1. Un problema que ocurre cuando se compila con una versión de gcc distinta a la 3.3.* es que tira lo siguiente al contruir, en este caso el bin-utils:
      	missing-prototypes -g -O2 -c app.c
      	In file included from ./targ-cpu.h:1,
      		         from ./config/obj-elf.h:42,
      		         from ./obj-format.h:1,
      		         from ./config/te-generic.h:19,
      		         from targ-env.h:1,
      		         from as.h:626,
      		         from app.c:30:
      	./config/tc-m68hc11.h:86: error: array type has incomplete element type
      	make[3]: *** [app.o] Error 1
      	make[3]: Leaving directory `host:/usr/src/binutils-2.15-m68hc1x/gas'
      	make[2]: *** [all-recursive] Error 1
      	make[2]: Leaving directory `host:/usr/src/binutils-2.15-m68hc1x/gas'
      	make[1]: *** [all] Error 2
      	make[1]: Leaving directory `host:/usr/src/binutils-2.15-m68hc1x/gas'
      	make: *** [all-gas] Error 2
      
    2. luego de esto definí la variable externa con export CC=gcc-3.3 y al volver a contruir:
      	host:/usr/src/binutils-2.15-m68hc1x# make
      	Configuring in libiberty
      	configure: loading cache ./config.cache
      	configure: error: `CC' has changed since the previous run:
      	configure:   former value:  gcc
      	configure:   current value: gcc-3.3
      	configure: error: changes in the environment can compromise the build
      	configure: error: run `make distclean' and/or `rm ./config.cache' and start over
      	make: *** [configure-libiberty] Error 1
      
      en la ante última línea menciona make distclean, así que ejecutando esto y luego tambien el configure nuevamente el make no dará este error.
    3. Cuando quice instalarlo en Wheezy, mezclando los repositorios:
      	host:/usr/src/binutils-2.15-m68hc1x# ./configure --target=m6812-elf --program-prefix=m6812-elf-
      	loading cache ./config.cache
      	checking host system type... i686-pc-linux-gnu
      	checking target system type... m6812-unknown-none
      	checking build system type... i686-pc-linux-gnu
      	checking for a BSD compatible install... /usr/bin/install -c
      	*** This configuration is not supported in the following subdirectories:
      	     target-libiberty
      	    (Any other directories should still work fine.)
      	/usr/bin/ld: cannot find crt1.o: No such file or directory
      	/usr/bin/ld: cannot find crti.o: No such file or directory
      	/usr/bin/ld: cannot find -lgcc_s
      	collect2: ld returned 1 exit status
      	*** The command 'gcc-3.3 -o conftest -g -O2   conftest.c' failed.
      	*** You must set the environment variable CC to a working compiler.
      

      Un sitio propone como solución hacer EXPORT CC="/usr/bin/gcc-2.95". Lo que nos lleva al siguiente error:

      	host:/usr/src/binutils-2.15-m68hc1x# make
      
      	...	
      	
      	./config/tc-m68hc11.h:86:26: error: array type has incomplete element type
      	make[3]: *** [app.o] Error 1
      	make[3]: se sale del directorio `/usr/src/hcs12/toolchain/binutils/binutils-2.15-m68hc1x/gas'
      	make[2]: *** [all-recursive] Error 1
      	make[2]: se sale del directorio `/usr/src/hcs12/toolchain/binutils/binutils-2.15-m68hc1x/gas'
      	make[1]: *** [all] Error 2
      	make[1]: se sale del directorio `/usr/src/hcs12/toolchain/binutils/binutils-2.15-m68hc1x/gas'
      	make: *** [all-gas] Error 2
      

      No se bien cual será el error, pero el problema de esto es que si seteas la variable CC con gcc-3.3 te dá error y sin esa variable dá error de que no tiene el gcc de la versión necesitada, creo que el problema esta en la glibc el bin-utils para esa versión de gcc que necesita la glibc-dev de esa versión y no la puede instalar por que entra en conflicto con la versión mas reciente.


    4. El mensaje: No space left on device. El disco se quedo sin espacio, para liberar la memoria se pude correr apt-get clean, o para el caso de usar una unidad virtual elegir una unidad mas gran o también compartir el directorio /usr/src agregando en el fstab:
      	/usr/src	/mnt/etch/usr/src    none    bind 	     0       0
      

      	cp: writing `/usr/local/lib/gcc-lib/m6812-elf/3.3.5-m68hc1x-20050515/m68hc11/mshort/mlong-calls//_inst.11803_': No space left on device
      	make[2]: *** [install] Error 1
      	make[2]: Leaving directory `/usr/src/gcc-3.3.5-m68hc1x/gcc'
      	make[1]: *** [install-multilib] Error 2
      	make[1]: Leaving directory `/usr/src/gcc-3.3.5-m68hc1x/gcc'
      	make: *** [install-gcc] Error 2
      

      Otra cosa que puede ser es que no se tenga la sufiente memoria ram.


  9. Enlaces y referencias:

    1. Enlaces y referencias


INICIO   Otros temas