Linux Iomem保护

时间:2014-03-14 08:41:45

标签: memory-management linux-kernel linux-device-driver

我想保护对外设寄存器空间的访问。

所以我想映射外围存储器并在其上创建写保护。

所以任何想要访问的人都必须调用一个公共函数,它将提供写入该内存的访问权。

如何在linux内核中完成?

没有人会从用户空间访问该内存,只有不同的驱动程序才能访问该寄存器空间。因此所有驱动程序都应该调用该常用函数。如果他们试图直接访问内存它应该陷阱吗?

此致 Kalpesh Bafna

1 个答案:

答案 0 :(得分:0)

如果您的意思是要阻止所有内核代码写入特定的硬件寄存器:我​​认为不能这样做。内核空间代码可以完全访问所有硬件。即使一个字节的内存未映射,几乎所有内核代码都可以简单地映射它然后访问它。

这通常不会导致问题,因为每个内核代码只涉及自己的问题;它不必寻找其他问题。

您可能希望使用标准Linux驱动程序模型实现驱动程序,其中控制外围硬件的代码就像总线驱动程序一样编写,并且所有客户端都使用总线驱动程序注册。

这不会阻止直接访问,但是如果您更容易编写客户端驱动程序来使用您的服务 - 特别是如果它可以防止错误和崩溃 - 这应该是人为因素保持硬件安全的动力。