首页 理论教育clock管理框架详解

clock管理框架详解

【摘要】:1clock控制结构及相关接口Linux内核中时钟的管理也是经历了时间的演进。2clock查找和引用计数框架上面的接口在ARM体系结构中实现了通用的时钟查找和引用计数的框架。图4-46clk_lookup的组织框图从图4-46可见,clk_lookup组织成链表,相应的每个节点都会指向一个struct clk。common clock框架与TI芯片的时钟管理框架的实现整体上是一致的,所以这里不进行详细介绍,了解了TI芯片的时钟管理框架之后,再看common clock的框架就比较容易理解了。

1ᤫclock控制结构及相关接口

Linux内核中时钟的管理也是经历了时间的演进。早期的时钟管理,Linux内核只是提供了接口的声明,并没有进行接口的定义和实现,相应的声明是在linux/include/linux/clk.h中,这些声明需要体系结构代码进行具体实现,这些声明为框架和具体的实现指明了方向。先来看看这些声明及其具体的意义(保留英文注释,因为解释已经足够详细)。

978-7-111-49426-3-Chapter04-230.jpg

978-7-111-49426-3-Chapter04-231.jpg

978-7-111-49426-3-Chapter04-232.jpg

978-7-111-49426-3-Chapter04-233.jpg

Linux内核规定了这些接口的形式,特别是时钟的管理结构struct clk也只是进行了声明,它们都需要在体系结构进行具体的定义。从这些声明中可见,体系结构代码需要实现时钟的获得、频率设置、引用计数管理、管理层次的设置等功能。这些功能符合之前对需求的讨论。当然这些接口并不都需要实现。驱动设备的开发者只要调用上面的接口进行相关的操作即可,不必关心具体的实现。

Linux内核这样的设计给各个体系结构很大的自主设计自由,主要是因为包括Intel在内的很多处理器,其相应的时钟树并不复杂。这样只需要进行统一的声明并由体系结构自己实现。(www.chuimin.cn)

2ᤫclock查找和引用计数框架

上面的接口在ARM体系结构中实现了通用的时钟查找和引用计数的框架。具体的实现在arch/arm/common/clkdev.c中。针对时钟查找,ARM体系结构定义了struct clk_lookup来实现。clk_lookup,顾名思义是用来查找struct clk结构的。有了它,就可以通过设备名或时钟的名字来找到相应的struct clk结构。clk_lookup的组织框图如图4-46所示。

978-7-111-49426-3-Chapter04-234.jpg

图4-46 clk_lookup的组织框图

从图4-46可见,clk_lookup组织成链表,相应的每个节点都会指向一个struct clk。这样就可以通过比对clk_lookup中的dev_id和con_id来找到正确的struct clk了。ARM体系结构中通过clkdev_add将已经定义的clk_lookup加入链表进行管理,相应的需要芯片特定的代码对所有时钟对应的clk_lookup都进行定义。

Linux内核中其他的时钟管理接口是在芯片特殊代码中实现的。

随着SoC的发展以及电源管理的需要,时钟树变得越来越复杂,内核也越来越需要统一时钟管理框架。新的Linux内核选择了芯片厂商ST提供的时钟框架作为通用时钟管理框架(common clock),其中对于时钟查找沿用ARM体系结构的clk_lookup,并进行了些修改,structclk及其他接口都使用ST的实现。common clock框架与TI芯片的时钟管理框架的实现整体上是一致的,所以这里不进行详细介绍,了解了TI芯片的时钟管理框架之后,再看common clock的框架就比较容易理解了。