不同的Linux设备树驱动程序应如何共享公共寄存器?

时间:2014-11-02 04:40:42

标签: linux-kernel linux-device-driver device-tree

我正在将Linux内核的一个端口用于不受支持的ARM SoC平台。不幸的是,在这个SoC上,不同的外设有时会在同一个存储区域内共享寄存器或混合寄存器。这让我对设备树规范感到悲痛,它似乎不支持在同一地址空间中共享同一组寄存器或寄存器的不同设备的概念。我在设备树上阅读的各种文档并未提出正确的处理方法。

我在多个驱动程序中指定相同寄存器区域的简单方法会引发“无法为资源请求区域”,因为第二个设备尝试将同一寄存器区域映射为另一个驱动程序。根据我的理解,这是由内核实施有关寄存器区域的设备树规则产生的。

解决这一难题的首选通用解决方案是什么?是否应该有一个更高级别的驱动程序,它可以访问共享寄存器区域?现有Linux内核中是否存在解决此特定问题的示例(我找不到,但我可能不确定要查找什么)?

1 个答案:

答案 0 :(得分:0)

我面临着完全相同的问题。我的解决方案是创建一个单独的模块来保护公共资源,然后编写使用从公共模块导出的符号的“客户端模块”。

请注意,从安全角度来看,这也是有意义的。您如何实现正确的内存锁定并确保跨多个独立模块的操作一致性?