2011-01-27 22 views
13

Vorrei chiedere se è GRUB che passa la CPU in modalità protetta durante l'avvio o è il kernel Linux che lo fa. E vorrei anche chiedere - il kernel stesso (vmlinuz) è un ELF o è un semplice formato binario? Grazie.GRUB passa alla modalità protetta?

+0

Stai chiedendo informazioni su grub legacy o grub2? –

+1

Sono interessato ad entrambe le versioni di grub. – mnc

+0

Penso che sia sicuro assumere perché entrambe le versioni di Grub e LILO funzionerebbero esattamente allo stesso modo in termini di domande (perché è lo stesso kernel che stanno avviando). –

risposta

13

GRUB fa cadere in modalità protetta.

Il GRUB Multiboot Specification (version 0.6.96) Section 3.2 ti dice questo

‘CR0’

Bit 31 (PG) deve essere cancellata. Il bit 0 (PE) deve essere impostato. Altri bit sono tutti indefiniti.

E CR0 Register mapping ti dice che il sistema dovrebbe essere in modalità protetta.


Linux non è un kernel multiboot e non si basa su alcuni bootloader per la commutazione nel PM, segue la Linux Boot Protocol. Ma Linux non la modalità protetta in sé interruttore, e non si basa nel bootloader

controllo: http://lxr.linux.no/#linux+v2.6.39/arch/x86/boot/main.c

Qui si chiede go_to_protected_mode(); quando poi chiama protected_mode_jump() che poi fa la roba CR0 (imposta il bit 0)

(L'altro po 'dice che il paging è disabilitato)

EDIT

Quello che posso capire è che GRUB can detect linux boot protocol (GRUB2 e legacy dovrebbe anche) e carica linux sulla memoria, ma non è passare alla modalità protetta. Date un'occhiata a questo link: http://www.gnu.org/software/grub/manual/grub.html#GNU_002fLinux e la sezione 16 della pagina in questo link.

+0

+1 per una risposta corretta. La sua domanda è taggata "linux", quindi, si potrebbe prendere in considerazione la riscrittura della prima riga come "Su altri sistemi operativi, GRUB _esegue_ ti fa cadere in modalità protetta, ma non su Linux" (o simile). – Nemo

+0

in realtà sto facendo ricerche su di esso per difendere la linea sopra, cosa succede esattamente, e c'è una certa confusione. ma non vi è alcuna confusione che linux faccia lo switch quando linux viene avviato. E per altri kernel compatibili multiboot, Grub fa il passaggio. – phoxis

+0

Abbastanza giusto. Sono certo che Linux partirà in modalità reale perché una volta dovevo applicare quel codice. Indipendentemente da ciò, quando ottieni una risposta completa, penso che dovresti aprire la risposta per Linux. – Nemo