/ / Come caricare il kernel o essere in grado di utilizzare più spazio nel proprio bootloader? - assembly, sistema operativo, kernel, inline-assembly

Come caricare il kernel o essere in grado di utilizzare più spazio nel proprio bootloader? - assemblaggio, sistema operativo, kernel, assemblaggio in linea

Ho seguito questo:
( http://www.codeproject.com/KB/tips/boot-loader.aspx )
Ma non sono sicuro di cosa e come fare dopo.
Come caricare il kernel scritto dall'utente in esso? O come fare più posto che in un singolo segmento?
E cosa fare con i binari? Devo copiare il bootloader nel primo settore, ok, ma cosa succede con il kernel, ecc., Appena messo su floppy / disco?

risposte:

6 per risposta № 1

"Come caricare un kernel" si riduce a saperedove si trova il kernel sul disco e dove lo si desidera in memoria, quindi utilizzare i servizi del disco BIOS per leggerlo. Se vuoi che il kernel venga caricato sopra 0x00100000 allora potresti dover caricare ogni parte in un buffer temporaneo (a cui il BIOS può accedere in modalità reale), quindi usa la modalità protetta o "modalità irreale" per copiarlo dal buffer a dove lo vuoi effettivamente. Se si desidera supportare la compressione, potrebbe essere necessario caricare i file e quindi decomprimerli. Se si desidera che il kernel utilizzi un formato di file complesso (ad esempio ELF o PE, piuttosto che un semplice binario piatto), potrebbe essere necessario analizzare le intestazioni, riposizionare le sezioni, ecc.

I miei boot loader sono in genere molto più grandi di 1settore. Il codice nel primo settore carica il secondo settore e il codice nel primo e nel secondo settore carica il resto del boot loader. In questo modo il boot loader può essere di 20 KiB (ad esempio), a patto che tu "stia attento e non cerchi di utilizzare alcun codice o dato che non è stato ancora caricato. Potresti anche avere una seconda fase (e terzo, quarto, ecc. se ne hai voglia) in cui il boot loader carica il secondo stadio e il secondo stadio carica il pezzo successivo, ecc.

Per dove memorizzare i binari, questo dipendequale / i file system intendi usare. Se non vuoi alcun file system (o se il file system che vuoi usare ha abbastanza spazio "riservato" all'inizio), allora potresti semplicemente concatenare i file binari insieme e memorizzarli subito dopo il boot loader. Altrimenti, il boot loader (e / o le fasi aggiuntive) dovrà trovare i file nel file system che stai utilizzando.

Nota: diversi boot loader funzionano in modo diverso.Per qualcosa come l'avvio dalla rete, il boot loader può essere 512 KiB e deve scaricare i dati dalla rete utilizzando l'API PXE. Per i CD-ROM probabilmente finirai per utilizzare il file system ISO9660 (e 2 settori KiB). Per i dischi rigidi dovrai gestire le partizioni (e forse avrai un boot loader per "partizioni MBR" e un altro boot loader per " Partizioni GPT "). Ciò che otterrai sono diversi boot loader completamente diversi, che caricano tutti il ​​kernel (o forse una sorta di immagine del disco RAM se è un micro-kernel) e lasciano il computer in un certo stato all'avvio del kernel (ad es. una modalità CPU specifica, il kernel a un indirizzo specifico, altri file in luoghi specifici, ecc.), in modo tale che il kernel stesso non abbia bisogno di preoccuparsi di quale boot loader lo ha caricato. Per una maggiore complessità, è possibile includere molto più in questo "stato predefinito" (ad es. indirizzo delle tabelle ACPI, descrizione della modalità video preconfigurata, ecc.) in modo che sia possibile scrivere caricatori di avvio per altri tipi di sistemi e il kernel non avrà bisogno di preoccuparsi se si avvia da "PC BIOS" o UEFI o OpenFirmware o qualsiasi altra cosa.


2 per risposta № 2

In genere, la cosa principale sarà il tuo settore di avvioquello che devi fare è caricare un caricatore di secondo stadio o il kernel in memoria. Supponendo che tu stia utilizzando un PC, utilizzerai le funzioni di lettura del disco del BIOS per caricare i settori. Farlo da un floppy formattato FAT è perfettamente possibile nel 512b che ottieni per il tuo settore di avvio. In alternativa, avvia da un CD El-Torito senza emulazione che ti dà più spazio per il tuo boot loader.

Per ulteriori informazioni, dai un'occhiata a OSDev.org o Bona Fide OS Dev.