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

3

虽然我在C语言方面已经实现了许多项目,但我对操作系统完全是新手。我在Discovery板(STM32)上尝试了实时Linux,并得到了LED闪烁的正确结果,但我并没有真正理解整个过程,因为我只是按照步骤进行操作,在互联网上找不到每个步骤的完整描述。

我想在实时Linux上实现调度。有什么最好的入门方式吗?是否有任何网站、书籍或教程可用?

如果能提供完整的RTLinux过程描述将不胜感激。

谢谢!


3
像这样类似的问题,最好(我的意见)的方法是只需要去实践它。然后再次实践它,一遍又一遍地重复。如果不知道从哪里开始,可以研究一个已经开始的项目并在其基础上工作/模仿它。如果您有关于特定代码行或过程的具体问题,请阅读文档(或者有针对性地提问)。调整学习策略以适合自己。 - user2864740
3个回答

8

我曾经反向体验了从“裸机”到基于操作系统的编程的转变。我一开始是完全的软件人员,完全专注于操作系统方面,随着时间的推移,我已经转向相反的方向(甚至使用VHDL设计电路!)。我的建议是从简单的开始。Linux相当复杂,无论你看哪里,都有许多层次的东西一起工作,以交付最终产品。如果你决心要进行实时Linux扩展,我很乐意建议https://xenomai.org/,这是一个针对Linux的实时扩展。

然而,要更具体地回答您关于在Linux中实现调度的问题,是可以的,但这需要大量的工作并且可能非常复杂。操作系统使用完全公平的调度过程(http://en.wikipedia.org/wiki/Completely_Fair_Scheduler),每当您启动一个线程时,它就会被添加到运行列表中。如果您将代码实现为驱动程序在内核空间中,依赖于硬件中断等,则可能略有不同,但通常情况下,Linux的工作方式如此。实时通常意味着它有能力为线程分配几个不同的优先级,并随时充分利用线程抢占,这些概念实际上并不是vanilla Linux的一部分。它有一些概念,但由于其限制,当您从Linux寻求实时行为时可能会出现问题。
可能对你有帮助的是一个RTOS。如果你正在寻找一个全功能的实时操作系统,可以看看FreeRTOShttp://www.freertos.org/。它拥有庞大的社区,并且支持大量不同的设备,提供了大量示例代码。他们甚至还提供了适用于你特定板子的示例包,所以你可以毫无压力地尝试一下!http://www.freertos.org/FreeRTOS-for-Cortex-M3-STM32-STM32F100-Discovery.html。使用RTOS,你可以创建任务并为它们分配优先级,这样你就成为了调度器,不再受操作系统的控制。你运行OS,而不是OS控制你(如果这样说有意义的话)。此外,在RTOS中提供的构造会感觉很像裸机代码,因此更容易理解和学习。这是学习完整的操作系统如Linux或Windows基本构建块的更简单的方法。如果你喜欢这个选项,我建议你浏览FreeRTOS网站上支持的设备,选择一个你想要尝试的设备,然后开始吧。我强烈推荐这种方式来学习调度和操作系统构造,因为它是最简单的,而且是开源的。一旦你掌握了RTOS的基础知识,购买关于Linux的书籍也不失为一个好主意。虽然有许多免费的网络资源与学习Linux相关,但它们常常是互相矛盾的,并且可能会误导你。学习Linux特定的知识以及操作系统一般的知识,会感到压力很大。开始更简单的方式将有助于防止你被烧毁,并最小化你感到迷失的时间。Linux绝对是一个学习过程,但就像任何学习过程一样,要从简单的开始,牢记你的最终目标,制定计划,并沿着那个计划采取小而可管理的步骤,直到你发现自己正好在你想要的地方。然后去攻克下一个高峰!

4
实时 Linux 领域非常混乱。99.99% 的信息都已经过时了。
首先,有许多“微内核”将 Linux 作为一个任务运行(例如停止的 RTLinux)。问题在于,您必须使用不同的 API 编写实时任务,并且不能依赖于 Linux 中的 任何东西,因为 Linux 在后台被冻结,而您的任务在运行。因此,除非您的任务非常简单(例如,“按下该按钮时停止电机”),否则这种方法会带来更多的痛苦而不是收益。
其次,有实时 Linux 补丁集。但是近来效果并不好。因为接下来的事项:
最后,当前的 Linux 内核已经摆脱了导致人们在过去需要实时性的问题。您甚至可以关闭一个处理器上的 Linux 来完全控制 CPU。另请参阅这篇文章
针对您的问题:我认为您可以选择两条不同的道路:
1)首先使用正常的 3.xx Linux 内核并探索各种 API 和实时技术(例如实时优先级,内存固定等)。这足以满足99%的人所需的“实时性”。如果它足以满足高频交易,那么对于您来说也可能足够好。
2)如果您具有强实时要求,并且担心 Linux 无法胜任,则(如上文所述),只需购买一个处理器并编写没有操作系统的实时代码。通过将“实时”和“非实时”代码分割到不同的 CPU 上,您将使整个系统更简单,更加健壮。

0
如果你想学习实时操作系统,我建议你购买一个FPGA,例如Altera DE2,并尝试使用自己的操作系统和ucos进行实验。你可以在这里阅读一本关于嵌入式RTOS的好书here
你也可以购买一个Linux Raspberry并为其编写自己的操作系统。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接