5

在 Linux 中,时钟架构是如何实现的。有一个文件include/linux/clkdev.h

struct clk_lookup {
    struct list_head    node;
    const char      *dev_id;
    const char      *con_id;
    struct clk      *clk;
};

有哪些不同的领域,它在时钟架构中被广泛使用arch/arm/Board***/...

4

1 回答 1

6

通用 Linux 时钟基础结构记录在clk.rst中。对于 ARM,Sasha Hauer最近(过去两年)创建了通用时钟框架。时钟以父/子关系构造。典型的 SOC(片上系统)具有由晶体创建的主时钟,这些时钟要么按比例缩小(使用计数器),要么使用 PLL 放大,可能两者兼而有之。它们的层次结构对于节能很重要。通常设备只使用树中最低/最年轻的时钟之一。当设备请求时钟时,基础结构确保所有父母都启动。

以前(旧版),时​​钟通过平台数据从机器文件(参考arch/arm/Board***/)传递到驱动程序/设备;最终通过platform_device_register()。有时,时钟是/源自设备名称。例如,fec驱动程序可能使用fec-clk这对于多机配置效果不佳,因此引入了平台数据机制。甚至较新的机器也使用dt(或设备表)。这里没有机器文件,只有一个从引导加载程序传递到内核的设备表。在这种情况下,dt告诉驱动程序使用哪个时钟。

最初,dev_idandcon_id是关联设备的时钟和连接的时钟(父/子)。通常要么 要么dev_idcon_idNULL,因为只需要一个方面。我认为这种观点是有欠缺的;特别是对于启动整个时钟链。因此,根据 Linux 版本,答案会有所不同。即使在当前源代码中,某些平台(如orion)仍然使用较旧的机制。我认为不orion支持设备树

具体答案取决于您的 Linux 版本和使用的机器(可能还有平台)。
参见:clkdev.cclk.c

开源 - 有许多突变。他们都有不同的计划。BSG 重新成像

参考:Russell Kings 关于 ARM clkdev 的消息,原文并不暗示订购。

于 2013-03-06T14:59:04.970 回答