Newsgroup: it.comp.os.linux.sys
Titolo: framebuffer per nvidia riva tnt

salve pinguini.
Ho compilato il kernel 2.4 con il supporto per il framebuffer per la
mia scheda grafica (riva tnt2 ultra), ma mi ritrovo di fronte a un
paio di problemi:
1)
ho messo in /etc/fb.modes tutto il necessario per inizializzare il
fb con la risoluzione che mi torna piu' comoda (per la cronaca una 
768x576@100), pero' e' seccante, ad ogni boot, loggarsi come root
e dare un fbset -a piccia-res; /etc/init.d/gpm restart  (faccio ripartire
il gpm altrimenti il mouse non mi arriva nelle ultime righe dello
schermo). Ho provato quindi ad eseguire fbset da qualche script al
boot eppure, pur facendolo eseguire come ultimissimo script, mi
cambia la risoluzione solo della prima VC, nonostante il -a. (e,
secondario, mi ripristina il font di default, togliendomi il t.fnt a
cui sono affezionato da tanti anni :)).
Avevo pensato quindi di aggiungere direttamente la mia risoluzione
personalizzata nel kernel, in drivers/video/modedb.c. Purtroppo la
struttura li' definita e' questa:
struct fb_videomode {
    const char *name;   /* optional */
    u32 refresh;        /* optional */
    u32 xres;
    u32 yres;
    u32 pixclock;
    u32 left_margin;
    u32 right_margin;
    u32 upper_margin;
    u32 lower_margin;
    u32 hsync_len;
    u32 vsync_len;
    u32 sync;
    u32 vmode;
};
quello che mi chiedo e'... e dove la metto la risoluzione virtuale??
La mia "risoluzione personalizzata" e' la seguente:
mode "piccia-res"
    # D: 65.603 MHz, H: 63.080 kHz, V: 101.579 Hz
    geometry 768 576 768 2880 8
    timings 15249 112 32 32 8 128 5
    #       pclk  l   r  u  l hs  vs
endmode
ma non saprei proprio dove piazzare quei 2880 pixel di risoluzione
virtuale verticale. Senza quelli il fb e' una chiavica!
2)
per il resto, il fb va benissimo tranne in alcuni casi...
ad esempio, se sto leggendo una man page e poi voglio tornare
all'inizio premendo il tasto '<', la pagina impiega addirittura
qualche secondo per visualizzarsi, e in quei secondi il carico della
cpu sale al punto da far saltare un lettore di mp3 o da causare un
buffer underrun mentre masterizzo (mortacci sua, mi ha fatto buttare
un cd :)). Tenete conto che ho un k7@550... non mi pare normale, ed e'
una seccatura. Voi che ne dite?
PS: no, non posso fare a meno del framebuffer. Purtroppo ho un
monitor di merda che emette dei fastidiosissimi fischi molto acuti
quando va a frequenze particolarmente basse, compresa quella della
modalita' testo. Visto che e' gia' il terzo che cambio, ho deciso di
tenermelo e aggirare il problema usando il fb e mandandolo a 100 Hz :(
-- 
addio, e grazie per tutto il pesce

paio di problemi:
Io idem con la voodoo3, ma e` molto piu` facile se invece di compilarci
il supporto alla tua scheda nvidia ci metti solo la vesa generica, che
e` CONFIG_FB_VESA ovvero:
Console Drivers --> Framebuffer Support --> Vesa vga graphics console
Per usare le modalita` vesa dopo devi passare il parametro al kernel.
Io uso `vga=0x314', che corrisponde a un 800x600x16bit.
Le modalita` sono scritte in Documentation/fb/vesafb.txt.
Dopo che il kernel e` avviato non so se e` possibile cambiare la
modalita`...
Ovviamente e` necessario che la tua scheda supporti lo standard vesa,
seno` non va, ma credo proprio che le tnt lo supportino quindi non
dovresti avere problemi per questo.
L'ultimo problema e` la frequenza. Da me per default la Voodoo3 mi usa
60 Hz, che e` troppo poco...
Ho risolto usando un programma per DOS che cambia le frequenze
predefinite della scheda. Questo va lanciato ad ogni boot prima di
linux, e l'unico modo per fare cio` e usare loadlin per il boot, invece
del solito Lilo.
Percio` se non ce l'hai dovrai farti una partizioncina col DOS, fare il
boot da li`, metterci il kernel, loadlin e unirefresh (quello che
imposta le frequenze), e fare un autoexec.bat coi due comandi: 
	unirfrsh
	loadlin vmlinuz root=/dev/.... vga=0x... mem=....
La spiegazione e` lunga ma se hai capito e` piuttosto semplice da
fare! Unirefresh lo puoi downloadare sul mio sito. C'e` l'eseguibile per
configurarlo (ci si mette 5 minuti e` facilissimo), mentre `unirfrsh'
provvede a configurare la scheda come da impostazioni.
-- 
    Pardo 
 
www.pardo.cjb.net

 60 Hz, che e` troppo poco...
...mandarlo a 100 Hz, che e' l'altra cosa che devo assolutamente
personalizzare :)
In sostanza passando al vesafb non risolverei i miei problemi...


 [...]
Ma tramite Lilo non si puo' fare ? Non so per il driver Nvidia, ma per
quello Matrox ho inserito nel config di lilo un semplice
 append="video=matrox:vesa:259,fv:75Hz" , dove 259 sta per la
risoluzione 800x600 (leggi i doc nel src del kernel), mentre fv:75Hz
gli impone (credo..magari setta solo il refresh) di scegliere nel file
fb.modes la config da 800x600 a 75Hz.
Tutto qui, ciao
Logan.

 struttura li' definita e' questa:
ma non ti conviene passare una variabile con il tuo boot loader al
kernel?
Oppure, aspetta che scartabello nei sorgenti.... allora in
/usr/src/linux/drivers/video/fbcon.c prova a vedere la funzione
fbcon_setup. Dovrebbe essere possibile impostare brutalmente i
parametri..... :-)
-- 
Non c'č piů forza nella normalitŕ, c'č solo monotonia.

 risoluzione 800x600 (leggi i doc nel src del kernel), mentre fv:75Hz
in questo modo potrei usare solo le risoluzioni predefinite vesa, che
e' proprio quello che non voglio fare. In ogni caso ho dato
un'occhiata nei sorgenti del kernel e mi pare di aver capito che il
driver per nvidia supporta solo le opzioni "font:" e "noaccel".
(purtroppo non c'e' nessuna documentazione al riguardo)
