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

2024-05-12

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

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

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

提前致谢。


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

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

RTOS 可能对您有帮助。如果您正在寻找完整的实时操作系统,请查看 FreeRTOShttp://www.freertos.org/ http://www.freertos.org/。它拥有庞大的社区,并支持许多不同的设备,并提供大量示例代码。他们甚至通过示例包支持您的特定板,因此您可以尝试一下,不会有任何损失!http://www.freertos.org/FreeRTOS-for-Cortex-M3-STM32-STM32F100-Discovery.html http://www.freertos.org/FreeRTOS-for-Cortex-M3-STM32-STM32F100-Discovery.html。它使您可以访问许多类似操作系统的结构,例如网络 API、内存管理和线程,而不会产生大型操作系统的开销和延迟。使用 RTOS,您可以创建任务并为其分配优先级,这样您就可以成为调度程序,而不再受操作系统的支配。你运行操作系统,而不是操作系统运行你(如果这有意义的话)。另外,RTOS 中提供的构造感觉很像裸机代码,因此更容易遵循、理解和充分学习。学习 Linux 或 Windows 等成熟操作系统的基本构建块是一个更简单的世界。如果这个选项听起来不错,我建议您在 FreeRTOS 网站上查看支持的设备,然后选择您想要尝试的设备,然后继续使用。我强烈推荐将此作为了解一般调度和操作系统构造的方法,因为它非常简单并且开源。一旦掌握了 RTOS 的基础知识,购买一本专门关于 Linux 的书也不失为一个好主意。尽管网络上有许多与学习 Linux 相关的免费资源,但它们通常是相互矛盾的,并且可能会产生误导。大量学习 Linux 特定知识以及一般操作系统知识,可能会让人感到不知所措。从更简单的开始将有助于防止你精疲力竭,并最大限度地减少你感到失落的时间。 Linux 绝对是一个学习过程,但与任何学习过程一样,从简单开始,牢记您的最终目标,制定计划,并沿着该计划采取小的、可管理的步骤,直到您查找并发现自己完全处于您想要的位置。然后去攻克下一座山!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

