2010-05-10 6 views
25

Mi piacerebbe creare un nuovo sistema operativo per computer PC x86. Mi piacerebbe che fosse a 64 bit, ma probabilmente anche a 32 bit.Come creare il proprio sistema operativo x86 per computer PC moderni

ho questi tipi di domande:

Che tipo di cose si inizia a lavorare al primo? Sapere da dove iniziare a scrivere il tuo sistema operativo mi sembra un argomento delicato, quindi sono interessato al tuo contributo.

Generalmente come fare il proprio sistema operativo a 32 bit/64 bit, o buone risorse che menzionano informazioni utili su come scrivere sul proprio sistema operativo per computer x86. Non mi importa di quanto siano vecchie le fonti finché sono ancora pertinenti e utili a quello che sto facendo.

So che vorrò che i driver del kernel accedano direttamente all'hardware periferico. Dove devo cercare consigli e documentazione per programmare e comprendere l'interfaccia con l'hardware periferico con cui il sistema operativo comunicherà? Dovrò capire come il sistema operativo riceverà input e interagirà con tastiere, mouse, monitor di computer, dischi rigidi, USB, ecc. Ecc. Questa è probabilmente l'area che conosco meno.

Ho i manuali di istruzioni Intel e ho acquisito maggiore familiarità con la programmazione degli assiemi, quindi il lato CPU delle cose è quello che so di più.

A questo punto penso che mi piacerebbe implementare le chiamate di sistema Linux all'interno del mio sistema operativo in modo che i programmi che girano su Linux possano essere eseguiti sul mio sistema operativo. Voglio che il mio sistema operativo utilizzi il formato binario ELF. Mi chiedo quali ostacoli devo superare per raggiungere questa compatibilità con Linux. Le cose principali sono l'implementazione delle chiamate di sistema fornite da Linux e l'utilizzo del formato ELF? Cos'altro?

Sono anche interessato al pensiero della gente sul perché non sia una buona idea creare il proprio sistema operativo e perché è una buona idea creare il proprio sistema operativo.

Grazie per qualsiasi input.

+2

simile a http://stackoverflow.com/questions/1224617/how-can-i-build-a-small-operating-system-on-an-old-desktop-computer –

+7

È bello vedere no "don provarci è troppo difficile! " risposte. –

+2

