Newsgroup: it.comp.os.linux.development
Titolo: Logo del framebuffer e modifica kernel

Il logo del framebuffer dovrebbe essere una xpm e la si includ come una
varibile, giusto?
Ma dove sta questo file xpm?
Inoltre vorrei sapere una cosa: visto che mi piacerebbe fare in modo che
passando una variabile a lilo il framebuffer inserisca una determinata
immagine (quindi avendo logo1.xpm e logo2.xpm) penso che basti includere
entrrambi i file e poi con un if scegliere quale delle due immagini.
Solo che non so una cosa: che if devo mettere per vedere se č stata
passata o meno una variabile da lilo?
-- 
Non c'č piů forza nella normalitŕ, c'č solo monotonia.

 variabile da lilo?
Non credo si possa cambiare immagine a piacimento, ma se ci riesci dillo nel
newsgroup.
--
PLF

 newsgroup.
e invece di mi sa di sì.
Nel file /usr/src/linux/include/asm-i386/linux_logo.h trovi delle
funzioni extern come "extern unsigned char linux_logo_red[];" che
vengono definite nel file /usr/src/linux/include/linux/linux_logo.h. Ora
l'idea mia sarebbe:
#ifdef VARIABILE_PASSATA_DA_LILO
//definisci tutte queste funzioni
#else
//definisci tutte queste funzioni
Credi che sia fattibile?
-- 
Non c'è più forza nella normalità, c'è solo monotonia.

Pier Luigi Fiorini wrote:
ho scritto una minchiata: sono varibili, non funzioni, però siamo sempre
lì.


 l'idea mia sarebbe:
Dovresti mettere le mani in drivers/video/fbcon.c.
Ciao
 David
-- 
<d.santinoli presso mi. flashnet. it>

 Dovresti mettere le mani in drivers/video/fbcon.c.
ho provato a darci un'occhiata e ho visto:
...
#include <asm/linux_logo.h>
...
__initfunc(static int fbcon_show_logo( void))
{
	....
	unsigned char *red, *green, *blue;
	if(use_256) {
		red = linux_logo_red;
		green = linux_logo_green;
		blue = linux_logo_blue;
	} else {
		red = linux_logo16_red;
		green = linux_logo16_green;
		blue = linux_logo16_blue;
	}
	...
}
visto che asm/linux_logo.h si tira dentro linux/linux_logo.h e che in
esso linux_logo* sono varibili esterne definite proprio nel file che
include non conviene modificare l'utimo e definire le varibili con un
check sulla fatidica variabile da passare col loader?
E' possibile cambiare l'if di __initfunc ma ne vale la pena? cosa ha la
mia soluzione che non va?


> ho scritto una minchiata: sono varibili, non funzioni, perň siamo sempre lě.
Ci vogliono modifiche sostanziali al kernel, io non so darti una mano č troppo
complesso quel codice per me!
--
PLF

 troppo complesso quel codice per me!
Io l'ho guardato bene, appena trovo il formato dell'immagine lo faccio.
E' meno difficile di quello che sembra.


 meno difficile di quello che sembra.
Se vuoi se ne puň parlare in privato, cmq il formato č xpm se non erro.
Sostituisci 
sourceforge.it
 con 
sourceforge.net
 per la mail privata
--
PLF

Credi che sia fattibile?
Mi inserisco nella discussione. Secondo me no, perchè #ifdef è risolto
compile-time, mentre servirebbe un normale if risolto a run-time. Non
so però come fare per accedere da codice c alla variabili passate con
LILO.
Ciao Anto
Antonio Cuni
ICQ: 82732649
VUOI GUADAGNARE RICEVENDO MESSAGGI SUL CELLULARE?
Ecco il sito che fa per te:
http://www.smscash.it/index.php3?pagid=reg&p_form=P&p_pres=0&cpre=218101&p_desc=1

 cosa ha la mia soluzione che non va?
Usa #ifdef nel modo sbagliato (funziona solo a compile-time).
Ammesso che voglia creare un nuovo parametro da passare (chiamiamolo
"bootlogo=N" dove con N=0 visualizzi quello di default e con N>0 i tuoi)
e non
estenderne uno esistente, i passi da compiere potrebbero essere:
- in init/main.c, aggiungere una linea del tipo
        { "bootlogo=", bootlogo_setup },
  tra #ifdef CONFIG_FB / #endif, e aggiungere il prototipo di
