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?
risposta
Secondo http://www.moses.uklinux.net/patches/lki-1.html Il kernel Linux è un binario ELF. Sono abbastanza sicuro che sia Linux che passa alla modalità protetta, non il boot loader. Questa pagina è d'accordo: http://oss.sgi.com/LDP/HOWTO/Kernel-HOWTO/linux_boot_process.html
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.
+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
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
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
Stai chiedendo informazioni su grub legacy o grub2? –
Sono interessato ad entrambe le versioni di grub. – mnc
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). –