Un bootscreen "personale"...

Moderators: gabrielilardi, forart, Davy Bartoloni

Post Reply
Davy Bartoloni
Posts: 1483
Joined: Wed Jan 04, 2006 11:31 pm
Location: Cuneo
Contact:

Un bootscreen "personale"...

Post by Davy Bartoloni » Tue Jan 06, 2009 9:17 pm

alla fine .. ho pensato, cosa c'e' piu' di bello se non mostrare agli amici un bootscreen "creato su misura" per la "propria" installazione di REACTOS?

e quindi.. sotto con il prossimo tutorial, ovvero, cambiare il LOGO DI BOOT di ReactOS, con uno creato "al volo"... e magari.. metterlo nel punto dello schermo piu' adatto.

questa volta.. per rendere le cose piu' istruttive.. a differenza del tutorial precedente.. modificheremo l'ultimo Trunk disponibile e non i sorgenti scaricabili dal sito ufficiale. ( ovvero quelli della 0.37 nel momento in cui scrivo... )


SCARICARE I SORGENTI AGGIORNATI ( SE AVETE UN ADSL.. )
bene, allora, per prima cosa..visto che si tratta del kernel... bisogna recuperare i sorgenti aggiornati di ReactOS... per farlo utilizzeremo il famoso TortoiseSVN.. ma da linea di comando.. in modo da non necessitare di mega interfaccie grafiche e menu' contestuali da utilizzare cn il mouse..
allora.. andiamo su http://tortoisesvn.net/downloads e scarichiamo un qualsiasi installer microsoft.. per esempio: TortoiseSVN-1.5.6.14908-win32-svn-1.5.5.msi
installiamo il pacchetto... e dopodiche' apriamo il prompt dei comandi in modalita' di amministratore ( se siamo su Vista o successivi ).. scrivendo CMD nel "cerca" del menu start , e quando appare in alto nel menu start, eseguirlo utilizzando il tasto destro e --> ESEGUI COME AMMINISTRATORE

