Newsgroup: it.comp.os.dibattiti
Titolo: Complilare un kernel?

A proposito di sistemi operativi, avrei una domanda. Immaginiamo che
qualcuno decida di sviluppare un sistema operativo da zero. Che
compliatore usa? Su che cosa gira questo compilatore, su un altro
sistema operativo ospite, su un altro computer, o su un sistema base
realizzato solo per far funzionare il sistema di sviluppo?
Quello che so io e' che i produttori di CPU quando progettano un nuovo
processore realizzano contemporaneamente ambiente di sviluppo e
complilatore. Addirittura, il progretto del compliatore spesso influenza
quello del processore.
-- 
Fabrizio Di Giuseppe
mailto:
fabr...@iride.com
http://www.iride.com/fabrizio/

quello del processore.
Boh, non sono un esperto di progetto di compilatori. Pero' GCC si e'
affermato su numerose archietteture come uno dei compilatori migliori
(se non IL migliore).
Non so se con le CPU del domani (ad es. Merced con le sue Very Long
Istruction Word) l'impianto di base del GCC andra' ancora bene o
bisognera' riprogettare qualcosa del genere da capo.
dd
--
To reply replace "xx" with "mc"

 bisognera' riprogettare qualcosa del genere da capo.
Il GCC e' diviso in due, il frontend ed il backend.
il frontend effettua la traduzione del codice sorgente 
ad una forma di pseudo-codice, e il backend da questo pseudo-codice
al formato binario specifico (uno dei motivi per cui e' tanto
affermato...
per aggiungere un nuovo linguaggio basta scrivere un frontend, per 
aggiungere una nuova architettura  basta aggiungere un nuovo 
backend...)
Con Merced andra' alla stessa maniera.
bye
Gianluca
-- 
E-Mail: 
gian...@pluto.linux.it
  Member of the Pluto Linux User Group
PHL Mantainer 
http://www.pluto.linux.it/phl/index.html
Boycott Microsoft 
http://www.boycott-ms.org/

 occhi un caso da manuale.
Non ho mai ricompilato il kernel di linux, ma immagino che sia
sufficiente ricompilare, sostituire il file (o i file) che contiene il
kernel e riavviare il sistema. Ma come faccio se il sistema non esiste o
comunque non e' ancora in grado di far girare il necessario per lavorare?


 comunque non e' ancora in grado di far girare il necessario per lavorare?
Cioe' tu vorresti compilare un kernel di Linux su una macchina dove
non c'e' linux ? Dovresti avere uno Unix, un cross-compiler ed un
po' di pazienza.
Ma per installare Linux non serve compilare il kernel _prima_ di 
installarlo...


 po' di pazienza.
No, parlo di un altro sistema operativo ipotetico e non specificatamente
di Linux.
Supponiamo che un giorno mi salti in mente di fare un nuovo sistema
operativo (ipotesi molto remota), e decida di scrivere il kernel in C.
E' chiaro che la prima cosa che dovrei fare e' scegliere un computer sul
quale far funzionare il sistema. Supponiamo pure che sia in grado di
costruirmi un computer da zero su cui non funzionano gli altri sistemi
operativi. Come faccio a scrivere, compilare, provare un sistema
operativo per questo computer? Ma gia' utilizzando un computer
comunemente in circolazione con un suo sistema operativo, come ad
esempio un comunissimo PC, come faccio a fare una cosa elementare quale
il debugging di quello che scrivo, visto che si tratta di qualcosa che
prende possesso dell'intera macchina?
A scanso di equivoci, non ho nessuna voglia, ne le conoscenze, ne il
tempo e ne il denaro per fare una cosa del genere. Mi voglio solo
togliere una curiosita'.
Ciao.



In una parola: EMULATORI
Ciao,
Fabio Alemagna

 prende possesso dell'intera macchina?
