Home
Repository 32bit  Forum
Repository 64bit  Wiki

Modifiche

Framebuffer Console HOWTO

2 byte aggiunti, 16:45, 9 nov 2007
Nozioni di Base
Nei moderni computer lo scopo principale della console è amministrativo. Genericamente attraverso la console si visualizzano informazioni sull'avvio o sullo stato del sistema e si avviano gli applicativi o gli ambienti per l'utilizzo effettivo del computer (solitamente grafici).
Per quanto riguarda Linux, è possibile compiere pressochè pressoché qualsiasi operazione da console. Considerato però che il terminale fisico dispone spesso di uno spazio relativamente limitato per la visualizzazione delle informazioni (un monitor), è molto facile sentirsi "stretti". Proprio per questo motivo, Linux implementa i cosiddetti "Terminali (o Console) Virtuali" (fra i tanti tipi di console che supporta), il cui scopo è permettere di eseguire sullo stesso terminale fisico più istanze della console, ognuna collegata ad un proprio terminale virtuale, permettendo di switchare fra di esse con la pressione di qualche semplice HotKey (ALT+F1, ALT+F2, etc).
Tramite le console virtuali sarà quindi possibile, ad esempio, effettuare in una console la conversione di un mp3 mentre in un altra console si tiene d'occhio l'utilizzo della CPU con un programma apposito, mentre in un altra console ancora un client bittorrent scarica un file. Per un utente Linux questo modo di operare rappresenta il normale utilizzo del computer, anche se si tratta a tutti gli effetti di una conquista, valutando la storia dei terminali e delle console nell'informatica.
Come detto, il dispositivo normalmente usato per la visualizzazione delle console è il monitor. In realtà, il monitor serve solo per "proiettare" ciò che il vero dispositivo per la gestione video realizza, l'adattatore grafico, o scheda video.
Storicamente parlando, sono esistiti una quantità notevole di adattatori grafici, ognuno con un proprio standard e proprie caratteristiche. Man mano che la qualità degli adatattori adattatori grafici cresceva, la qualità dei monitor cresceva di pari (a volte) passo.
Fra tutti gli standard che nel tempo si sono susseguiti (CGA, EGA, etc), lo standard VGA (dovuto ad IBM) è stato il primo ad essere unanimemente accettato ed implementato dai vari produttori hardware e software, diffondendosi al punto tale che oramai è considerato il minimo comune denominatore che i personal computer devono avere per la gestione della grafica. Basti pensare che sistemi operativi diffusi come Windows si avviano visualizzando splash screen in modalità VGA senza nemmeno prendere in considerazione l'ipotesi che l'hardware non possa supportarlo.
Le caratteristiche pricipali principali dello standard VGA, utili a questo articolo, sono una risoluzione massima di 640x480 pixel (il pixel per chi non lo sapesse è un singolo punto rappresentabile su schermo) ed una profondità massima di 256 colori a 70hz, oltre alla possibilità di operare sullo schermo considerandolo tanto una matrice di caratteri (text mode) quanto una matrice di punti (APA, All Points Addressable) per la visualizzazione di grafica.
Linux implementa la possibilità di utilizzare la console su dispositivi in grafica VGA per le console virtuali tramite il driver vgacon. Si tratta della normale console a bassa risoluzione cui tutti siamo abituati e che, salvo indicazioni differenti, il kernel Linux carica come driver di default per la console di sistema (vedi oltre). vgacon permette ovviamente l'utilizzo della console in modalità VGA tanto testuale quanto grafica.
I limiti di VGA si fecero presto sentire, come è ovvio aspettarsi. Per questo motivo, la "Video Electronics Standards Association" (VESA, un consorzio il cui scopo era ed è promuovere e definire standard per l'interoperabilità video) definì un nuovo set di standard, chiamato Super VGA (SVGA). Nella sua prima versione, SVGA permetteva di arrivare ad una risoluzione di 800x600 a 4bit (16 colori), per poi arrivare presto a risoluzioni di 1024x768 ad 8 bit (256 colori) ed oltre. Per quanto oramai lo standard SVGA permetta ben altro, quando si fa riferimento alla "risoluzione SVGA" s'intende una risoluzione di 800x600 pixel, di cui è diventata sinonimo. Per modalità SVGA invece s'intendono normalmente tutte le modalità superiori a VGA (per quanto sia un uso improprio del termine).
Come è solito accadere comunque, molti sviluppatori hardware/software svilupparono nuovi standard al di fuori degli standard VESA (IBM in testa), fra cui citiamo ad esempio XGA, SXGA ed UXGA, ognuna con propri limiti e caratteristiche. Lo scopo è stato a volte l'innovazione, a volte il desiderio di conquistarsi fette di mercato, a volte la pura follia o l'orgoglio smisurato. Il risultato è che all'alba del 2008, dopo 20 anni dalla definizione di VGA, ci troviamo con una confusione assoluta in quanto a standard video e modalità d'accesso e di utilizzo degli adattatori grafici, che raramente rispettano gli standard VESA ed anche quando lo fanno spesso lo fanno a modo proprio. Come se non bastasse, i produttori hardware raramente rilasciano le specifiche tecniche delle proprie schede o dei propri standard. Da questo si deduce quanto possa essere complicato il supporto a questo tipo di dispositivi senza l'utilizzo di driver propietariproprietari.
Nonostante ciò, il kernel linux permette l'utilizzo della console in modalità grafiche superiori alle modalità VGA tramite l'utilizzo della modalità framebuffer.
Per "framebuffer" s'intende una modalità di utilizzo del dispositivo video basato su un buffer di memoria che contiene le informazioni necessarie alla visualizzazione di un intero fotogramma (detto frame, da cui framebuffer. Rimando ai link a fondo pagina per chi vuole approfondire il discorso).
Su linux questo è implementato tramite un interfaccia standard indipendente dall'hardware, il driver "fbdev", il quale tramite un opportuno driver s'interfaccia a sua volta all'hardware specifico. Gli applicativi disegnano all'interno del framebuffer tramite fbdev, il quale poi visualizza il risultato in parte od interamente utilizzando il driver specifico. In questo modo a conti fatti gli sviluppatori dei vari software non hanno necessità di conoscere alcunchè alcunché delle schede video che andranno ad utilizzare.
Linux permette di visualizzare le console su dispositivi framebuffer tramite il driver "fbcon", allo scopo di abbattere i limiti delle modalità VGA.
(M) frame buffer device
La (M) indica che si tratta di un Modular Driver. Se si fosse trattatto trattato del System Driver, avremmo avuto (S).
Il tipo di System/Modular driver che verranno impostati all'avvio del kernel dipende:
Il driver dummycon ha la peculiarità di non visualizzare nessun tipo di output, serve solo ed unicamente per permettere al kernel di prendersi il dovuto tempo per caricare il Modular Driver più appropriato secondo lo stesso schema del paragrafo precedente, per poi fargli prendere il sopravvento.
Questo scenario ha due aspetti negativi. Il primo è che se per un caso del destino fbcon non riesce a prendere il sopravvento, ci ritroveremo con una console inutilizzabile poichè poiché muta. Il secondo è che nel momento in cui viene disattivato un Modular Driver per una virtual console (ad esempio per caricarne un altro) ci troveremo con una console nuovamente muta, poichè poiché il controllo viene restituito a dummycon nella sua veste di System Driver.
L'unico pregio di questa soluzione è puramente estetico, in quanto fino all'avvio di fbcon non verrà visualizzato nessun output a video, ideale per la realizzazione di Splash Screen grafici privi di qualsivoglia testo.
Se comunque siamo sicuri di aver configurato correttamente il kernel per l'utilizzo di fbcon (come dovrebbe essere alla fine di questo articolo), nulla vieta di utilizzare l'avvio in modalità grafica inibendo del tutto vgacon. In ogni caso è sempre possibile passare al kernel il parametro "vga=normal" per riottenere la console standard VGA.
Nel caso in cui si desideri utilizzare il driver vesafb (ad esempio perchè perché non è disponibile nessun driver specifico per la nostra scheda) e si desideri altresì altre sì avere la modalità grafica impostata fino dal boot process, purtroppo questa rimane l'unica scelta possibile, in quanto vesafb utilizza il parametro "vga" per impostare la propria risoluzione all'avvio e non esistono altri parametri per comunicarglielo.
=Configurazione del kernel=
789
contributi