使用 Real Time Linux 开始编程的最佳方式是什么?
What is the best way to start programming with Real Time Linux?
虽然我用C 实现了很多项目,但我对操作系统完全陌生。我在 Discovery board (STM32) 上尝试了实时 linux 并得到了闪烁 LED 的正确结果,但我并没有真正理解整个过程,因为我只是按照步骤操作,但找不到每个步骤的完整描述互联网。
我想实现实时调度linux。最好的开始方式是什么?有可用的网站、书籍和教程吗?
完整的 RTLinux 进程描述将不胜感激。
感谢副词。
如果你想学习实时操作系统,那么我建议你买一个FPGA,比如Altera DE2,用你自己的操作系统和ucos来做实验。您可以阅读有关嵌入式 RTOS 的好文 here.
您也可以获得 Linux Raspberry 并为此编写您自己的操作系统。
实时Linux景观相当混乱。 99.99% 的信息都已经过时了。
首先,有很多 "microkernels" 运行 Linux 作为一项任务。 (比如失效的 RTLinux)。问题是你必须把你的实时任务写到不同的API,并且不能依赖Linux中的任何东西,因为Linux 将在后台冻结,而您的任务 运行s。因此,除非您的任务非常简单 ("stop the motors when I press this button"),否则这种方法将带来更多的痛苦而不是收获。
接下来是实时 Linux 补丁集。 This hasn't been doing so well. 因为下一项:
最后,当前 Linux 内核有 gotten rid of the problems that caused people to need realtime in the past. You can even turn off Linux on one of your processors to have full control of the CPU. See also this paper。
回答您的问题:我看到您可以采取两种不同的途径:
1) 从普通 3.xx Linux 内核开始,探索各种 APIs 和实时技术(即实时优先级、内存固定等)这可以让你"close enough" 人们想要 "realtime" 的 99%。如果它对高频交易来说足够好,那么它可能对你来说已经足够了。
2) 如果你有一个严格的实时要求并且你担心 Linux 不会削减它,那么(正如 Nick 上面提到的),只需去购买一个处理器并编写你的实时代码而不需要OS。通过将 "realtime" 和 "non-realtime" 代码拆分到不同的 CPU 上,您将使整个系统更简单,更 更健壮。
从 "bare metal" 到基于 OS 的编程的转变是我逆向经历的事情。我从一个完整的软件专家开始,完全进入事物的 OS 方面,随着时间的推移,我转向了相反的方向(甚至在 VHDL 中设计电路!)。我的建议是从简单开始。 Linux 非常复杂,无论您在哪里看到,都有许多层协同工作以交付最终产品。如果您对实时 linux 延期死心塌地,我很乐意建议 https://xenomai.org/ 这是 linux.
的实时延期
但是,要更具体地解决您关于在 Linux 中实施调度的问题,您可以,但这将是一项大量的工作,并且可能会非常复杂。 OS 使用完全公平的调度过程 (http://en.wikipedia.org/wiki/Completely_Fair_Scheduler),无论何时启动一个线程,它都会简单地添加到 运行 的列表中。如果您在内核 space 中将代码实现为驱动程序、依赖硬件中断等,这可能会略有不同,但一般来说,这就是 Linux 的工作方式。实时通常意味着它能够为线程分配几个不同的优先级之一,并在任何给定时间完全利用线程抢占,这些概念实际上并不是 vanilla Linux 的一部分。它有一些这方面的概念,但它有一些限制,当您从 Linux 寻找实时行为时可能会导致问题。
可能对你有帮助的是转发OS。如果您正在寻找完整的实时操作系统,请查看 FreeRTOS http://www.freertos.org/ . It has a large community and supports a lot of different devices out of the box with a large amount of example code. They even support your specific board with an example package, so you can give it a shot with nothing to lose! http://www.freertos.org/FreeRTOS-for-Cortex-M3-STM32-STM32F100-Discovery.html 。它使您可以访问许多 OS 类似的结构,如网络 API、内存管理和线程,而不会产生巨大的 OS 的开销和延迟。使用 RTOS,您可以创建任务并为它们分配优先级,这样您就可以成为调度程序,而不再受 OS 的摆布。你 运行 OS,而不是 OS 运行 你(如果这有意义的话)。此外,RTOS 中提供的结构感觉更像裸机代码,因此更容易遵循、理解和充分学习。学习完整 OS(例如 Linux 或 Windows 的基础构建块是一个更简单的世界。如果这个选项听起来不错,我建议您在 FreeRTOS 网站上查看支持的设备,然后选择您想要试用的设备,然后开始使用。我强烈推荐将此作为学习调度和 OS 总体结构的一种方式,因为它非常简单,而且是开源的。一旦掌握了 RTOS 的基础知识,购买一本关于 Linux 的书就不是一个坏主意。尽管网络上有许多与学习 Linux 有关的免费资源,但它们通常相互矛盾,并且可能会产生误导。大量学习 Linux 特定知识和 OS 一般知识,这会让人感到不知所措。从更简单的开始将有助于防止您精疲力竭,并最大程度地减少您感到迷茫的时间。 Linux 绝对是一个学习过程,但就像任何学习过程一样,从简单开始,牢记您的最终目标,制定计划,然后按照该计划采取小的、可管理的步骤,直到您抬头并找到自己的确切位置你想成为。那就去挑战下一座山吧!
虽然我用C 实现了很多项目,但我对操作系统完全陌生。我在 Discovery board (STM32) 上尝试了实时 linux 并得到了闪烁 LED 的正确结果,但我并没有真正理解整个过程,因为我只是按照步骤操作,但找不到每个步骤的完整描述互联网。
我想实现实时调度linux。最好的开始方式是什么?有可用的网站、书籍和教程吗?
完整的 RTLinux 进程描述将不胜感激。
感谢副词。
如果你想学习实时操作系统,那么我建议你买一个FPGA,比如Altera DE2,用你自己的操作系统和ucos来做实验。您可以阅读有关嵌入式 RTOS 的好文 here.
您也可以获得 Linux Raspberry 并为此编写您自己的操作系统。
实时Linux景观相当混乱。 99.99% 的信息都已经过时了。
首先,有很多 "microkernels" 运行 Linux 作为一项任务。 (比如失效的 RTLinux)。问题是你必须把你的实时任务写到不同的API,并且不能依赖Linux中的任何东西,因为Linux 将在后台冻结,而您的任务 运行s。因此,除非您的任务非常简单 ("stop the motors when I press this button"),否则这种方法将带来更多的痛苦而不是收获。
接下来是实时 Linux 补丁集。 This hasn't been doing so well. 因为下一项:
最后,当前 Linux 内核有 gotten rid of the problems that caused people to need realtime in the past. You can even turn off Linux on one of your processors to have full control of the CPU. See also this paper。
回答您的问题:我看到您可以采取两种不同的途径:
1) 从普通 3.xx Linux 内核开始,探索各种 APIs 和实时技术(即实时优先级、内存固定等)这可以让你"close enough" 人们想要 "realtime" 的 99%。如果它对高频交易来说足够好,那么它可能对你来说已经足够了。
2) 如果你有一个严格的实时要求并且你担心 Linux 不会削减它,那么(正如 Nick 上面提到的),只需去购买一个处理器并编写你的实时代码而不需要OS。通过将 "realtime" 和 "non-realtime" 代码拆分到不同的 CPU 上,您将使整个系统更简单,更 更健壮。
从 "bare metal" 到基于 OS 的编程的转变是我逆向经历的事情。我从一个完整的软件专家开始,完全进入事物的 OS 方面,随着时间的推移,我转向了相反的方向(甚至在 VHDL 中设计电路!)。我的建议是从简单开始。 Linux 非常复杂,无论您在哪里看到,都有许多层协同工作以交付最终产品。如果您对实时 linux 延期死心塌地,我很乐意建议 https://xenomai.org/ 这是 linux.
的实时延期但是,要更具体地解决您关于在 Linux 中实施调度的问题,您可以,但这将是一项大量的工作,并且可能会非常复杂。 OS 使用完全公平的调度过程 (http://en.wikipedia.org/wiki/Completely_Fair_Scheduler),无论何时启动一个线程,它都会简单地添加到 运行 的列表中。如果您在内核 space 中将代码实现为驱动程序、依赖硬件中断等,这可能会略有不同,但一般来说,这就是 Linux 的工作方式。实时通常意味着它能够为线程分配几个不同的优先级之一,并在任何给定时间完全利用线程抢占,这些概念实际上并不是 vanilla Linux 的一部分。它有一些这方面的概念,但它有一些限制,当您从 Linux 寻找实时行为时可能会导致问题。
可能对你有帮助的是转发OS。如果您正在寻找完整的实时操作系统,请查看 FreeRTOS http://www.freertos.org/ . It has a large community and supports a lot of different devices out of the box with a large amount of example code. They even support your specific board with an example package, so you can give it a shot with nothing to lose! http://www.freertos.org/FreeRTOS-for-Cortex-M3-STM32-STM32F100-Discovery.html 。它使您可以访问许多 OS 类似的结构,如网络 API、内存管理和线程,而不会产生巨大的 OS 的开销和延迟。使用 RTOS,您可以创建任务并为它们分配优先级,这样您就可以成为调度程序,而不再受 OS 的摆布。你 运行 OS,而不是 OS 运行 你(如果这有意义的话)。此外,RTOS 中提供的结构感觉更像裸机代码,因此更容易遵循、理解和充分学习。学习完整 OS(例如 Linux 或 Windows 的基础构建块是一个更简单的世界。如果这个选项听起来不错,我建议您在 FreeRTOS 网站上查看支持的设备,然后选择您想要试用的设备,然后开始使用。我强烈推荐将此作为学习调度和 OS 总体结构的一种方式,因为它非常简单,而且是开源的。一旦掌握了 RTOS 的基础知识,购买一本关于 Linux 的书就不是一个坏主意。尽管网络上有许多与学习 Linux 有关的免费资源,但它们通常相互矛盾,并且可能会产生误导。大量学习 Linux 特定知识和 OS 一般知识,这会让人感到不知所措。从更简单的开始将有助于防止您精疲力竭,并最大程度地减少您感到迷茫的时间。 Linux 绝对是一个学习过程,但就像任何学习过程一样,从简单开始,牢记您的最终目标,制定计划,然后按照该计划采取小的、可管理的步骤,直到您抬头并找到自己的确切位置你想成为。那就去挑战下一座山吧!