在现代 RTOS 中是否可以从用户 space 访问 I/O?

Is it possible to access the I/O from user space in modern RTOS?

我想知道在现代 RTOS(使用 MMU)中是否有任何现有功能可以从用户 space(而不是内核 space)访问 I/O(特别是 GPIO) ) 例如 QNX、Lynx、VxWorks 等?

在 Linux(例如 Raspbian)中,您可以通过 sysfs 完成。 RTOS 中是否存在任何类似的功能? (它不应该与用于导出内核对象的文件系统完全相同,而是让用户控制 GPIO 的任何东西。 如果有,是否默认启用? 如果为其他类型的 I/Os 而不是 GPIO 启用它也可以。

您确实需要查阅您打算使用的特定 RTOS 的文档,因为它们使用不同的方法。

然而,通常 RTOS 的性质是这样的,它不应禁止在用户线程或进程上下文中进行 I/O 访问 - 如果 I/O 仅限于某些内核特权context 你基本上失去了对 real-time 性能和优先级的控制,内核无法知道你的应用程序优先级和 real-time 约束是什么——这就是 real-time 调度程序的目的;让你确定。

而 general-purpose OS (GPOS) 旨在保护 I/O space 免受错误用户进程的影响并控制对这些资源的访问,在通常运行单个固定应用程序的 RTOS 中,通常是应用程序开发人员控制对资源的访问(例如通过互斥锁或服务器任务),并且在可用的情况下,MMU 访问控制通过在每个线程或进程的基础上分配访问权限。因此,例如,通信服务线程可以控制 UART 的寄存器 space。

一些 RTOS 可能使用 opt-in 方法,其中 all I/O 和内存未专门映射到特定任务的是 out-of 边界,而其他边界可能是 opt-out,其中任务可以访问未特别保护以供特定任务访问的任何内存.我记得 VxWorks 属于 opt-out 品种,很大程度上可能是因为 MMU 保护是一个选项,opt-in 会降低支持和不支持 MMU 的系统之间的代码可移植性,而另一方面 QNX 仅在 MMU 硬件上运行, opt-in 种类也是如此。