2012-10-25 17 views
30

Ricordo di aver sentito parlare di un sistema operativo incorporabile che è essenzialmente solo libc (forse aveva il supporto per C++). Non aveva un kernel, pipe o altre cose che ti aspetti da un sistema operativo. Ho provato a cercarlo in wikipedia ma non l'ho visto elencato.Esiste un sistema operativo LibC?

Esiste un tale sistema operativo? Esiste un sistema operativo che supporti o un solo terminale o socket C/C++ + (tcp) per comunicare all'esterno di una VM? Sarebbe utile per me come un giocattolo.

+0

Non sono del tutto sicuro di cosa intendi. Per quale architettura stai cercando di trovare un sistema operativo? Conosco [uC/OS] (http://en.wikipedia.org/wiki/MicroC/OS-II) che è scritto in C e funziona su microcontrollori, ma nonostante ciò, le sue funzionalità sono piuttosto buone. – ppeterka

+0

Se stai cercando qualcosa con un ingombro ridotto, Linux può facilmente adattarsi alla bolletta senza alcun programma per lo spazio utente tranne il tuo e la libc. Sebbene glibc di default abbia un ingombro elevato, ci sono molti progetti di libc di dimensioni ridotte. – Linuxios

risposta

37

Il motivo per cui non si sta cercando un nome per questo è che non è un sistema operativo: è l'assenza di un sistema operativo. Spesso questo è chiamato qualcosa come programmazione "bare metal".

L'idea generale della programmazione bare-metal è che c'è un piccolo bit di codice generico - uno "bootloader" - che imposta il controller di memoria e altri elementi hardware sulla scheda, e quindi trasferisce il controllo a il tuo programma (I sistemi operativi hanno anche bootloader, quindi in questo senso il tuo programma è che sostituisce il sistema operativo.) Uboot è un bootloader open source abbastanza comune, quindi potrebbe essere un buon punto di partenza per cercare informazioni.

Uno dei bit più complicati della programmazione bare-metal è che, poiché non esiste un sistema operativo in grado di gestire una qualsiasi delle comunicazioni hardware, è necessario pensare a "cosa significa realmente un printf fino a quali dati vanno a quale periferica? " e "come posso farlo andare lì?" Ancora una volta, alcuni bootloader forniscono supporto per questo tipo di cose, anche se non è sempre banale connettersi. Ancora una volta, Uboot è un buon esempio.

Nel frattempo, la libreria C stessa verrà effettivamente fornita dal compilatore, anziché dal bootloader.

(Devo anche aggiungere, come nota di un nome: La società per cui lavoro produce una serie di compilatori bare metal e Linux, noti come Sourcery CodeBench.Per CodeBench, le versioni bare metal prendono generalmente il nome dalle specifiche ABI che usano per collegare i programmi, quindi le versioni "ELF" o "EABI" sono tutti compilatori bare metal, e penso che sia un modo abbastanza comune di riferirsi a questo una specie di cosa, quindi vedrai anche questo tipo di nome.)

+1

Ottimo post. [Qui] (http://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html) è un'illustrazione del tuo terzo paragrafo. Scorrendo la pagina, c'è un esempio di codice, che dimostra l'associazione di una funzione uart io personalizzata a stdin, stdout e stderr. D'ora in poi, printf() e scanf() hanno un significato. – Vorac

6

Penso che ci sia un problema con alcune delle vostre ipotesi. Hai ragione nel dire che non hai bisogno di un kernel per un sistema operativo, ma tutto ciò che può eseguire applicazioni può essere compilato staticamente in libc.

See: http://www.superfrink.net/athenaeum/OS-FAQ/os-faq-libc.html

Ad esempio, è possibile utilizzare printf finchè si compila quella funzione per il sistema operativo. Quindi, puoi usare MenuetOS fintanto che crei libc per questo.

Ora esiste una versione ridotta di libc su http://pdclib.rootdirectory.de/ che può essere utilizzata da alcuni sistemi incorporati.

In questo modo qualsiasi sistema operativo piccolo può essere considerato un sistema operativo per l'esecuzione di libc.

6

Fondamentalmente un kernel non è necessario, ma se si sta cercando un sistema operativo minimo http://wiki.osdev.org/Projects potrebbe essere un punto di partenza. ci sono molti progetti di hobby e semi professionali che supportano le cose di base e hanno un ingombro minimo. Inoltre ci sono alcuni buoni tutorial da scrivere da soli. È inoltre necessario considerare che i driver ecc. Sono necessari per cose semplici come l'I/O di rete o seriale.

Anche Il kernel di Linux è sempre un buon inizio (qualche tempo fa c'era una distro linux che era solo di 20 MB)

3

Libcc non è un sistema operativo. Sebbene la definizione di SO sia alquanto sfocata, include più di un'API. Richiede gestione della memoria, pianificazione dei processi, ecc.

5

Ce ne sono molti.

La maggior parte dei sistemi operativi in ​​tempo reale professionali (RTOS) ha un'implementazione più o meno completa della libreria C, e spesso anche per C++ (ad esempio Keil MDK, μItron). Sebbene nella pratica tendiate spesso ad evitarlo, perché utilizza troppe risorse disponibili.

Un RTOS in genere ha un kernel molto piccolo, senza supporto per file o pipe. Invece tendono a supportare attività, timer, code e flag di eventi, con un sovraccarico molto piccolo.

Problemi correlati