31 c c++ embedded operating-system osdev
我记得听说过一个基本上只是libc的可嵌入操作系统(可能它支持c ++).它没有内核,管道或你期望从os获得的任何其他东西.我尝试在维基百科中查找它,但我没有看到它列出.
这样的OS存在吗?是否有支持终端或C/C++ +(tcp)套接字的操作系统在VM外部进行通信?这对我来说很有用.
Bro*_*ses 38
你没有找到这个名字的原因是它不是一个操作系统 - 它缺少一个操作系统.通常这被称为"裸机"编程.
裸机编程的一般思想是有一小部分通用代码 - 一个"引导程序" - 用于设置板上的内存控制器和其他硬件,然后将控制转移到程序中.(操作系统也有bootloader,所以从这个意义上说你的程序正在取代操作系统.) Uboot是一个相当常见的开源引导程序,所以这可能是一个开始寻找信息的好地方.
关于裸机编程的一个棘手的问题是,由于没有适当的操作系统来处理任何硬件通信,你必须考虑"就数据的变化而言,printf究竟意味着什么?什么外围?" 和"如何让它去那里?" 同样,一些引导加载程序为这种事情提供了支持,尽管连接它并不总是微不足道.同样,Uboot就是一个很好的例子.
同时,C库本身实际上将由编译器提供,而不是由引导程序提供.
(我还应该补充一下,作为一个名称说明:我工作的公司生产一系列裸机和Linux编译器,称为Sourcery CodeBench.对于CodeBench,裸机版本通常以它们用于的ABI规范命名.链接程序,所以"ELF"或"EABI"版本都是裸机编译器,我认为这是一种很常见的引用这种东西的方式,所以你也会看到这种名称.)
我认为你的一些假设存在问题.你说你不需要内核用于操作系统是正确的,但任何可以运行应用程序的东西都可以在libc中静态编译.
见:http://www.superfrink.net/athenaeum/OS-FAQ/os-faq-libc.html
例如,只要为os编译该函数,就可以使用printf.因此,只要为它构建libc,就可以使用MenuetOS.
现在http://pdclib.rootdirectory.de/上存在一个小版本的libc ,一些嵌入式系统可以使用它.
通过这种方式,任何小型操作系统都可以被视为运行libc的操作系统.
小智 6
基本上不需要内核,但如果你正在寻找一个最小的操作系统http://wiki.osdev.org/Projects可能是一个重要的开始点.有许多业余爱好和半专业项目支持基本的东西,占地面积小.还有一些很好的教程可以自己编写.您还需要考虑驱动程序等对网络或串行I/O等简单事物的需求.
另外Linux内核总是一个好的开始(前段时间有一个Linux发行版只有大约20MB)
有很多这些.
大多数专业的实时操作系统(RTOS)都或多或少地完成了C库的实现,甚至通常用于C++(例如Keil MDK,μItron).虽然在实践中你经常倾向于避免它,因为它使用了太多的可用资源.
RTOS通常具有非常小的内核,不支持文件或管道.相反,他们倾向于支持任务,计时器,队列和事件标志,而且开销很小.