使用Real Time Linux开始编程的最佳方法是什么?

时间:2015-03-30 23:41:20

标签: real-time embedded-linux rtos

虽然我在C中实现了很多项目,但我对操作系统完全不熟悉。我在发现板(STM32)上尝试了实时linux并获得了正确的LED闪烁结果,但我并没有真正理解整个过程,因为我只是按照步骤操作,无法找到互联网上每一步的完整描述。

我想在实时linux上实现调度。什么是最好的开始方式?有网站,书籍,教程吗?

完整的RTLinux流程描述将不胜感激。

谢谢你。

3 个答案:

答案 0 :(得分:5)

从“裸机”到基于操作系统的编程的过渡是我反过来经历的。我开始是一个完整的软件人员,完全进入操作系统方面,随着时间的推移,我已经转向了相反的方向(甚至用VHDL设计电路!)。我的建议是从简单开始。 Linux非常复杂,无论你在哪里看,都有很多层面的东西在一起工作以提供最终产品。如果您在实时Linux扩展中设置了死机,我很乐意建议https://xenomai.org/这是Linux的实时扩展。

但是,为了更具体地解决您在Linux中实施调度的问题,您可以,但这将是一项大量的工作,并且可能非常复杂。操作系统使用完全公平的调度过程(http://en.wikipedia.org/wiki/Completely_Fair_Scheduler),每当您启动一个线程时,它就会被添加到列表中以便运行。如果您在内核空间中将代码实现为驱动程序,依赖硬件中断等,这可能略有不同,但总的来说,这就是Linux的工作原理。实时通常意味着它能够分配几个不同优先级之一的线程,并在任何给定时间完全利用线程抢占,这些概念实际上不是vanilla Linux的一部分。它有一些这方面的概念,但它有一些限制,当你从Linux寻找实时行为时可能会导致问题。

对您有帮助的是RTOS。如果您正在寻找完整的实时操作系统,请查看FreeRTOS http://www.freertos.org/。它有一个庞大的社区,并支持大量不同的设备,包含大量的示例代码。他们甚至通过一个示例包装支持您的特定电路板,因此您可以给它一个没有任何损失! http://www.freertos.org/FreeRTOS-for-Cortex-M3-STM32-STM32F100-Discovery.html。它使您可以访问许多OS ish构造,如网络API,内存管理和线程,而无需巨大操作系统的开销和延迟。使用RTOS,您可以创建任务并为其分配优先级,这样您就可以成为调度程序,不再受操作系统的限制。你运行操作系统,而不是操作系统运行你(如果这是有道理的)。此外,RTOS中提供的构造将非常像裸机代码,因此更容易理解和理解。学习Linux或Windows等完整操作系统的基本构建块是一个更简单的世界。如果这个选项听起来不错,我建议您浏览FreeRTOS网站上支持的设备并选择一个您想要试验的设备,然后再进行试验。我强烈建议您将此作为一种了解调度和操作系统结构的方法,因为它很简单,因为它可以获得和开源。一旦你掌握了RTOS的基础知识,购买一本关于Linux的书并不是一个坏主意。虽然网络上有许多与学习Linux有关的免费资源,但它们通常是矛盾的,并且可能会产生误导。一般来说,学习Linux特定知识以及操作系统,它会让人感到压倒一切。开始更简单将有助于防止您被烧毁,并最大限度地减少您感到迷失的时间。 Linux绝对是一个学习过程,但与任何学习过程一样,从简单开始,牢记您的最终目标,制定计划,并沿着该计划采取小的,可管理的步骤,直到您查找并找到自己想要成为的目标。 。然后去处理下一座山!

答案 1 :(得分:2)

实时Linux环境令人困惑。 99.99%的信息只是过时了。

首先,有许多“微内核”将Linux作为一项任务运行。 (例如已解散的RTLinux)。问题是您必须将实时任务写入不同的API,并且不能依赖于Linux中的任何,因为Linux将在您的任务运行时在后台冻结。因此,除非你的任务很简单(“当按下这个按钮时停止电机”),这种方法会带来更多的痛苦而不是获得。

接下来,有实时Linux补丁集。 This hasn't been doing so well.因为下一项:

最后,当前的Linux内核gotten rid of the problems导致人们过去需要实时。您甚至可以将其中一个处理器上的Linux关闭到have full control of the CPU。另请参阅this paper

回答你的问题:我看到你可以采取两种不同的途径:

1)从正常的3.xx Linux内核开始,探索各种API和实时技术(即实时优先级,内存固定等)。这可以让你“足够接近”99%的人们想要的“实时” “为了。如果它对于高频交易来说已经足够好了,那对你来说可能已经足够了。

2)如果你有一个严格的实时要求并且你担心Linux不会削减它,那么(正如Nick上面提到的那样),只需购买处理器并编写没有操作系统的实时代码。通过将“实时”和“非实时”代码分割到不同的CPU上,您将使整个系统更简单,并且更强更强大。

答案 2 :(得分:0)

如果您想学习实时操作系统,那么我建议您使用FPGA,例如Altera DE2,并尝试使用您自己的操作系统和ucos。您可以阅读有关嵌入式RTOS here的好文章。

您还可以获得Linux Raspberry并为此编写自己的操作系统。