se stai cercando un codice per iniziare, vedi [questo SO minimo] (http://stackoverflow.com/a/6143888/309483). –

risposta

13

Probabilmente vorrai farlo funzionare all'interno di una macchina virtuale per cominciare. È un PITA che prova a sviluppare un SO su hardware reale (con il costante riavvio e debugging-over-serial-cable).

All'interno di una VM di solito è disponibile un set di hardware semplificato (e relativamente standardizzato) che può facilitare lo sviluppo iniziale. In particolare, se vuoi mostrare a qualcun altro il tuo sistema operativo, basta dare loro un file .vhd ed essere ragionevolmente sicuri che se funziona per te, funzionerà anche per loro.

Si potrebbe anche voler iniziare con qualcosa che è già attivo & inizialmente in esecuzione (ad esempio, Microsoft Singularity è abbastanza pulito). Questo ti consentirà di liberarti di tutti i noiosi caricatori di avvio e di tutti i driver di base del dispositivo e potrai accedere più velocemente alle cose "carnose".

+1

Impressionante.Un emulatore come bochs http://bochs.sourceforge.net/? – mudge

+1

Bochs è abbastanza popolare tra i devers OS, sì. Anche VMWare, Virtual PC e VirtualBox sono sufficienti (sebbene Bochs abbia un ottimo supporto per il debug del sistema operativo) –

+0

Ho trovato che Qemu è un'alternativa più veloce e più facilmente programmabile con script di Bochs. Bochs è configurato in fase di esecuzione (fastidioso se lo si esegue molto, come dopo ogni aggiornamento) o con un file di configurazione. Personalmente, non mi piace usare i file di configurazione. Ottieni maggiori informazioni di debug, specialmente se lo costruisci da solo con il debugging extra abilitato. Qemu, d'altra parte, può essere configurato dalla riga di comando. Anche Bochs è un emulatore, mentre Qemu è una macchina virtuale basata su JIT. È un compromesso in entrambi i casi. – Tyler

8
+0

Concordo. Vorrei anche raccomandare di scrivere alcuni driver del kernel per Linux (un sacco di tutorial, codice sorgente in rete), in modo da poter avere un'idea dell'enorme quantità di sforzi che si potrebbero ottenere ... – tucuxi

+0

ottenere la 3a edizione migliore. Progettazione e implementazione di sistemi operativi (3a edizione) – limitcracker

4

Dovrete implementare diversi tipi di tabelle descrittori Per attivare la modalità a 32 bit. Abilitare il multithreading non è un compito facile e sarà quasi certamente un prerequisito. Probabilmente vorresti anche sviluppare presto il supporto per il file system per scovare un'immagine floppy o qualsiasi altra cosa tu stia attualmente utilizzando.

Sono sicuro che ti saresti imbattuto in questo sito web in passato http://wiki.osdev.org/Main_Page ma ha molti ottimi articoli.

Potresti anche trovare questo libro utile per la fase di sviluppo a cui ti trovi: The Indispensable PC Hardware Book entra nei dettagli e contiene molti diagrammi e alcuni frammenti di codice.

6

Suggerirei primo studio di un piccolo sistema operativo come Minix1, che è stato costruito per scopo educativo o Minix3 che è conforme a POSIX.

20

È meglio dare un'occhiata al codice sorgente Linux 0.01. è la prima versione del sistema operativo. è molto semplice e informativo. È un buon punto di partenza

1

Inizia con un boot loader, scopri come ottenere una mappa di memoria, scansionare il bus PCI, inizializzare vari chip, come l'APIC, e come passare in modalità protetta.

Una volta caricato un kernel, provare a scrivere le routine su cui verrà visualizzato sullo schermo, leggere dalla tastiera, avviare un semplice debugger, seguito da un gestore di memoria fisica e quindi un gestore di memoria virtuale. Gli ultimi due non possono essere rimandati a lungo, perché ogni programma, incluso il sistema operativo, ha bisogno di un modo per allocare e rilasciare la memoria in modo ordinato.

1

Solo per offrire un nuovo approccio per i suggerimenti ... è possibile visualizzare il caricatore di avvio su un CD USB o RW, quindi dirigere il computer per utilizzarlo come dispositivo principale. Ho installato Vista e semplicemente inserisco una USB con il boot loader e il file kernel.bin per testare il mio sistema operativo giocattolo. Assicurarsi di utilizzare lo stesso dispositivo per salvare file aggiuntivi o eventuali extra in modo da non danneggiare il disco rigido. Quando il tuo sistema operativo ha tutte le nozioni di base sul posto, compra un computer spazzatura, installa il tuo sistema operativo su di esso ed espandi da lì.

1

https://github.com/rajneshrat/ratos

Questo è il sistema operativo minimo con successivo supporto- networking, supporto vm, supporto interrupt, supporto PCI.

+0

Non ho provato quel sistema operativo. Puoi fornire un'immagine floppy standard per coloro che vogliono vederlo prima di provare a creare la propria versione? – ssh

2

Se si desidera sviluppare il proprio sistema operativo, la prima mossa migliore consiste nel bighellonare nel forum osdev (http://forum.osdev.org/) e avere una buona lettura del proprio wiki: http://wiki.osdev.org/Main_Page.

Ho trovato che le persone non solo sono informate ma anche incredibilmente utili, ma indicano anche errori nei frammenti di codice!

Ho iniziato con il tutorial x86 di James Molloy (google non sono autorizzato a pubblicare questo link). Puoi iniziare con il suo codice e poi hackerare, hackerare, hackerare :-).

+0

Nota che il tutorial di James Molloy è bacato. Per ulteriori informazioni, consultare http://wiki.osdev.org/James_Molloy's_Tutorial_Known_Bugs. – glauxosdever