我想知道为什么当我们想要访问硬件设备时需要切换到内核空间。我理解有时,对于诸如内存分配之类的特定操作,我们需要进行系统调用才能从用户空间切换到内核空间,因为操作系统需要组织所有内容并在进程之间以及它们如何使用内存和其他方面进行分离. 但是为什么我们不能直接访问硬件设备呢?
问问题
363 次
2 回答
1
编写自己的驱动程序以从用户空间访问硬件没有问题,并且有大量文档可用。例如,xatlantis上的本教程似乎是最近的好资源。
之所以这样设计,主要是因为安全原因。我所知道的大多数系统都不允许用户程序进行 I/O 或访问内核空间内存。这样的事情会导致系统极度不安全,因为通过访问内核,用户程序可以更改权限并访问系统中任何位置的任何数据,并且可能会更改它。
于 2021-04-14T14:16:51.087 回答
0
设备驱动程序可以选择提供从用户进程到设备寄存器、设备内存或两者的访问。一种常见的方法是与 mmap() 请求连接的特定于设备的服务。考虑帧缓冲区的板载内存,以及用户进程能够直接读/写该空间的效率。对于一般设备,特别是存在安全考虑,提供直接访问的驱动程序通常会对具有足够凭据的进程设置限制。/dev 中的文件通常设置为具有类似限制的所有者/组访问权限。
于 2020-05-25T18:05:19.283 回答