介绍Clock的功能和使用方法。
模块介绍
Clock是时钟模块的控制器。
功能介绍
Linux为了做好时钟管理,提供了一个时钟管理框架Common Clock Framework(以下简称CCF),为设备驱动提供统一的操作接口,使设备驱动不必关心时钟硬件实现的具体细节。
其结构包括以下几个部分:
clock provider:对应上图的右侧部分,即clock controller,负责提供系统所需的各种时钟。
clock consumer:对应上图的左侧部分,即使用时钟的一些设备驱动。
clock framework:CCF的核心部分,向clock consumers提供操作clock的通用API;实现时钟管理的核心逻辑,将与硬件相关的clock控制逻辑封装成操作函数集,交由clock provider实现。
device tree:CCF允许在设备树中声明可用的时钟与设备的关联。
Clock系统相关的器件包括:
- 用于产生clock的Oscillator(有源振荡器,也称作谐振荡器)或者Crystal(无源振荡器,也称晶振)
- 用于倍频的PLL(锁相环,Phase Locked Loop)
- 用于分频的Divider
- 用于时钟源选择的Mux
- 用于时钟开关控制的Gate
系统中可能存在很多个这样的硬件模块,呈树形结构,linux将他们管理成一个时钟树(clock-tree),根节点一般是晶振,接着是pll,然后是mux或者div,最终叶子节点一般是gate。CCF实现了多种基础时钟类型,例如固定速率时钟fixed_rate clock、门控时钟gate clock、分频器时钟divider clock和复用器时钟mux clock等。一般为了方便使用,会根据时钟树设计,实现一些时钟类型。