可以直接从用户空间访问硬件吗?

可以直接从用户空间访问硬件吗?

在工作中我们有一些由DOS软件控制的嵌入式设备。我的任务是评估 Linux 在下一代硬件上作为 DOS 替代操作系统的使用情况。我的研究使我得出这样的结论:DOS 只是一种完全不同类型的操作系统,如果您愿意,它可以让您做有潜在危险的事情。据我了解,如果您希望直接访问硬件,则必须编写自定义驱动程序。为了满足老板的好奇心,我需要知道以下内容:是否可以直接从用户空间访问硬件??

我的猜测是否定的,但我想征求那些比我知识渊博的人的意见。

答案1

是的,但很少有用。在 32 位 x86 系统上,您可以使用ioperm(2)系统调用来设置当前进程,以允许其直接执行端口 I/O。我相信这在 64 位系统上不起作用。你也可以进行lseek/read/write组合/dev/port,我认为这同样不太便携。看http://tldp.org/HOWTO/IO-Port-Programming-2.html了解更多详细信息。当然,这两种方法都比编写设备驱动程序慢得多且灵活性差(/dev/port最慢)。当然,这些用户空间机制都不允许您处理中断或类似的事情。如果性能是一个问题,您最终将编写设备驱动程序。

答案2

你的猜测是正确的。内核是唯一可以发送硬件请求的软件。这不仅适用于 Linux。事实上,没有比 DOS 更新的操作系统可以让您直接访问硬件,因为正如您所怀疑的那样,这非常危险。

不过,编写自己的驱动程序没有问题,并且有大量文档可用。例如,本教程位于 xatlantis似乎是最近的(这很重要!)并且是很好的来源。

答案3

从用户空间访问硬件绝对是可能的。特别是如果硬件寄存器是内存映射的。例如,乌伊奥

相关内容