2

我正在将 Linux 内核移植到不受支持的 ARM SoC 平台上。不幸的是,在这个 SoC 上,不同的外设有时会在同一内存区域内共享寄存器或混合寄存器。这让我对设备树规范感到悲痛,该规范似乎不支持不同设备共享同一组寄存器或混合在同一地址空间中的寄存器的概念。我在设备树上阅读的各种文档都没有建议处理这个问题的正确方法。

我在多个驱动程序中指定相同寄存器区域的简单方法会为尝试将相同寄存器区域映射为另一个驱动程序的第二个设备抛出“无法请求资源区域”。据我了解,这是内核强制执行有关寄存器区域的设备树规则的结果。

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

4

1 回答 1

0

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

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

于 2015-03-28T21:59:41.773 回答