开始使用 Real Time Linux 编程的最佳方式是什么? 的相关文章

  • RSS 和 ATOM 如何通知客户端有关更新的信息?长轮询还是轮询还是其他什么?

    我读到 RSS 和 ATOM 是基于 HTTP 的 使用 XML 格式 那么 如果 HTTP 不支持连接 RSS 或 Atom 阅读器如何获知内容更新呢 他们需要定期轮询服务器吗 我有兴趣在实时网络应用程序中使用它 但我听说 轮询无法扩展
  • Linux 中断与轮询

    我正在开发一个带有 DSP 和 ARM 的系统 ARM上有一个linux操作系统 我有一个 DSP 向 ARM Linux 发送数据 在 Linux 中 有一个内核模块读取从 DSP 接收到的数据 内核模块被唤醒以读取数据 使用 DSP 和
  • Facebook:图形 API 回调 / 实时 API / 公共 Feed API

    我正在开发一个社交媒体项目 我需要关注一些粉丝专页并收听该特定页面上发生的所有事情 我确实知道有一些数据经销商 例如GNIP http gnip com Datasift http datasift com 谁能给我提供这样的数据 我已经尝
  • 如何向特定用户发送消息 Ratchet PHP Websocket

    我正在尝试构建一个系统 用户可以在建立与 websocket 服务器的连接时订阅某个类别 然后他将开始接收该类别的更新 到目前为止 我已经与 Ratchet 合作 我能够向所有连接的客户端发送消息 但问题是我不想向所有客户端发送消息 我只想
  • WOWZA + RTMP 在多个设备上播放?

    我仍然是 Wowza Streaming 的新手 但是当我设置所有内容 RHEL Wirecast 时 我可以以某种方式从我的家用电脑流式输出 广播到 EC2 服务器 正如我按照 Wowza Live Streaming 教程 我使用RTM
  • 内核模块和SCHED_RR线程的优先级

    我有一个嵌入式 Linux 平台 Beagleboard 运行 Angstrom Linux 连接了两个设备 通过 USB 连接的激光测距仪 Hokuyo UTM 30 通过 SPI 连接的定制外部板 我们编写了一个Linux内核模块 负责
  • Faye 在 jruby 的铁轨上

    我搜索了很多 但找不到任何资源表明我可以将 Faye 与 jruby 一起使用 我已经发现this one https groups google com forum fromgroups topic faye users wvp K38v
  • 如何在Linux中使用C或shell检查密码?

    我有一个用 C 编写的程序 运行在嵌入式 Linux 上 有时它想检查系统用户的密码 如果我能得到地穴盐 etc 密码 我可以使用 crypt 检查用户密码的正确性 有没有shell脚本可以帮助我检查密码 比如check passwd用户名
  • USB 端口速度 Linux [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何以编程方式确定运行 Linux 内核的嵌入式设备中的 USB 端口速度 你可以阅读 sys bus usb devices usb s
  • 仅使用视频标签实时流式传输到 HTML5(不带 webrtc)

    我想将实时编码数据包装到 webm 或 ogv 并将其发送到 html5 浏览器 webm 或 ogv 可以做到这一点吗 Mp4 由于其 MDAT 原子而无法做到这一点 无法实时将h264和mp3打包并发送给客户端 假设我正在从网络摄像头输
  • Android:实时图像处理

    我有一个应用程序 它进行相机预览 对每一帧执行一些基本的图像处理功能 例如边缘检测 颜色变化 图像扭曲等 并 实时 将修改后的帧显示到屏幕上 类似于Android Market中的 Paper Camera 应用程序 我的方法总结 我也做过
  • 为什么 i2c_smbus 函数不可用? (I2C——嵌入式Linux)

    有很多参考使用i2c smbus 开发嵌入式 Linux 软件时在 I2C 总线上进行通信的函数 什么时候i2c smbus函数如i2c smbus read word data在软件项目中引用了 ARM8 处理器错误 例如 i2c smb
  • 通过元层覆盖 Yocto 类

    感谢您的时间和支持 我计划使用 swupdate 进行更新 因此 我需要创建一个额外的分区来存储恢复分区 poky meta classes image live bbclass 是创建分区并刷新根文件系统的类 我已更新上述文件以再创建一个
  • 当对象一个在另一个之上时,从单个 2D 图像或来自 RGBD 相机的点云对已知 3D CAD 对象进行实时 6D 姿态估计?

    我正在开展一个研究项目 需要在拾取和放置任务中实时估计物体的 6DOF 姿态 姿态必须是实时估计的 并且物体可以是一个在另一个之上并且是相同的 所以我必须获得顶部物体的位置和方向 问题是物体是相同的 PPVC 块 在建筑领域 但好处是它们的
  • 使用服务器发送事件进行双向客户端-服务器通信(而不是 WebSocket)的缺点

    最近 我发现服务器发送事件是 WebSocket 的一种更简单的替代方案 用于从服务器进行推送 大多数比较它们的地方 例如here https stackoverflow com questions 5195452 websockets v
  • Linux、ARM:为什么仅当启动时存在 I2C GPIO 扩展器时才创建 gpiochip

    在 imx6sx 硬件平台 NXP 嵌入式 ARM 上使用 Linux 3 14 52 问题是设备树中指定的 PCF8575 I2C GPIO 扩展器不会实例化为 sys class gpio 结构中的设备 除非它们在内核启动期间存在 这些
  • QtWebEngine Quicknano 在嵌入式 Linux 中没有声音

    我已将 QtWebEngine 编译到我的 i MX6 嵌入式设备中 当我尝试使用 Quicknanobrowser 播放 YouTube 视频时 视频会播放 但没有声音 事实上 当我尝试播放音频文件时没有声音hpr dogphilosop
  • 快速将文本附加到文本框

    我有一个BackgroundWorker正在发布消息的线程 使用BeginInvoke在 GUI 中的文本框中 方法 write debug text 在文本框中显示文本使用AppendText并将文本写入Console 外观上是这样的Ba
  • 如何在 arago 项目构建中编写自己的食谱包

    我如何在 arago 项目构建中编写自己的食谱包 我知道它可以是 bitbake 文件 但我怎么写 不知道 我在互联网上搜索 但未能找到任何好的来源 有人可以给我提供链接或示例来开始吗 RegardsLinux 学习者 使用 Bitbake
  • 对于所有 JVM GC 实现来说,压缩真的是不可避免的吗?

    On this link http www azulsystems com technology c4 garbage collector据说 这些暂停是不可避免的压缩要求的结果 堆以释放空间 收藏家使用不同的策略 推迟这些事件 但是压缩是

随机推荐

  • 什么是“矢量化”?

    现在好几次了 我在 matlab fortran 其他一些 中遇到这个术语 但我从来没有找到解释它是什么意思 它有什么作用 所以我在这里问 什么是矢量化 例如 循环矢量化 是什么意思 许多CPU具有 向量 或 SIMD 指令集 它们同时对两
  • 如何使用多阶段构建减小 python (docker) 图像大小?

    我正在寻找一种使用 python 和 Dockerfile 创建多阶段构建的方法 例如 使用以下图像 第一张图片 安装所有编译时要求 并安装所有需要的 python 模块 第二张图片 将所有已编译 构建的包从第一个映像复制到第二个映像 而不
  • 致命错误 C1001:编译器中发生内部错误(编译器文件“msc1.cpp”,第 1325 行)

    当我编译代码时 错误指向以下类 该错误在两行上突出显示 如下所示 tm validFrom tm validUntil struct t SslCertData final struct t Contact TCHAR Organizati
  • 具有多种类型的 C# 泛型类型推断

    我有以下通用方法 用于将一种类型的输入对象序列化为超类型 如下所示 public string SerialiseAs
  • chrome css 动画上的抖动

    尝试使用两个具有相同背景图像 svg 的居中 div 制作一个从中心淡入图像的 css 动画 并为其宽度和背景位置设置动画 问题是 在 chrome 上 存在严重的抖动问题 也许是 chrome 循环执行动画步骤 而不是同时执行它们 这是j
  • 如何向 ItemsControl 中的 WPF 按钮添加相同的命令

    如何将命令添加到 wpf 按钮 该按钮是ItemsControl并正在修改ItemsSource itself 这是我的 XAML
  • 将数组传递给函数名称冲突

    Specs GNU bash 版本 3 1 17 无法升级 Premise 我一直在摆弄数组 我想知道是否有任何方法可以让函数的本地变量与所述函数外部的数组同名 Example 在下面的示例中 我将尝试显示该问题 Working bin b
  • Angular 2 - 加载时共享服务

    我正在尝试将服务共享给组件 为此 我创建了 service ts 其中代码如下 import Subject from rxjs Subject export class CommonService CommonList new Subje
  • 如何使用 React 制作垂直选项卡

    有人可以为我提供一种使用 React 创建垂直选项卡的方法吗 我尝试了各种npm包 如react web tabs reactstrap和react bootstrap 最后两个只有水平选项卡的示例 React web tabs在其文档中有
  • 更改 jQuery UI 选项卡的选定选项卡

    这个问题之前已经被问过几次了 但没有一个与我的情况相似 我有 jQuery Tabs 控件 可以通过 ajax 加载我的选项卡 div ul li a href gt Information a li ul div
  • FakeItEasy 代理方法调用实际实现

    我正在尝试将对假对象的调用代理到实际的实现 这样做的原因是我希望能够使用 Machine Specifications 的 WasToldTo 和 WhenToldTo 它们仅适用于接口类型的伪造 因此 我正在执行以下操作来代理对我的真实对
  • 多个数据库连接

    我有三张桌子 categories content info and content The categories表包含类别的id及其 IDparent类别 The content info包含两列 entry id帖子的 ID 和cat
  • 从 git 中删除历史记录 - git 命令失败

    我正在尝试从 Git 历史记录中清除项目 bin 目录 我已经将 bin 添加到 gitignore 并运行 git rm cached r bin成功地 现在我尝试使用 GitHub 帮助页面中推荐的命令来清除历史记录 git filte
  • 如何在 JavaScript 中将日期时间微格式转换为本地时间?

    我有一个页面当前正在使用日期时间微格式 http microformats org wiki datetime design pattern显示时间戳 但我只显示我自己的时区的人类可读时间
  • 编译时在代码中替换Java静态最终值?

    在java中 假设我有以下内容 fileA java class A public static final int SIZE 100 然后在另一个文件中我使用这个值 fileB java import A class b Object t
  • 未找到教义列:1054“字段列表”中未知列“s.features”

    我在站点表中添加了一个新列 features 并使用 Doctrine 重新生成了模型 此代码导致错误 siteTable Doctrine Core getTable Site site siteTable gt findOneByNam
  • iOS Swift 中断键盘事件

    我在拦截键盘事件时遇到问题 我已将我的 iOS 与 SteelSeries Free 游戏手柄控制器 连接 当连接到 iOS 时 它将被检测为蓝牙键盘 这是在我打开Notes时测试的 按下游戏手柄上的任何按钮都会写一个字母 我需要拦截此按钮
  • 如何为 Android Q 打开具有特定专辑或文件夹的默认图库应用程序?

    我尝试打开图库中的特定文件夹 如下代码所示 但它对我不起作用 并且出现错误无法找到物品 fun openDirectoryInGallery context Context directory String val intent Inten
  • 运行 pm2 记录错误 SyntaxError: Unexpected token

    我想查看我的项目的日志 Steps 我克隆了一个套接字应用程序 然后我跑npm install pm2 g安装pm2 I run pm2 start 有用 它显示我的套接字应用程序的表格 但如果我跑pm2 logs查看日志 存在这样的错误
  • 开始使用 Real Time Linux 编程的最佳方式是什么?

    虽然我用C实现了很多项目 但我对操作系统完全陌生 我在 Discovery board STM32 上尝试了实时 Linux 并得到了闪烁 LED 的正确结果 但我并没有真正理解整个过程 因为我只是按照步骤操作 并且无法在互联网上找到每个步