An accademic OS

 

Quickstart è un kernel monolitico a 32 bit per piattaforme Intel, creato da uno studente dell’Università di Udine e ospitato da IGLU (IGLU Gruppo Linux Udine) per scopi accademici.

Per rendere la navigazione del codice più semplice possibile, il progetto è stato suddiviso in 8 branch (vedi sezione Download), ogni branch è una componente del kernel ed ha il suo archivio scaricabile da questo sito.
Quindi per chi volesse iniziare dalle basi può scaricare la Baseline, la quale è una versione minimale che avvia il sistema ed esegue un while (1), da cui si può cominciare a sviluppare il proprio sistema operativo.
In caso contrario, se si desidera scaricare l’intero sistema operativo (con FileSystem, Memoria, Process Scheduler  e così via ..) si può scaricare l’ultima versione.

L’utilizzo del Branch non è proprio nello stile di un vero controllo versioni, ma è la soluzione più flessibile che ho trovato per mantenere il codice aggiornato. :)

In ogni caso, in questo sito potrete trovare la documentazione, link per iniziare l’apprendimento e le slide dei talk.

Release Zero v.0.0: contiene Makefile e boot.asm. Una configurazione base per l’implementazione di un kernel 16 bit.

Bootloader v.0.1: il bootloader si occupa di passare dalla modalità 16 alla modalità 32 bit (Protected Mode) e di caricare il kernel allocato dopo i primi 512 byte del disco, dopodichè lancia una routine C.

Video Driver v.0.2: la memoria a caratteri viene gestita tramite un buffer presente in memoria sotto i 64K all’indirizzo 0xB800.

Interrupt v.0.3: implementa un driver per il chip 8259 (PIC – Interrupt controller) per la gestione degli interrupt e include un driver per la tastiera come esempio di ISR (Interrupt Handler).

Scheduler v.0.4: uno scheduler Round Robin.

Memoria v.0.5: un semplice gestore della memoria senza gestione della paginazione in hardware.

FileSystem v.0.6: una implementazione ideata sul FAT32. (ma molto lontana dall’esserlo) :)

UserSpace v.0.7: utilizzo del ring 3 per lanciare processi in user space.

Syscall v.0.8: un processo in ring 3 ha la possibilità di accedere al livello 0 tramite syscall.

Download

E’ possibile scaricare gli snapshot dai .tar.bz2 sopraelencati, ma è anche possibile scaricare la versione corrente dal repository GIT usando il seguente comando:

git clone git://iglu.cc.uniud.it/quickstart.git
e poi
git checkout v0.#
dove # è il numero di versione

Per chi volesse un interfaccia web per navigare nei sorgenti: http://iglu.cc.uniud.it/gitweb/

Documentazione

Intel Kernel Programming – Il set di slide utilizzate il 27.11.10 in occasione dell’OpenSource Day 2010
Subverting the kernel: rootkits – Alcuni concetti di questo talk possono tornare utili anche nel campo del Os Development. set Il slide è stato utilizzato il 27.11.10 in occasione dell’OpenSource Day 2010.

Requisiti

I seguenti software sono necessari per compilare, eseguire e debuggare le versioni di questo kernel:

Gcc : compilatore C/C++. (Per le distro debian-based apt-get install build-essential)

Bochs è una virtual machine estremamente versatile in quanto permette di specificare nei più piccoli dettagli la configurazione della macchina che si vuole utilizzare per il proprio kernel, per esempio si può configurare l’harddisk da utilizzare impostando numero di cilindri, di testine e di settori per traccia.

Gdb: è il debugger di linux. Compilando Bochs con l’opzione –enable-gdb-stub dai sorgenti si può utilizzare GDB per debuggare il kernel.
Attenzione: il binario del kernel dev’essere un ELF, e per caricare un ELF serve un bootloader specifico. A questo scopo è stato integrato GRUB dalla versione 0.6 (FileSystem). In pratica fino alla versione 0.6 non si può utilizzare il debugger :).

Emacs: l’editor di testo :)

Compilazione ed esecuzione

Il Makefile fornisce ampio supporto per la compilazione ma anche per l’esecuzione:

– compilare il kernel:

$ make

– creare il file che servirà per l’hardisk.

$ make hdisk

Quest’ultimo viene creato con 30MB di spazio; per modificarlo bisogna calcolare il numero di cilindri, di testine e di settori per traccia e impostarli nel comando che avvia bochs (sotto la voce “run” del makefile), dopodichè rifare i conti per ottenere il numero di settori totale e dare il comando

dd if=/dev/zero of=<FILE> bs=512 count=<COUNT>

– eseguirlo:

$ make run

– pulire la working directory:

$ make clean

Share this:
Share this page via Email Share this page via Stumble Upon Share this page via Digg this Share this page via Facebook Share this page via Twitter
 Posted by at 17:23