【发布时间】:2018-04-26 23:04:56
【问题描述】:
我正在尝试为 Banana Pi M2 ultra 的 Linux 内核 4.13.x 编写以太网驱动程序。 前段时间所谓的“设备树”(DT)已被引入 Linux 内核基础架构。 我在编写设备驱动程序时没有太多使用 DT 的经验,因此 我有几个问题。
据我所知 - 在香蕉派系统的情况下 - 需要为给定的提供一些时钟源 外围设备。提供这样的时钟是香蕉派中 CCU 的功能。 CCU 是内存映射的 在 linux 内核中的某个地址可用的资源。我想为以太网编写驱动程序 需要来自 CCU 的一些时钟。
我知道 CCU 的物理地址必须通过 ioremap() 或类似函数映射到虚拟地址。
我的问题是如何在我的以太网驱动程序中获取 CCU 的虚拟地址?是否可以通过 设备树?如果是 - 怎么做?或者也许这个虚拟地址可以通过另一种方式获得?
我只是不确定它是通过 DT 完成(获取 virt 地址)还是仅通过某些过程或通过全局指针完成。
有什么想法或建议吗?
【问题讨论】:
-
您的驱动程序不应“获取 CCU 的虚拟地址”。内核使用面向对象的技术,例如数据封装,以便驱动程序不共享此类地址或数据。您的驱动程序应该可以调用一些函数来获取或启用必要的时钟。
标签: c linux linux-kernel linux-device-driver device-tree