Linux时钟架构

shi*_*esh 5 arm clock linux-kernel

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

struct clk_lookup {
    struct list_head    node;
    const char      *dev_id;
    const char      *con_id;
    struct clk      *clk;
};
Run Code Online (Sandbox Code Playgroud)

各种领域有哪些,它广泛用于时钟架构中arch/arm/Board***/...

art*_*ise 6

clk.txt中记录了通用Linux时钟基础结构.对于ARM,Sasha Hauer 最近创建了公共时钟框架(最近两年).时钟以父/子关系构成.典型的SOC(片上系统)具有由晶体产生的主时钟,这些时钟可以按比例缩小(使用计数器),也可以使用PLL进行缩放,也可以同时使用两者.它们的层次结构对节省电力很重要.通常,设备仅使用树中最低/最小的时钟之一.当设备请求时钟时,基础结构可确保启动所有父项.

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

最初,dev_idcon_id分别为涉及用于钟表装置及钟表被连接(父/子).通常为dev_id或者con_id为NULL,因为只需要一个方面.我认为这种观点被认为是缺乏的; 特别是对于启动整个时钟链.因此,根据Linux版本,答案会有所不同.即使在当前的源代码中,某些平台(如orion)仍然使用较旧的机制.我不认为orion支持设备树.

具体答案取决于您的Linux版本和正在使用的机器(可能还有平台).
另见:clkdev.c,clk.c

开源 - 有很多突变.他们都有不同的计划.

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