bene a questo punto ... posizionarsi in ROOT con il comando cd c:\ ( se volete mettere i sorgenti su un unita' con lettera diversa... cambiate C con quella che avete a disposizione. )

nello schermo del CMD avrete questo : C:\>
scrivete questo:

svn checkout svn://svn.reactos.org/reactos/trunk

cn questo comando, scaricherete OGNI COSA relativa a ReactOS ( compresi i wallpapers.. documentazione... flyers... depliant... e ogni altra cosa... ) non e' che serve a qualcosa in particolare.. ma se non l'avete mai fatto... una volta bisogna farlo tanto per rendersi conto di che mole di informazioni sia gia' stata scritta per il nostro amato Sistema Operativo.

dopo qualche decina di minuti, la procedura si concludera' comunicando quale Build e' stata scaricata... in caso la procedura si interrompesse... rieseguirla... prima o poi . finira'

a questo punto.. scaricate la MEDESIMA VERSIONE DEL TRUNK in FORMATO 7z/ISO da .. http://www.reactos.org/getbuilds ( e' un metodo veloce per avere gia' il compilato da installare nel QEMU x i test... ) installatela usando qemu o vmware ... come al solito.. e verificate che ReactOS ( in quella Build ) funzioni correttamente... ( talvolta capita una Build fallata )

bene, richiudiamo il virtualizzatore..
scarichiamo e installiamo il ROSBE 1.3.. e quando ci chiedera' la cartella dove risiedono i sorgenti di ROS... indichiamo questa: letteraunita:\trunk\reactos

iniziamo a modificare il logo di BOOT

l'immagine originale usata del BOOT si trova in: letteraunita:\trunk\reactos\ntoskrnl\inbv\logo\5.bmp
ed e' questa:
Image
215x147 pixels , composta da soli 16 colori ( tutti grigi )

se volete crearne una voi... editatela con un semplice programma di grafica.. e prima di salvarla, riducetene la profondita' a solo 16 Colori. ( e salvatela in formato BMP naturalmente )
nel nostro esempio ho optato per un immagine con dimensioni diverse... cn il logo di reactos Rimpicciolito.. e 2 scritte.
eccola:
Image
150x275 Pixels , a 16 colori
questa l'ho postata in formato Bitmap, quindi se volete utilizzarla, basta che clicchiate con il tasto destro sull' immagine e poi ---> Salva immagine con nome ---> 5.bmp

ora.. sostituite 5.bmp a quello originale localizzato nella directory letteraunita:\trunk\reactos\ntoskrnl\inbv\logo

ok, ora il normale BOOT di Reactos, posiziona questo LOGO nel centro dello schermo... per trafficare un po con il C... noi invece lo posizioneremo in BASSO nello schermo di boot.

il codice relativo al posizionamento del logo e' in questo file: letteraunita:\trunk\reactos\ntoskrnl\inbv\inbv.c
Image

al fondo del codice c'e' questa parte:

Code: Select all

  {
        /* Is the boot driver installed? */
        if (!InbvBootDriverInstalled) return;

        /* FIXME: TODO, display full-screen bitmap */
        Bitmap = InbvGetResourceAddress(5);
        if (Bitmap)
        {
            PBITMAPINFOHEADER BitmapInfoHeader = (PBITMAPINFOHEADER)Bitmap;
            ULONG Top, Left;

            Left = (640 - BitmapInfoHeader->biWidth) / 2;
            if (BitmapInfoHeader->biHeight < 0)
                Top = (480 - BitmapInfoHeader->biHeight) / 2;
            else
                Top = (480 - BitmapInfoHeader->biHeight) / 2;
            InbvBitBlt(Bitmap, Left, Top);
        }
    }
che da come si vede.. si occupa di settare la variabile Left in modo da centrare orizzontalmente il bitmap...
e setta la variabile Top in modo da centrare verticalmente l'immagine.

considerando che BitmapInfoHeader->biWidth e' la larghezza dell' immagine .. e BitmapInfoHeader->biHeight l'altezza dell' immagine..
e considerando che la risoluzione durante il boot e' settata a 640X480... risulat ovvio che la parte di codice che ci interessa e' questa:

if (BitmapInfoHeader->biHeight < 0)
Top = (480 - BitmapInfoHeader->biHeight) / 2;
else
Top = (480 - BitmapInfoHeader->biHeight) / 2;
InbvBitBlt(Bitmap, Left, Top);


da come si puo' notare c'e' un if/else che porta in entrambi i casi alla stessa procedura .. ovvero: Top = (480 - BitmapInfoHeader->biHeight) / 2

Dando un occhiata a questa parte del codice... si vede che c'e' un controllo... che EVITA LA STAMPA DEL BITMAP... in caso, la sua altezza sia negativa.
... viene assegnata comunque una posizione.. anche se il logo in realta'..nn verra' stampato.


vabbe' cmq.. a noi interessa il secondo caso .. OVVERO, la dimensione verticale del LOGO e' un numero positivo o nullo.
quindi ..
Top = (480 - BitmapInfoHeader->biHeight) / 2;
in top, viene messo un numero che e' la meta' di ( 480 a cui sottraiamo la dimensione verticale del bitmap ) ..
considerando che le coordinate partono dal lato sinistro/alto dello schermo.. e' facile capire che questa formuletta ci fornisce un DELTAY in grado di rendere CENTRATO VERTICALMENTE il BITMAP.

noi, dobbiamo fare in modo che il bitmap, venga disegnato in basso sullo schermo.. quindi ... considerando che il bitmap e' di dimensione variabile ( nel nostro caso: 150x275 ) .. e che la sua altezza e' : BitmapInfoHeader->biHeight

ci basta settare a TOP un bel 470 - BitmapInfoHeader->biHeight .. ho messo 470.. per lasciare un bordino di 10 pixel sotto il logo... ( il tutto rimane piu' bello a vedersi )
ecco il codice modificato:

[/b]

Code: Select all

  {
        /* Is the boot driver installed? */
        if (!InbvBootDriverInstalled) return;

        /* FIXME: TODO, display full-screen bitmap */
        Bitmap = InbvGetResourceAddress(5);
        if (Bitmap)
        {
            PBITMAPINFOHEADER BitmapInfoHeader = (PBITMAPINFOHEADER)Bitmap;
            ULONG Top, Left;

            Left = (640 - BitmapInfoHeader->biWidth) / 2;
            if (BitmapInfoHeader->biHeight < 0)
                Top = (480 - BitmapInfoHeader->biHeight) / 2;
            else
                Top = (470 - BitmapInfoHeader->biHeight);
            InbvBitBlt(Bitmap, Left, Top);
        }
    }
bene.. e ora non ci resta che aprire il ROSBE , e da linea di comando scrivere: MAKE NTOSKRNL

ci vorra' un po di tempo... ma alla fine avremo il nostro Kernel ricompilato fresco fresco in : letteraunita:\trunk\reactos\output-i386\ntoskrnl

ora non ci resta che sostituire il kernel originale contenuto nel disco-virtuale del Sistema che abbiamo appena installato in qemu

( sempre utilizzando il RosTE e VDK )
andiamo nella cartella Unitamontatavirtuale:\ReactOS\system32.. rinominando ntoskrnl.exe in ntoskrnl.bak

prendiamo il nostro dalla directory letteraunita:\trunk\reactos\output-i386\ntoskrnl.. e copiamolo in : Unitamontatavirtuale:\ReactOS\system32

fine.. ora lanciamo ReactOS .. ed ecco il risultato:

Image

p.s.. tutto ok su XP.. ma mi e capitato su Vista e Successivi .. che maneggiare con il mouse quel file... ovvero trasferirlo con un DRAG'N'DROP .. prob ne cambia dei valori di Proprieta' e Autorizzazione.. e per qualche oscuro motivo... alla fine.. una volta smontato il disco del qemu... .reactOS.. alla fine nn si avvia.

in questo caso.. mi sn creato un file BAT , chiamato AGG.BAT che contiene questa linea:

Code: Select all

copy c:\trunk\reactos\output-i386\ntoskrnl\ntoskrnl.exe X:\ReactOS\system32
posizionato nella directory: c:\trunk\reactos

che mi permette di copiare rapidamente il nuovo kernel nel mounting di reactOS ( nel mio caso sull unita' X )
( cosi' evito di maneggiare il file con l' explorer e il mouse )

fine del tutorial :)

link for compiled version ( build:38605 ) : www.wcn.it/ReactOS2009/ntoskrnl_Build38605_newBoot.zip

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest