2012-10-16 24 views
14

Ultimamente non sono stato codificato a causa della scuola, ma ho deciso di voler ricominciare a lavorare sullo sviluppo del sistema operativo. Recentemente tuttavia ho sentito cose su EFI come la sostituzione al BIOS. Voglio sviluppare un sistema operativo per una piattaforma che utilizza EFI piuttosto che BIOS. Sto avendo problemi a capire da dove cominciare. Qualcuno può indicarmi la giusta direzione? Forse spiegare che cosa EFI significhi per lo sviluppo del sistema operativo e magari dirmi quali ambienti di test (preferibilmente virtuali) posso usare. Francamente, non sono proprio sicuro di cosa sia EFI. Dovrei anche investire del tempo per esaminare l'assemblaggio ARM? Conosco l'assemblea x86 ma sento che anche questo sta diventando obsoleto. Sono davvero perso e mi piacerebbe sentire il tuo contributo.Scrittura di un sistema operativo con UEFI

Grazie

risposta

22

EFI è il precursore di UEFI, che è ciò che la gente effettivamente utilizzare, anche se ancora a volte si riferiscono alla cosa come EFI. È possibile ottenere le specifiche richieste allo uefi.org.

La specifica UEFI definisce tutto ciò che potrebbe essere necessario un boot loader . Le specifiche PI definiscono le interfacce per i fornitori di silicio da utilizzare per la portabilità del loro codice nel settore. Così sentirai parlare di un sistema operativo, come Win8, che richiede la conformità con una certa versione della specifica UEFI, come 2.3.1c, per alcune funzioni, come l'avvio sicuro. Tutto ciò porta a dire che EFI non sostituisce il BIOS tanto da diventare uno standard a cui il BIOS deve conformarsi per supportare alcuni sistemi operativi.

Il posto dove andare per iniziare (dopo aver ottenuto una copia delle specifiche) è the TianoCore project on SourceForge. Uno dei progetti è OVMF, che è un obiettivo della macchina virtuale per UEFI. Si potrebbe anche voler guardare la destinazione NT32 per l'esecuzione di un prompt dei comandi sotto Windows. Questi sono davvero degli ottimi strumenti da utilizzare quando si desidera progettare un'applicazione, come un boot loader, che si trova in cima alle interfacce UEFI.

Per quanto riguarda il montaggio di apprendimento, non è consigliabile iniziare da lì. C'è così tanto da sapere, e parte della ragione per cui abbiamo creato UEFI è che i nuovi programmatori potrebbero lavorare in C anziché in ASM. Ci sono alcuni posti in UEFI in cui usiamo ASM, ma il sistema di compilazione gestisce i dettagli per lo splicing in entrata, e generalmente non è necessario il controllo ingannevole dello stato del processore o le prestazioni che si otterrebbero scrivendo il ASM. L'unica altra ragione per cui lo faresti è la dimensione, e dato che il resto del BIOS sarà in C, questo tipo di sconfigge lo scopo a meno che tu non riscrivi tutto in ASM, cosa che nessuno farà. Concentrati sull'apprendimento delle specifiche e su come usarle per scrivere le tue applicazioni UEFI.

6

Una risposta in ritardo a questa domanda, ma posso aggiungere i seguenti punti se non li avete scoperto nel frattempo:

Forse spiegare che cosa significa EFI per lo sviluppo del sistema operativo

In realtà, non molto. Beh forse un po '. Ok, spieghiamo. UEFI fornisce l'ambiente del firmware per una fase di pre-avvio. Fornisce anche alcuni servizi di runtime al sistema operativo, tuttavia, è previsto che il sistema operativo, e non il firmware UEFI, alla fine guidi il sistema - questi servizi consentono di eseguire varie attività correlate alla configurazione di avvio - example.

Il vantaggio è che se siete disposti ad utilizzare un bootloader che si conforma a dire multiboot 2 che in realtà non c'è bisogno di sapere nulla di UEFI - il bootloader verrà caricato fino in base alle specifiche multiboot, quindi chiamare ExitBootServices() che a I termini UEFI distruggono l'ambiente del firmware.

E 'possibile produrre un kernel Linux che ha uno stub EFI e quindi "senza" un boot loader - this blog shows you how. Puoi farlo per il tuo kernel - devi semplicemente produrre un kernel PE/COFF che corrisponda al firmware del firmware.

e forse dirmi che cosa test ambienti (preferibilmente virtuale) posso ci

Se lo può permettere VMWare Workstation, questo vi aiuterà in maniera massiccia. Oltre a contenere uno stub gdb tale che è possibile eseguire il debug di qualsiasi parte di tutto ciò, è anche possibile modificare i file di definizione della macchina virtuale (* .vmx) per contenere

firmware="efi" 

e voilà, VMWare si avvierà un UEFI completamente funzionante ambiente. Funziona con Linux e Windows.

Vari post su Internet menzionano le configurazioni QEMU e, naturalmente, VirtualBox. Non ho mai avviato personalmente alcun sistema esistente sulla piattaforma EFI di VirtualBox, e non ho ancora provato QEMU, anche se credo che i vari altri emulatori là fuori funzionino probabilmente.

Inoltre, dovrei investire del tempo per esaminare il gruppo ARM?

Dipende dai vostri obiettivi. Sulla questione del montaggio, penso che dovresti saperlo per scrivere un sistema operativo. Non penso che sia importante per quale piattaforma scrivi - anzi, penso che scrivere per più ti renderà più riconoscente delle differenze tra le macchine.

In generale, tuttavia, non tenterei di scrivere un intero sistema operativo in assembly. Il motivo principale per questo è il tempo - presumo che si tratti di un progetto per hobby, quindi ottenere qualche ricompensa per il tuo vasto sforzo sarà molto più divertente che tentare di eseguire il debug di assembly, soprattutto per quelli che non ti sono familiari. Puoi sempre, man mano che diventi più esperto, sostituire i bit di scelta con l'assemblatore, specialmente se ne hai abbastanza del resto del codice per testarlo.

0

È possibile utilizzare qemu per eseguire alcuni test/sviluppo di applicazioni uefi. Vedi this per ulteriori informazioni

A parte questo, raccomando vivamente di familiarizzare con uefi e provare a fare qualche sviluppo di driver/app nel modello uefi. Potresti provare cose come eseguire lo stack di rete dal caricatore, l'infrastruttura di avvio del sistema, probabilmente impostando una GUI pre-OS più ordinata. Questo non solo ti renderà bravo a uefi, ma ti aiuterà a capire i dettagli specifici della piattaforma.

Questo è il mio parere, ma i commenti sopra sono buoni da tenere a mente.