其实,既然说到时钟管理这块儿了,必然必然是跟设备相关的, 既然如此,正好甘巴拉查的说也没什么意思,干脆就拿三星的时钟做例子分析,正所谓一通百通。/arch/arm/plat-samsung/clock.h。
上图前所点儿题外话吧,话说上周末去国际关系学院打了打乒乓球还是非常爽的,好久不运动的屌丝躯壳确实需要见见阳光,昨天的雨确实下的比较爽,哎,深秋来了,时间真的非常快,不知不觉已经深秋了快,好像自己一点儿时间管理的观念都太差,不像内核中,好多优秀的程序员的时间管理观念还是非常强大的,所以学习了。上代码:
43行,链表节点,到了这了,也不防告诉你,所有的时钟都是连接到一个全局的时钟链表上的,你只要是一注册,都会连接到上面,这样查询的时候好找,也便于管理。
44 模块的拥有者
45 父时钟,什么是父时钟 ,话说人是人他妈生的,妖是妖他妈生的,时钟也是时钟他妈生的,无论哪个时钟你总得有个来源吧?
46 时钟的名字
47 所属设备的名字
48 id
49 引用计数
50 速率
51 控制位,是用来说明控制什么类型的时钟的,比如i2c的时钟,比如nand的时钟
53 时钟的操作函数,单有一个结构体struct clk_ops*ops;稍后再将
54 话说这个操作函数比较独特啊,它就是不跟struct clk_ops*ops入群,人总有特殊的,不是吗?
55 struct clk_lookuplookup;时钟的查找表,话说查找时钟时就是根据这个结构体里的信息查的,也是稍后说
56 如果定义了那两个宏,就有这个成员函数,文件系统相关的,暂时忽略掉,我们要集中力量,各个突破
好了,这个结构体被剖析的体无完肤 ,呵呵。。也算满全了咱们的刨根问底的精神。
刚才忽略的两个结构体,现在是时候看了,一个是struct clk_ops ,上代码:
哎,公司有走一个,还是个beautiful girl,这让我情何以堪啊,本来还可以有点儿精神支柱,这下。。哎,坑爹啊。。
36行就是设置时钟频率,速度的函数
37 是获取,都很简单
38 不精确的设置时钟频率
39 设置它的父时钟
哎,人还是简单点儿好,太复杂了有时候不招人喜欢
21行,链表结点
22行 所属设备id
23 行 匹配条件id,这在查找相应的时钟时会用到
24行 查找表包含的时钟
哎,是不是年纪大了,这点儿简单的东西讲了一泡,还觉得有点儿累呢,昨晚没睡好,还是因为那个妹子要走,没了精神支柱?