Vantaggi - Copertina - Posta |
Articolo
Un compilatore utilizza due fasi, nella prima analizza il codice sorgente
da eventuali errori ecc, la seconda trasforma il file scritto, ad esempio in C, in assembler.
Naturalmente l'assembler dipende da CPU a CPU, quindi mentre la prima
fase è uguale per tutte, la seconda dipende dalle rispettive istruzioni
macchina della CPU. Il compilatore gcc della GNU ha la possibilità
di scegliere, in fase di compilazione dello stesso, per quale CPU creare
le istruzioni assembler. Ad esempio se in C abbiamo una istruzione int
a
, essa dice al compilatore di riservare un area di memoria di 2 byte,
per ix86 equivale in assembler a pippo, mentre per Alpha a pluto. Alla
fine basta dare al compilatore il set di istruzioni assembler per la particolare
CPU, modificando in questo modo solo una piccola parte del compilatore
stesso. Per creare un programma binario, in generale, abbiamo bisogno:
Compilatore file.c-> file.s
Assemblatore file.s->file.o
Linker e Libreria file.o->file (eseguibile)
Abbiamo bisogno quindi dei sorgenti di:
binutils (2.9.1.0.4)
gcc o egcs ( 1.1b)
libc (2.0.97)
tra parentesi ci sono le versioni da me usate per creare un cross compiler
per Alpha. Decidiamo di installare i binari e librerie nella directory
/home/cross/alpha
ed /path/src
la directory dove scompattare e compilare, poi basta
eseguire in ordine:
export PATH=$PATH:/home/cross/alpha/bin
ASSEMBLATORE E LINKER
#cd /path/src tar -zxvf binutils-2.9.1.0.4.tar.gz
#cd binutils-2.9.1.0.4
#mkdir build
#cd build
#export CFLAGS=-O2
#export CXXFLAGS=-O2
#../configure --target=alpha-pc-linux-gnu --prefix=/home/cross/alpha
--disable-shared -v;make all install
COMPILATORE
#cd /path/src
#tar -zxvf egcs-1.1b.tar.gz
#cd egcs-1.1b
#cd gcc
#mkdir build
#cd build
#export CFLAGS=-O2
#export CXXFLAGS=-O2
#../configure --target=alpha-pc-linux-gnu --prefix=/home/cross/alpha
--disable-shared --with-gnu-ld --with-gnu-as
Editare il file Makefile ed aggiungere alla variabile LIBGCC2_FLAGS -Dinhibit_libc
make; make install
LIBRERIA
#cd /path/src
#tar -zxvf glibc-2.0.97.tar.gz
#cd glibc-2.0.97
#tar -zxvf glibc-linuxthreads-2.0.97.tar.gz
#tar -zxvf glibc-crypt.2.0.97.tar.gz
#export CC=alpha-pc-linux-gnu
#export CFLAGS=-O2
#rm /usr/src/linux/include/asm
#ln -sf /usr/src/linux/include/asm-alpha /usr/src/linux/include/asm
#mkdir build
#cd build
#../configure --enable-add-ons=linuxthreads,crypt --host=alpha-pc-linux-gnu
--prefix=/home/cross/alpha --with-binutils=/home/cross/alpha/bin
--with-headers=/usr/src/linux/include --disable-shared --with-elf
#make ;make install
Si può anche compilare il kernel per Alpha, basta solo l'assemblatore
ed il compilatore; basta editare il Makefile in /usr/src/linux/
e modificare
la variabile ARCH=alpha
ed CROSS_COMPILE= alpha-pc-linux-gnu-
ed poi eseguire:
#make menuconfig
#make clean
#make dep
#make zImage
In questo modo potete crearvi una distribuzione Linux per una CPU , basta avere solo il codice sorgente. Bello NO!!!!!!!!!!!!!!!!!!
Vantaggi - Copertina - Posta |