back

Una volta caricato il codice in memoria se non ci sono problemi kill_motor viene chiamata, il nome è autoesplicativo.

Il sistema viene poi spostato nell'area di memoria 0x1000 (cosa che, come detto, oggi viene fatta da Setup.S arch/386/boot/compressed/{head.S,misc.c} che chiama le routine di decompressione del kernel). La dimensione massima che l'immagine del kernel può avere (zImage), può essere al massimo di 512Kb (0x80000) [5].

| first we move the system to it's rightful place
       mov     ax,#0x0000
       cld                     | 'direction'=0, movs moves forward
do_move:
       mov     es,ax           | destination segment
       add     ax,#0x1000
       cmp     ax,#0x9000
       jz      end_move
       mov     ds,ax           | source segment
       sub     di,di
       sub     si,si
       mov     cx,#0x8000
       rep
       movsw
       j       do_move

dopo aver impostato i segmenti di memoria con la gdt si passa in modalità protetta:

| Well, now's the time to actually move into protected mode. To make
| things as simple as possible, we do no register set-up or anything,
| we let the gnu-compiled 32-bit programs do that. We just jump to
| absolute address 0x00000, in 32-bit protected mode.
       mov     ax,#0x0001      | protected mode (PE) bit
       lmsw    ax              | This is it!
       jmpi    0,8             | jmp offset 0 of segment 8 (cs)

a questo punto il sistema è pronto e il codice passa l'esecuzione a head.s che contiene il codice di startup 32 all'indirizzo assoluto 0x00000000.

D'ora in avanti possiamo abbandonare la parte storica di Linux. I kernel recenti (dalla versione 2.6) non usano più il bootsector di Linux ma si affidano ai più potenti GRUB o LILO, per cui la parte che segue tratta il codice che si può trovare in un kernel 2.6 (il kernel 2.4 supporta ancora il boot da floppy ed infatti si può trovare il suo bootloader qui arch/i386/boot/bootsect.S). Lascio ai curiosi la lettura del codice che è leggermente più complessa di quella del primo Linux.

Kernel decompression e kernel space

Il lavoro di bootloader viene oggi lasciato ad altri bootloader come LILO o GNU GRUB che sono più versatili e che caricano in memoria setup.S (è qui che troviamo tante cose interessanti, fate riferimento a [5] THE REAL-MODE KERNEL HEADER) e bvmlinux, tutto procede poi come descritto di seguito.

back