2012-10-25 2 views
30

基本的にlibcである組み込み可能なOSについて聞いたことがあります(おそらく、C++をサポートしていた可能性があります)。カーネル、パイプ、またはosから期待している他のものはありませんでした。私はそれを探してみたin wikipediaしかし、私はそれが表示されませんでした。LibCが存在しますか?

このようなOSは存在しますか? VMの外で通信するための端末のみまたはC/C++ +(tcp)ソケットをサポートするOSはありますか?それはおもちゃのように私には便利だろう。

+0

私はあなたが何を意味するかは完全にはわかりません。どのようなアーキテクチャでOSを探していますか?私はC言語で記述され、マイクロコントローラで動作する[uC/OS](http://en.wikipedia.org/wiki/MicroC/OS-II)を知っていますが、それにもかかわらず、機能はかなり良いです。 – ppeterka

+0

小さなフットプリントで何かを探しているのならば、Linuxはあなたとlibc以外のユーザスペースプログラムなしで簡単に請求書に適合することができます。デフォルトのglibcはフットプリントが大きいですが、小さなフットプリントのlibcプロジェクトがたくさんあります。 – Linuxios

答えて

37

名前を見つけられないのは、オペレーティングシステムではないということです。オペレーティングシステムがないからです。しばしば、これは「ベアメタル」プログラミングのようなものです。

ベアメタルプログラミングの一般的な考え方は、メモリコントローラとその他のハードウェアをボード上にセットアップする汎用コード("bootloader")の小さなビットがあることです。あなたのプログラム。 (オペレーティングシステムにもブートローダがあるので、あなたのプログラムはで、オペレーティングシステムはになります)Ubootは、オープンソースのブートローダであり、情報を探すのに適しています。

ベアメタルプログラミングに関する厄介な点の1つは、ハードウェア通信を処理するためのオペレーティングシステムがないため、「実際にはprintfはどういう意味ですか?どのデータがどの周辺機器に送られるのか」 「どうすればそこに行くの?」繰り返しますが、ブートローダの中には、このようなことをサポートするものがありますが、それをすべて接続するのは簡単ではありません。ここでも、Ubootは良い例です。

一方、Cライブラリ自体は実際にはブートローダではなくコンパイラによって提供される予定です。

(私は名前の注記として追加する必要があります:私が働く会社は、Sourcery CodeBenchとして知られている一連のベアメタルとLinuxコンパイラを作っています。CodeBenchの場合、ベアメタル版は一般にプログラムをリンクするために使用するABI仕様に基づいていますので、「ELF」または「EABI」版はすべてベアメタルのコンパイラです。これはかなり一般的な方法ですあなたの名前のようなものも見ています)。

+1

グレートポスト。 [Here](http://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html)は、3番目の段落の図です。ページをスクロールすると、カスタムのuart関数をstdin、stdout、stderrにバインドするコードサンプルがあります。以後、printf()とscanf()は意味を持ちます。 – Vorac

6

あなたの前提のいくつかに問題があると思います。あなたはOSにカーネルは必要ないと言うのは間違いありませんが、アプリケーションを実行できるものはlibcで静的にコンパイルできます。

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

例えば、あなたがお使いのOSのためにその関数をコンパイルするとprintfの限り使用することが可能です。だから、あなたはそれのためのlibcを構築する限りMenuetOSを使用することができます。

埋め込みシステムで使用できるlibcの小さなバージョンがhttp://pdclib.rootdirectory.de/に存在します。

このように、小さなOSはlibcを実行するOSと見なすことができます。

6

基本的にカーネルは必要ありませんが、最小のosを検索する場合は、http://wiki.osdev.org/Projectsを開始することができます。基本的なことをサポートし、小さなフットプリントを持っている多くの趣味やセミプロフェッショナルプロジェクトがあります。また、あなた自身で書くための良いチュートリアルもあります。あなたはまた、ネットワークやシリアルI/Oのような簡単なものがドライバなどに必要であると考える必要があります。

また、Linuxカーネルは常に良いスタートです(いくつかの時間前にちょうど20メガバイト程度であったLinuxディストリビューションがありました)

3

Libccは、オペレーティング・システムではありません。 OSの定義はやや曖昧ですが、それはAPI以上のものを含んでいます。メモリ管理、プロセススケジューリングなどが必要です。

5

これらのものはたくさんあります。

ほとんどのプロフェッショナルリアルタイムオペレーティングシステム(RTOS)には、Cライブラリの実装が多かれ少なかれ、C++の場合もあります(Keil MDK、μItronなど)。実際には、使用可能なリソースが多すぎるため、頻繁に使用しないでください。

RTOSは、通常、ファイルやパイプをサポートしていない非常に小さなカーネルです。代わりに、ほとんどのオーバーヘッドでタスク、タイマー、キュー、イベントフラグをサポートする傾向があります。

関連する問題