bootlogo_setup in testa:
        extern void bootlogo_setup(char *str, int *ints);
- in include/linux/linux_logo.h, definire brutalmente
    unsigned char linux_mylogo1_red[] __initdata = { ...
    unsigned char linux_mylogo1_green[] __initdata = { ...
    unsigned char linux_mylogo1_blue[] __initdata = { ...
    unsigned char linux_mylogo1[] __initdata = {
    unsigned char linux_mylogo2_red[] __initdata = { ...
    ...
- in drivers/video/fbcon.c:
  aggiungere
    void bootlogo_setup(char *str, int *ints);
    static int whichbootlogo;
    void __init bootlogo_setup(char *str, int *ints)
    {
       if(ints && ints[0]>0) whichbootlogo=ints[1];
       else whichbootlogo=0;
    }
   e in show_logo modificare
     if (use_256) {
        if(whichbootlogo==1) {
           red   = linux_mylogo1_red;
           green = linux_mylogo1_green;
           blue  = linux_mylogo1_blue;
           }
        else if(whichbootlogo==2) {
           red   = linux_mylogo2_red;
           green = linux_mylogo2_green;
           blue  = linux_mylogo2_blue;
           }
        else if(whichbootlogo==3) { ...
           }
        ...
        else {
           red   = linux_logo_red;
           green = linux_logo_green;
           blue  = linux_logo_blue;
           }
       }
   e piu` avanti
    if (depth >= 8) {
        if(whichbootlogo==1) logo = linux_mylogo1;
        else if(whichbootlogo==2) logo = linux_mylogo2;
        ...
        else logo=linux_logo;
        logo_depth = 8;
        }
Fammi sapere se 'sto accrocchio funziona...


 LILO.
supposto che passi la variabile pippo basta
if (pippo) {...}


   tra #ifdef CONFIG_FB / #endif, e aggiungere il prototipo di
Aspetta! invece di definire una funzione come bootlogo_setup, poiché io
voglio solo che passando il parametro "extra" a lilo mi mostri un'altra
immagine posso fare una roba del tipo { "extra", extra = 1 } e poi in
linux_logo.h fare un if(extra) ... ?


E' meno difficile di quello che sembra.
Ma se non mi sbaglio ci sono un paio di programmini fatti apposta per
convertire l'immagine da una formato std a quello della varibile del kernel.
Cerca su fm qualcosa tipo fblogo.
--
  	Giuseppe "Cowo" Corbelli  -->>  Riding on Linux-2.2.14
    **ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail**
  -<! 3rd Law of Computing: Anything that can go wr
		fortune: Segmentation violation -- Core dumped !>-

 Fammi sapere se 'sto accrocchio funziona...
c'è un piccolo problema in fbcon.c: le nuove variabili (io ho usato
my_linux_logo_red e simili) mi dice che non sono dichiarate. Ho provato
ag aggiungerle in include/asm-i386/linux_logo.h ma non è bastato.
Dove vanno dichiarate?


 Cerca su fm qualcosa tipo fblogo.
trovato :-)


 ag aggiungerle in include/asm-i386/linux_logo.h ma non č bastato.
Invece dovrebbe bastare. Le hai aggiunte tutte e quattro, vero?
Controlla eventuali errori di grafia.
Oggi ho provato a compilare "l'accrocchio" e funziona tutto...


 Oggi ho provato a compilare "l'accrocchio" e funziona tutto...
me ne č partito un altro: mai da un errore "parse error in file fbcon.c
in riga 2301" (giŕ di lě, dove c'č ua struct). Che puň essere?



Sei proprio sicuro? e la variabile pippo dove è dichiarata? come fa il
compilatore a generare codice oggetto su una variabile non dichiarata?


Cerca su fm qualcosa tipo fblogo.
GLOGO: A gimp plug-in to create the linux-logo includefile
-- 
Bye. Gianfranco Di Prinzio
--------------------------
To reply: gianfrancodpr(at)iname(.)com

 in riga 2301" (già di lì, dove c'è ua struct). Che può essere?
La stessa cosa: hai dimenticato una parentesi o un punto e virgola, o ce
ne hai messi troppi...


 ne hai messi troppi...
che palle..... vabbò, andiamo a cercare....
