“Integrazione di un sistema operativo basato su uClinux nel microcontrollore STR710”
Introduzione
In questa tesi tratteremo la problematica dell’integrazione di un sistema
operativo in un ambiente embedded.
L’architettura embedded su cui sarà integrato il sistema operativo, è
costituita dal microcontrollore STR710 prodotto da ST Microelectronics azienda
italo-francese leader nel settore elettronico, basato sul core ARM7TDMI,
contraddistinto dall’assenza di una memory management unit che ne determina, a
fronte di una minore complessità realizzativi. un più basso costo di produzione, ed
un’ottima applicabilità in soluzioni avanzate di controllo, con un basso impatto sul
costo finale.
L’esigenza dell’integrazione di un sistema operativo in un ambiente
embedded nasce dall’attuale situazione di mercato, dove la progressiva
informatizzazione di tutti gli apparati, che prima erano controllati da logiche molto
semplici, sta evolvendo verso nuove soluzioni.
Questa informatizzazione è resa possibile dal costante aumento delle
capacità elaborative dei microcontrollori a basso costo.
La progressiva tendenza all’automazione nei vari settori della vita, home e
car automation, chiede al mercato soluzioni low-cost.
In quest’ottica di visione del mercato, un ruolo cruciale è svolto dal sistema
operativo, che permetterà ad un’azienda di rendere le soluzioni di controllo
indipendenti dalla piattaforma, rendendo meno onerosi i lavori di porting tra le
varie architetture di controllo, e di sostenere meglio l’evoluzione dei dispositivi.
Inoltre l’adozione di un sistema operativo, permette di accorciare
notevolmente i tempi di sviluppo, potendo così adottare soluzioni e funzionalità più
complesse rispetto all’odierno stato dell’arte.
Michele Tumminelli
[email protected]
- 7 -
“Integrazione di un sistema operativo basato su uClinux nel microcontrollore STR710”
Avendo deciso l’adozione di un microcontrollore privo di MMU, si è
vincolati anche nella scelta di quei pochi sistemi operativi in grado di operare in
queste architetture.
Una delle soluzioni più valide presenti sul mercato è rappresentata da
uClinux, versione embedded di linux.
Questo sistema multi-tasking ci permette di astrarre la progettazione del
controllo dalla rigida e complessa architettura hardware.
Abbiamo inoltre a disposizione il sorgente, rilasciato su licenza GPL, che ci
permette di personalizzare e ritagliare il kernel secondo le necessità, potendo
contare su una comunità di sviluppatori molto vasta, avendo a disposizione una
gran quantità d’applicativi disponibili di cui eseguire il porting o da poter
modificare.
L’integrazione dovrà essere completata dai driver necessari al controllo
dell’ambiente, permettendo un rapido e semplificato sviluppo degli applicativi.
Inoltre da non sottovalutare la possibilità di fornire al mercato un dispositivo
contenente una piattaforma open di sviluppo, questo potrebbe creare una comunità
di sviluppatori che potrebbero personalizzare ed espandere i dispositivi, dando
all’utente la possibilità di evolvere il proprio dispositivo.
La tesi esporrà nell’arco di otto capitoli gli argomenti principali che
coinvolgono la complessa attività di integrazione del sistema operativo in un
architettura basata sul microcontrollore STR710 prodotto da ST Microelectronics.
Il primo capitolo contiene una sintesi delle principali caratteristiche che
contraddistinguono il microcontrollore, analizzando in dettaglio la gestione della
memoria.
Michele Tumminelli
[email protected]
- 8 -
“Integrazione di un sistema operativo basato su uClinux nel microcontrollore STR710”
Si terranno conto dei principali aspetti necessari allo sviluppatore per una
corretta comprensione dell’ambiente nel quale dovrà operare.
Nel secondo capitolo saranno trattati i bus appositamente progettati per i
sistemi embedded, questa esposizione è necessaria per far fronte alle necessità di
modularità ed espandibilità che la soluzione general purpose esposta richiede.
Saranno trattati nella prima parte del capitolo i bus per sistemi desktop ISA
e PCI, poiché i bus per i sistemi embedded possono essere considerati come
trasposizione di tali bus in ambiente embedded, visto che la differenza principale
tra le tipologie di bus sta nelle caratteristiche meccaniche ma non elettronico.
Dopo saranno trattate i bus per sistemi embedded, dove saranno mostrate
degli schematici delle realizzazioni meccaniche, dato che ogni tipologia di bus
propone diverse soluzioni, inoltre questi bus rispettano le problematiche di
dissipazione energetica a cui i sistemi embedded sono soggetti.
Il terzo capitolo tratterà il sistema operativo che si intende integrare sul
microcontrollore, uClinux, progetto open-source derivato dal kernel di linux.
Saranno illustrati i vari aspetti che contraddistinguono questo sistema
operativo, dando ampio spazio alla gestione della memoria, considerato che le
maggiori diversità dal kernel di linux stanno nella capacità di operare in ambienti
privi di memory management unit.
Inoltre introdurremo la struttura della distribuzione e sensibilizzeremo alla
problematica del cross-compiling.
Nel quarto capitolo sarà trattato il debug nei sistemi embedded.
Per una soluzione integrata la necessità di validi strumenti di debug è una
caratteristica non sottovalutabile, poiché è indispensabile offrire alla comunità degli
sviluppatori varie soluzioni di controllo e supervisione degli applicativi.
Per prima cosa tratteremo le diverse metodologie di debug oggi utilizzate,
per poi trasporle nell’ambito dei sistemi embedded, fornendo delle soluzioni
applicative sofisticate, inoltre sarà esposto un metodo pratico per il debug del
Michele Tumminelli
[email protected]
- 9 -
“Integrazione di un sistema operativo basato su uClinux nel microcontrollore STR710”
kernel attraverso un economica interfaccia JTAG basata su interfaccia parallela, la
wiggler.
Il quinto capitolo esporrà lo sviluppo, in termini generali, dei driver nei
sistemi operativi linux.
Queste metodologie sono applicabili anche a uClinux.
Dopo una introduzione ai driver, sarà trattato lo sviluppo di moduli per il
kernel, e il modo in cui i moduli interagiscono con il kernel ed il sistema operativo
nell’accesso alle risorse ed alla memoria.
Nel sesto capitolo tratteremo in dettaglio l’implementazione dei driver a
caratteri, questa esposizione tecnica è rilevante poiché l’astrazione dei device come
streaming di caratteri è una delle più generiche e di maggiore applicabilità nella
risoluzione di svariate problematiche.
Qui introdurremo tutte le strutture coinvolte nello sviluppo dei driver a
caratteri, e saranno illustrati gli entry points messi a disposizione dal kernel per
l’interfacciamento.
Infine una volta a conoscenza della struttura che contraddistingue
l’ambiente di sviluppo esporremo la metodologia di progettazione e pianificazione
dei driver a caratteri.
Il settimo capitolo darà un esempio reale d’implementazione di un driver per
il pilotaggio di un display LCD, astraendo il device come periferica a caratteri.
L’esposizione sarà metodologica, mostrando le varie fasi dello sviluppo, ed
infine sarà descritto il codice implementativo risultato della progettazione e
modellizzazione svolta.
Nell’ottavo capitolo sarà data piena dignità alla trattazione, dando un
esempio concreto d’integrazione.
Qui saranno messi in evidenza come tutti i fattori esposti nei capitoli
precedenti concorrono all’integrazione effettiva di un sistema embedded general
Michele Tumminelli
[email protected]
- 10 -
“Integrazione di un sistema operativo basato su uClinux nel microcontrollore STR710”
purpose, dando una visione del mercato e degli ambiti applicativi a cui sono
destinati.
Michele Tumminelli
[email protected]
- 11 -
“Integrazione di un sistema operativo basato su uClinux nel microcontrollore STR710”
1 STR710
1.1 Introduzione
In questo capitolo daremo una panoramica di base del microcontrollore
STR710 prodotto da ST Microelectronics e basato sul core ARM7TDMI.
Esporremo le nozioni basilari necessarie ad una comprensione della struttura
architetturale del microcontrollore, che lo sviluppatore deve conoscere per poter
operare in un ambiente embedded.
Da prima esporremo le principali caratteristiche del microcontrollore, di
seguito elencheremo tutte le periferiche integrate nell’architettura progettata da ST,
queste informazioni evidenzieranno la natura molto versatile del microcontrollore
che daranno un’idea dei vasti scenari applicativi in cui può essere usato e di
conseguenza cominciano a giustificare la necessità dell’utilizzo di un sistema
operativo per la loro gestione.
Importante notare come il mercato embedded si sta evolvendo negli ultimi
anni, con un elevato trend di crescita e diffusione, il cambiamento delle architetture
usate e la loro maggiore potenza rispetto al passato, aprono uno scenario
applicativo totalmente nuovo, giustificato da una costante crescita della domanda
d’apparati embedded general purpose, come ad esempio i cellulari di nuova
generazione, i palmari, navigatori satellitari.
In seguito ci soffermeremo sulla strutturazione della memoria, di cui è
fondamentale capirne il funzionamento, poiché in STR710 tutto è mappato in
memoria, qui si evidenzieranno i primi limiti del microcontrollore in grado di
indirizzare solo 16 MBytes esterni, che dovranno essere utilizzata per collegare
memoria RAM, Flash o altri dispositivi come i display LCD che si vogliono
mappare in memoria.
Michele Tumminelli
[email protected]
- 12 -
“Integrazione di un sistema operativo basato su uClinux nel microcontrollore STR710”
Questa sezione evidenzierà la necessità dell'introduzione nella progettazione
di uno strumento versatile per poter espandere il sistema.
L’introduzione di un bus consente il collegamento di diversi dispositivi e
garantisce un’ampia espandibilità.
Dopo, sarà dato spazio ad uno dei maggiori pregi dell’architettura ARM, il
modulo di debug ICE integrato nel core.
Questo modulo permette l'esecuzione del debug delle applicazioni stand-
alone con una velocità, flessibilità ed efficaci davvero notevoli per un sistema
embedded, purtroppo gli stessi benefici non sono fruibili nel caso che si vuole
eseguire il debug di un’applicazione che gira su un layer di sistema operativo, ma è
in ogni caso possibile eseguire il debug del kernel del sistema operativo.
Infine tratteremo le principali peculiarità del core ARM7TDMI come
l’assenza della MMU (Memory Management Unit), che riduce di molto la
complessità interna del core, caratterizzando così STR710 di un ottimo rapporto
qualità prezzo, e di un basso costo che n’avvantaggia la diffusione su larga scala.
Michele Tumminelli
[email protected]
- 13 -
“Integrazione di un sistema operativo basato su uClinux nel microcontrollore STR710”
1.2 Panoramica
La serie STR71xF di cui STR710 fa parte è una famiglia di microcontrollori
prodotta da ST Microelectronics basati sul core ARM7TDMI a 32 bit con Flash e
RAM integrati.
Esso combina le alte performance del core ARM7TDMI con un vasto
panorama di periferiche integrate ed elevate capacità di I/O.
Tutti gli STR71xf avendo integrato un core ARM, sono compatibili con tutti
i tools e programmi sviluppati per gli ARM.
Michele Tumminelli
[email protected]
- 14 -
“Integrazione di un sistema operativo basato su uClinux nel microcontrollore STR710”
1.3 Principali Caratteristiche
1.3.1 Gestione flessibile dell’alimentazione
Per poter minimizzare il consumo d’energia, si può settare STR710 per
cambiare tra i seguenti modi di funzionamento: SLOW, WAIT FOR INTERRUPT,
STOP or STANDBY; questi modi dipendono dall’attività dell’applicazione.
1.3.2 Controllo flessibile del Clock
Possono essere usate due sorgenti di clock esterni, un clock principale ed
uno a 32 kHz di backup.
Il PLL integrato permette di generare un clock interno di sistema (sino a 50
MHz) con un clock principale esterno di soli 16 MHz.
L’uscita del PLL può essere settata scegliendo tra una vasta gamma di
moltiplicatori e divisori.
1.3.3 Regolazione del voltaggio
STR710 richiede un’alimentazione esterna compresa tra 3.0 V e 3.6 V.
Sono presenti 2 regolatori di tensione interna, che generano una tensione di
1.8 V per alimentare il core e le periferiche, quando STR710 entra nei modi
Standby o Low Power Wait for Interrupt (LPWFI) il regolatore principale di
tensione viene spento ed entra in funzione il regolatore di tensione a bassa potenza.
1.3.4 Rilevatore di bassa tensione
Ogni regolatore di tensione interno è monitorato da un LVD che controlla la
tensione interna di 1.8 V, se la tensione d’alimentazione scende sotto ad una certa
soglia l’unità LVD resetta STR710.
Michele Tumminelli
[email protected]
- 15 -
“Integrazione di un sistema operativo basato su uClinux nel microcontrollore STR710”
1.4 Periferiche integrate
1.4.1 Interfaccia CAN
Il modulo CAN è implementato secondo le specifiche CAN V2.0 parte B
(active). Il bit rate massimo che può raggiungere è un MBaud.
1.4.2 Interfaccia USB
L’interfaccia USB full–speed è basata sulle specifiche USB V 2.0, essa
fornisce sino a 8 endpoints bidirezionali o 16 endpoints unidirezionali, con una
velocità massima di 12 Mb/s in modalità full-speed, essa inoltre supporta il bulk
transfer e le modalità USB Suspend e Resume.
1.4.3 Standard Timers
Sono disponibili 4 timers indipendenti con una capacità di 16 bit con 7 bit di
prescaler, sino a 2 input capture/output, un contatore d’impulsi, e un canale PWM
(Pulse with Modulation) con frequenza selezionabile.
1.4.4 Real time Clock (RTC)
IL Real time Clock fornisce un set di contatori, incrementati da un
oscillatore interno a basso assorbimento da 32 KHz.
RTC può essere usato come un generatore di tempi o clock, calendario e
allarmi.
In modalità Standby RTC può essere tenuto aggiornato, essendo alimentato
dal generatore di tensione a basso consumo integrato e aggiornato dall’oscillatore
interno da 32 kHz.
Michele Tumminelli
[email protected]
- 16 -
“Integrazione di un sistema operativo basato su uClinux nel microcontrollore STR710”
1.4.5 UART
Nel STR710 sono integrate 4 porte seriali UART full duplex, asincrone, che
possono comunicare con periferiche esterne con un baud rate programmabile per
ogni singola porta con velocità massima di 625 kb/s.
1.4.6 Interfaccia Smartcard
La porta seriale UART1 è configurabile come un’UART standard o come
interfaccia asincrona per Smartcard conforme allo standard ISO 7816-3, essa
include la generazione del clock della Smartcard e supporta le schede sincrone.
1.4.7 Buffered Serial Peripheral Interfaces (BSPI)
Le due periferiche SPI permettono una comunicazione full duplex, sincrona,
con le periferiche esterne, supportando comunicazioni di tipo sia Master che Slave
con velocità massima rispettivamente di 5.5 Mb/s in modalità master e di 4 Mb/s in
modalità Slave.
1.4.8 Interfaccia I
2
C
Sono disponibili due interfacce I
2
C che supportano le modalità multi-master
e slave, l’interfaccia supporta le velocità normal e fast (400 kHz) e 7 o 10 bit
d’indirizzamento.
Una delle interfacce I
2
C è multiplexata con una SPI, quindi possono essere
usate le seguenti modalità: 2xSPI+1x I
2
C or 1xSPI+2x I
2
C.
1.4.9 Interfaccia HDLC
Michele Tumminelli
[email protected]
- 17 -