SCALETTA LEZIONE SERT E6 -- 8 novembre 2012 1 ****** Cross-compiler 1.1 Installare crosstool-ng 1.2 Eseguire "ct-ng menuconfig" 1.3 Eseguire "ct-ng build" 1.4 Aggiungere alla variabile d'ambiente PATH la cartella di installazione del cross-compiler (/opt/x-tools/arm-ts7250-eabi/bin) 2 ****** Il processo di compilazione 2.1 Scrivere noop.c 2.1 Compilare noop.c 2.1.1 Compilazione: +-----------------------------------------------------------------+ |$ arm-ts7250-eabi-gcc -Wall -Wextra -Os -ffreestanding -c noop.c | +-----------------------------------------------------------------+ 2.1.2 Collegamento: +------------------------------------------------------------+ |$ arm-ts7250-eabi-ld -nostdlib -e noop -o sert.elf noop.o | +------------------------------------------------------------+ 2.2 Estrazione del codice macchina: +------------------------------------------------------------+ |$ arm-ts7250-eabi-objcopy -S -O binary sert.elf sert.bin | +------------------------------------------------------------+ 2.3 Controllo del file ELF e del file binario +------------------------------------------------------------+ |$ arm-ts7250-eabi-objdump -d sert.elf | | | |sert.elf: file format elf32-littlearm | | | | | |Disassembly of section .text: | | | |00008000 : | | 8000: eafffffe b 8000 | | | |$ hexdump -C sert.bin | |00000000 fe ff ff ea | |00000004 | +------------------------------------------------------------+ 3 ****** Caricamento dell'eseguibile ed esecuzione 3.1 Lanciare minicom 3.2 Caricare in RAM il programma con "load -r -b 0x60000 -m x" 3.2.1 Avviare il trasferimento di sert.bin con +S ("xmodem") 3.3 Eseguire con "go" oppure "exec" 4 ****** Scrittura del Makefile 4.1 Scrivere Makefile 4.2 Compilare ed eseguire 4.2.1 make clean 4.2.2 make 5 ****** Feedback dai led della scheda 5.1 Consultare il manuale della scheda TS-7250 5.2 Modificare noop.c per accendere i led: +--------------------------------+ |void noop(void) | |{ | | int *led; | | | | led = (int *) 0x80840020; | | /* Both LEDs on */ | | *led = 0b11; | | for (;;); | |} | +--------------------------------+ 5.3 Modificare noop.c per far lampeggiare i led: +--------------------------------+ |void noop(void) | |{ | | volatile int *led; | | int state = 0; | | int c; | | | | led = (int *) 0x80840020; | | for (;;) { | | state = 1-state; | | *led ^= 2*state+1; | | for (c=0; c<100000; ++c) | | *led = *led; | | } | |} | +--------------------------------+ 5.4 ATTENZIONE: il programma NON e' corretto: funziona solo "per caso" 5.4.1 Problema principale: le variabili automatiche possono essere memorizzate sullo stack, che non e' stato predisposto 5.4.2 In questo caso le variabili sono cosi' poche che il compilatore puo' limitarsi ad usare registri