Embedded Linux – Sistema Operativo Linux per Microcontrollori – Linux e uClinux
Linux è diventato molto popolare perchè è stato lanciato come un progetto open source, sviluppato da un gruppo di programmatori molto appassionati. Può avviarsi su differenti sistemi, dai PDA ai semplici computer. Attualmente viene descritto come un OS pienamente portabile e versatile.
Linux Embedded si riferisce principalmente al Kernel Linux il quale è la base di ogni sistema operativo. Per applicazioni integrate, è personalizzato per ogni microprocessore. ARM è uno dei processori ampiamente usato con Linux come un sistema applicativo di processore. Un altro enorme vantaggio è il supporto per sistemi multiprocessore ed applicazioni simultaneamente in esecuzione.
Embedded Linux è utilizzato da diverse compagnie su piattaforme hardware per applicazioni specifiche, ad esempio Freescale lo utilizza per piattaforme i.MX.
uCLinux (Linux per MicroControllori) è una variante del sistema Linux senza l’unità di gestione memoria (MMU). È stato inizialmente creato partendo dal Kernel Linux 2.0. Oggi uCLinux è disponibile per le release del Linux Kernel 2.0, 2.4 e 2.6. Quando non è presente il supporto MMU, lo spazio del kernel e dell’utente sono la stessa cosa; inoltre non è necessario nessun sottosistema di memoria virtuale perché tutti i codici vengono eseguiti sul Privilege Level 0.
Un sistema operativo base ha differenti livelli di vantaggio: lo spazio del Kernel viene eseguito in modalità Supervisore ( Supervisor Mode) mentre le applicazioni utente in modalità Utente (User Mode). Solo lo spazio del Kernel ha accessi diretti alle risorse, alla memoria e ai dispositivi I/O.
Fig.1 Linux sull’hardware
Come rendere differenti una versione di Linux per un PC ed una per applicazioni integrate? Innanzitutto dovete sapere che un sistema embedded di solito non ha un monitor né una tastiera o mouse per l’interazione con l’interfaccia utente (UI). Le applicazioni embedded usano connessioni con il mondo reale in analogico e in digitale, sia per l’ingresso che per l’uscita, pulsanti e switch per l’inserimento dei dati, protocolli UART/LAN/USB/ecc. per il trasferimento dei dati.
Fig.2 Ingressi e uscite su un personal computer e su un sistema Embedded (Esempio)
Il Bootloader
Uno dei componenti più importanti in ogni applicazione embedded è il Bootloader. Le sue funzioni principali sono: inizializzazione dell’hardware sulla scheda, caricamento e avviamento del Kernel dalla memoria ROM. La memoria ROM è usata perché è una memoria non volatile (non richiede alimentazione per mantenere il contenuto).
Fig.3 Il Bootloader è posizionato sui primi indirizzi di memoria.
Come scrivere un driver Linux
Ogni driver Linux, chiamato anche modulo, necessita di due funzioni di base: init_module() e cleanup_module().
Esempio di un semplice Hello eLinux:
Per l’integrazione nel Kernel Liunux abbiamo bisogno di un’altra operazione:
- insmod (inserisci driver) Per rimuovere il driver, bisogna eseguire il seguente comando: -rmmod (rimuovi driver) Per verificare se un driver è stato correttamente integrato: -lsmod (elenca tutti i driver correnti)
Valutazione della scheda
Un’ottima scheda di sviluppo con processore ARM è stata distribuita da Cirrus Company. La EP9312 è un sistema su chip (system-on-chip) basato sul ARM920-T con velocità di 200MHz. E’ munito di alcune periferie per l’interfacciarsi con il mondo esterno: Ethernet, USB Host, display, ADC.
Leggi anche la variante inglese: Embedded Linux - Linux Operating System for Microcontrollers
Spiegati meglio….. è un articolo con info di base, non un approfondimento. Hai letto la nostra versione originale (inglese)?