linux时钟子系统-clk_register

前言

分析下 clk_register 的流程。

重要的结构体

分析一个函数的流程之前,必须要搞清楚结构体的定义,才能知道其背后的用途。

clk_hw

struct clk_hw {
	struct clk *clk;
	const struct clk_init_data *init;
};

其中的 clk结构体,用来表示 clk之前的关系(parent,children),以及当前的频率(clk rate)用,
clk_init_data 结构体,提供了体层的操作函数 fops。

函数分析

struct clk *clk_register(struct device *dev, struct clk_hw *hw)
{	
	//传入dev的参数可以为NULL
	int ret;
	struct clk *clk;
	//创建一个 clk结构体
	clk = kzalloc(sizeof(*clk), GFP_KERNEL);
	if (!clk) {
		pr_err("%s: could not allocate clk\n", __func__);
		ret = -ENOMEM;
		goto fail_out;
	}

	ret = _clk_register(dev, hw, clk);
	if (!ret)
		return clk;

	kfree(clk);
fail_out:
	return ERR_PTR(ret);
}

接下来 是 _clk_register 函数

上一篇:yaml--静态pod--pod生命周期--pod监控检查


下一篇:正则表达式exec()函数不能踩的坑