2012-10-25 14 views
30

Ich erinnere mich an ein embeddable OS, das im Wesentlichen nur libc ist (vielleicht hatte es Unterstützung für C++). Es hatte keinen Kernel, Pipes oder irgendwelche anderen Dinge, die man von einem Betriebssystem erwartet. Ich habe versucht, es zu suchen in wikipedia, aber ich habe es nicht aufgeführt.Existiert eine LibC?

Gibt es ein solches Betriebssystem? Gibt es ein Betriebssystem, das entweder nur ein Terminal oder C/C++ + (TCP) Sockets unterstützt, um außerhalb einer VM zu kommunizieren? Das wäre mir als Spielzeug nützlich.

+0

Ich bin mir nicht ganz sicher, was du meinst. Für welche Architektur suchst du ein Betriebssystem? Ich kenne [uC/OS] (http://en.wikipedia.org/wiki/MicroC/OS-II), das in C geschrieben ist und auf Mikrocontrollern läuft, aber trotzdem sind seine Features ziemlich gut. – ppeterka

+0

Wenn Sie nur nach etwas mit einem kleinen Fußabdruck suchen, kann Linux die Rechnung ohne irgendwelche Benutzerprogrammprogramme außer für Ihre und libc leicht passen. Obwohl der Standard-glibc eine große Grundfläche hat, gibt es viele kleine libc-Projekte. – Linuxios

Antwort

37

Der Grund, dass Sie keinen Namen dafür finden, ist, dass es kein Betriebssystem ist - es ist das Fehlen eines Betriebssystems. Oft wird dies als "Bare-Metal" -Programmierung bezeichnet.

Die allgemeine Idee der Bare-Metal-Programmierung ist, dass es ein wenig allgemeinen Code gibt - eine "bootloader" - die den Speichercontroller und andere Hardware-Dinge auf der Platine einrichtet, und dann überträgt die Kontrolle an dein Programm. (Betriebssysteme haben auch Bootloader, in diesem Sinne ist Ihr Programm ersetzt das Betriebssystem.) Uboot ist eine ziemlich häufig verwendete Open-Source-Bootloader, so dass ein guter Ort sein könnte, um nach Informationen zu suchen.

Eines der kniffligen Dinge an der Bare-Metal-Programmierung ist, dass, da es kein Betriebssystem für die Hardware-Kommunikation gibt, man sich überlegen muss, was eigentlich ein Printf bedeutet Welche Daten werden an welches Peripheriegerät gesendet? " und "wie mache ich es dorthin?" Auch hier bieten einige Bootloader Unterstützung für diese Art von Dingen, obwohl es nicht immer trivial ist, alles zu verbinden. Auch hier ist Uboot ein gutes Beispiel.

In der Zwischenzeit wird die C-Bibliothek selbst von Ihrem Compiler und nicht vom Bootloader zur Verfügung gestellt.

(Ich sollte auch hinzufügen, als ein Name Hinweis: Die Firma, für die ich arbeite, macht eine Reihe von Bare-Metal und Linux-Compiler, bekannt als Sourcery CodeBench.Für CodeBench sind die Bare-Metal-Versionen in der Regel nach der ABI-Spezifikation benannt, die sie zum Verknüpfen von Programmen verwenden, so dass die "ELF" - oder "EABI" -Versionen Bare-Metal-Compiler sind, und ich denke, das ist eine ziemlich übliche Art, darauf zu verweisen so etwas, so dass Sie diese Art von Namen auch sehen werden.)

+1

Toller Beitrag. [Hier] (http://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html) ist eine Illustration Ihres dritten Absatzes. Beim Scrollen auf der Seite gibt es ein Codebeispiel, das zeigt, wie eine benutzerdefinierte UART-Funktion an stdin, stdout und stderr gebunden wird. Fortan haben printf() und scanf() eine Bedeutung. – Vorac

6

Ich denke, es gibt ein Problem mit einigen Ihrer Annahmen. Sie sagen zwar, dass Sie keinen Kernel für ein Betriebssystem benötigen, aber alles, was Anwendungen ausführen kann, kann statisch in libc kompilieren.

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

Zum Beispiel ist es möglich, printf so lange zu benutzen, wie Sie diese Funktion für Ihr Betriebssystem kompilieren. Sie können also MenuetOS verwenden, solange Sie libc dafür erstellen.

Jetzt gibt es eine kleine Version von libc bei http://pdclib.rootdirectory.de/, die einige eingebettete Systeme verwenden können.

Auf diese Weise kann jedes kleine Betriebssystem als Betriebssystem zum Ausführen von libc betrachtet werden.

6

Grundsätzlich ist ein Kernel nicht erforderlich, aber wenn Sie nach einem minimalen os http://wiki.osdev.org/Projects suchen, könnte ein Punkt zu starten sein. Es gibt eine Menge Hobby- und halbprofessionelle Projekte, die grundlegende Dinge unterstützen und einen kleinen Fußabdruck haben. Außerdem gibt es einige gute Tutorials, um es selbst zu schreiben. Sie müssen auch berücksichtigen, dass Treiber usw. für einfache Dinge wie Netzwerk oder serielle I/O benötigt werden.

Auch der Linux-Kernel ist immer ein guter Anfang (vor einiger Zeit gab es eine Linux-Distribution, die nur etwa 20 MB war)

3

Libcc ist kein Betriebssystem. Obwohl die Definition von OS etwas unscharf ist, umfasst sie mehr als eine API. Es erfordert Speicherverwaltung, Prozessterminierung, ect.

5

Es gibt viele davon.

Die meisten professionellen Echtzeit-Betriebssysteme (RTOS) kommen mit einer mehr oder weniger vollständigen Implementierung der C-Bibliothek und oft sogar für C++ (zum Beispiel Keil MDK, μItron). In der Praxis tendieren Sie jedoch dazu, dies zu vermeiden, da zu viele verfügbare Ressourcen verwendet werden.

Ein RTOS hat normalerweise einen sehr kleinen Kernel, ohne Unterstützung für Dateien oder Pipes. Stattdessen neigen sie dazu, Aufgaben, Timer, Warteschlangen und Ereignisflags mit sehr geringem Aufwand zu unterstützen.

Verwandte Themen