是否可以从现代RTOS中的用户空间访问I / O?

时间:2016-01-26 00:18:53

标签: kernel gpio rtos sysfs

我想知道在现代RTOS(使用MMU)(例如QNX,Lynx,VxWorks等)中是否存在从用户空间(而不是内核空间)访问I / O(特别是GPIO)的任何现有功能? / p>

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

1 个答案:

答案 0 :(得分:2)

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

然而,一般情况下,RTOS的性质是不允许在用户线程或进程上下文中禁止I / O访问 - 如果I / O被限制在某些内核特权上下文中,则基本上无法控制实时性能优先级和内核无法知道您的应用程序优先级和实时约束是什么 - 这就是实时调度程序的用途;允许你确定。

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

某些RTOS可能会使用 opt-in 方法所有 I / O和未专门映射到特定任务的内存超出范围,而其他可能是选择退出,其中任务可以访问未特别保护以供特定任务访问的任何内存。我记得VxWorks很可能是选择性的,因为MMU保护是一种选择,并且选择加入会降低具有和不支持MMU的系统之间的代码可移植性,而另一方面QNX只能在MMU硬件上运行,因此选择加入。