Beh, e' semplice, anzi no, il concetto e' semplice: ci arrivi per
gradi. Il processore deve essere fatto in modo da eseguire un
programma residente in una ROM partendo da uno specifico indirizzo (li
trovi a poche decine di migliaia di lire nei negozi di elettronica, se
ti basta qualcosa tipo uno Z80). Nella ROM ci metti un bios scritto
nell'assembler del processore tramite un programmatore (anche questo,
te lo costruisci con pochi pezzi, in sostanza e' composto da una
tastiera esadecimale, un buffer, un contatore, uno zoccolo, tutti
componenti monolitici gia' pronti).
Il bios lo fai in modo che ti consenta di scrivere una seguenza
binaria su un disco e che possa farci il boot in automatico, e da qui
cominci a scrivere un kernel di un os che ti consenta di scrivere dei
file distinti (binari anch'essi) e di eseguirli. In questo modo ti
puoi creare un compilatore assembly, col quale tirerai fuori un
compilatore C, e via dicendo.
Come vedi, il concetto e' semplice... e' attuarlo che e' un po' piu'
difficile.
Ciao
-- 
Gabriele Biffi
gbi...@usa.net
 - ICQ: 5169491
http://www.rete039.it/civis/gbiffi/
"Il Pensiero genera l'Eresia; l'Eresia genera il Castigo." - WarHammer

fabr...@iride.com
 wrote:
 >E' chiaro che la prima cosa che dovrei fare e' scegliere un computer sul
 >quale far funzionare il sistema. Supponiamo pure che sia in grado di
 >costruirmi un computer da zero su cui non funzionano gli altri sistemi
 >operativi. Come faccio a scrivere, compilare, provare un sistema
 >operativo per questo computer? Ma gia' utilizzando un computer
Per prima cosa devi scrivere un compilatore per questo sistema. Nel caso
di gcc e` piuttosto facile perche` basta scrivere il backend e poi
compilare una copia di gcc che faccia da crosscompiler verso la nuova
architettura. Questo ha anche altri scopi, molti sviluppatori di
linux/m68k compilano i propri programmi su un PC perche` per esempio ci
vogliono parecchi giorni a compilare X su una amiga...
 >comunemente in circolazione con un suo sistema operativo, come ad
 >esempio un comunissimo PC, come faccio a fare una cosa elementare quale
 >il debugging di quello che scrivo, visto che si tratta di qualcosa che
 >prende possesso dell'intera macchina?
#define ZZZ printf("hey, sono arrivato a %lu!\n", __LINE__);
messo nei punti critici. Un debugger di solito non lo puoi usare nemmeno
adesso sul kernel.
-- 
ciao, | [Per rispondere togli "toglimi" dal mio indirizzo.]
Marco | > Mettete 
maxa...@tin.it
 nel vostro killfile (Pub. progresso) <

fale...@studenti.unina.it
 wrote:
 >In una parola: EMULATORI
Se hai l'hardware vero a disposizione di un emulatore non te ne fai
niente. (Ovviamente a meno di non dovere bruciare una eprom ogni volta,
ma a questo punto considererei un po' di ram dual port.)


 ma a questo punto considererei un po' di ram dual port.)
E il debug dove lo metti? Inoltre non metti in conto che non spendi
praticamente una lira?
E poi è più comodo, suvvia ;))
Ciao,
Fabio Alemagna

 ma a questo punto considererei un po' di ram dual port.)
Avevo sentito parlare di questi emulatori. Comunque, non mi pare un'idea
malvaggia. Anzi, puoi fare molte cose che con la macchina reale non puoi
fare. Poi, controlli in sistema senza intervenire sul sistema stesso. Mi
spiego meglio, un qualsiasi sistema di debugging, per quanto ridotto
possa essere, in qualche modo interviene sul sistema e ne modifica lo
stato. L'unico modo per essere sicuri che questo non avvenga e'
utilizzare un sistema di controllo esterno. Cioe', posso fermare la CPU
e' vedere in che stato si trova senza che questo comporti un cambiamento
di stato della stessa CPU?
Di contro, non e' detto che l'emulazione sia corretta.


fabr...@iride.com
 wrote:
 >Di contro, non e' detto che l'emulazione sia corretta.
Esatto. Una cosa e` emulare uno Z80 o un 8086 (cosa che qualcuno qui
dentro ha fatto su AIX...), una cosa e` emulare un processore moderno e
complesso.


 Di contro, non e' detto che l'emulazione sia corretta.
Beh, questo è facilmente appurabile, e nel caso non sia corretta si pone
rimedio. Cmq non sto dicendo niente di nuovo: l'uso degli emulatori per
lo sviluppo di OSs è molto diffuso.
Ciao,
Fabio Alemagna

 No, perchč gli emulatori esistoo dalla notte dei tempi...
Agli emulatori utilizzati per sviluppare hardware e s.o.


In una parola: EMULATORI
Si dice che Intel dovrebbe rilasciare a breve un emulatore Merced che
gira sopra dei Pentium. Sconosciuto il S.O., (forse anche quello in
emulazione n.d.p.).
------------------------------------------------
Rimuovi (delicatamente) il Papero per le repliche

 complesso.
Ma che significa? Siate pratici: voi che ne sapete di emulazione che
potete giudicare?
L'emulatore è un programma, e si sa se è buono oppure no. I processori
sono ben documentati e non c'è dubbio su cosa deve essere emulato. O lo
emuli o non lo emuli. Se qualche bug c'è deriva dalla distrazione, e
subito si scopre, perchè i programmi non funzionano.
Difficilmente un emulatore ha bugs nascosti.
Ciao,
Fabio Alemagna

 Di contro, non e' detto che l'emulazione sia corretta.
Ho piu' esperienza di processori che non rispondono alle specifiche
che di emulatori che non rispondono alle specifiche...
