linux-kernel – Linux时钟架构

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

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

什么是各种领域,它广泛用于拱/臂/板*** / …的时钟架构?

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

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

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

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

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

参考:Russell Kings message on ARM clkdev,原文并未暗示订购.

转载注明原文:linux-kernel – Linux时钟架构 - 代码日志