当前位置: 首页 > news >正文

大良网站建设长沙网站优化效果

大良网站建设,长沙网站优化效果,网络运维工程师面试题,网站搭建响应式目录 前言CCF 介绍提供者和消费者的概念CCF 框架组成关系CCF 程序关键结构体 CCF 重要组成注册时钟未使用设备树的时钟注册操作使用设备树的时钟注册操作 从使用的角度看CCF 前言 linux 内核版本 v4.19 嵌入式平台rv1109 , 文中代码出处。 CCF 介绍 提供者和消费者的概念 C…

目录

    • 前言
    • CCF 介绍
      • 提供者和消费者的概念
      • CCF 框架组成关系
      • CCF 程序关键结构体
    • CCF 重要组成
      • 注册时钟
      • 未使用设备树的时钟注册操作
      • 使用设备树的时钟注册操作
    • 从使用的角度看CCF

前言

linux 内核版本 v4.19
嵌入式平台rv1109 , 文中代码出处。

CCF 介绍

提供者和消费者的概念

CCF背后的主要思想是统一和抽象分布在不同SoC时钟驱动程序中的类似代码。这种标准化的方法引入了时钟提供者时钟消费者的概念:

  • 提供者是Linux内核驱动程序,它连接到框架并提供对硬件的访问,从而根据SoC数据表提供(使这些对消费者可用)时钟树(由于可以转储整个时钟树);

  • 消费者是通过公共API访问框架的Linux内核驱动程序或子系统;

也就是说,驱动程序既可以是提供者,也可以是消费者(然后它可以使用它提供的一个或多个时钟,也可以使用其他人提供的一个或多个时钟)。

CCF 框架组成关系

在使用CCF之前,需要通过CONFIG_COMMON_CLK选项将其支持加入内核,CCF 本身分为两部分:

  • 公共时钟框架核心:这是框架的核心,当您添加新的驱动程序并提供struct clk的公共定义时,不应该修改它,它统一了框架级代码和传统的依赖于平台的实现,这些实现过去常常在各种平台上复制。这一半还允许我们将消费者接口(也称为clk实现)包装在结构体clk_ops之上,该结构体必须由每个时钟提供程序提供。

  • 特定于硬件的那一半:它的目标是必须为每个新的硬件时钟写入的时钟设备。这需要驱动程序提供clk_ops结构体,该结构体对应于用于对底层硬件进行操作的回调函数(这些回调函数由时钟的核心实现调用),以及包装和抽象时钟硬件的相应硬件特定结构。

这两部分通过struct clk_hw连接在一起。

CCF 程序关键结构体

struct clk_hw是CCF中每种时钟类型的基本结构。它可以看作是一个句柄,用于从struct clk遍历到相应的特定于硬件的结构。

include/linux/clk-provider.h
struct clk_hw {struct clk_core *core;struct clk *clk; //时钟的消费者表示,每个消费者API都依赖于这个结构体。const struct clk_init_data *init;
};
  • clk 它由时钟框架分配和维护,并在需要时提供给时钟使用者。每当消费者通过clk_get启动对CCF中的时钟设备(即clk_core)的访问时,它都需要获得一个句柄,即clk.

  • init 在初始化底层时钟提供程序驱动程序的过程中,调用clk_register()接口来注册时钟硬件。在此之前,需要设置一些初始数据,这些初始数据被抽象为struct clk_init_data数据结构。在初始化过程中,clk_init_data中的数据用于初始化clk_core数据结构,该数据结构对应于clk_hw。初始化完成后,clk_init_data没有任何意义。

CCF 重要组成

注册时钟

struct clk *clk_register(struct device *dev, struct clk_hw *hw)
int clk_hw_register(struct device *dev, struct clk_hw *hw)
  • 调用clk_hw_register()(它在内部调用__clk_core_init()来初始化时钟)时,如果这个时钟有一个有效的父时钟,它将在父时钟的子列表中结束。另一方面,如果num_parent为0,则将其放在clk_root_list中。否则,它将挂起在clk_orphan_list中,这意味着它没有有效的父节点。
  • 此外,每当一个新的时钟被clk_init时,CCF将遍历clk_orphan_list(孤儿时钟列表),并重新父化当前正在初始化的时钟的子时钟。这就是CCF保持时钟树与硬件拓扑一致的方式。
  • 另一方面,struct clk是时钟设备的消费者端实例。
    基本上,所有用户对时钟设备的访问都会创建一个结构clk类型的访问句柄。当不同的用户访问相同的时钟设备时,尽管在底层使用相同的struct clk_core实例,但他们访问的句柄(struct clk)是不同的。

clk_hw_register 封装了clk_register,只是为了兼容,推荐使用clk_hw_register, (不应该直接使用clk_reregister(),因为clk_reregister返回结构clk。这可能会导致混乱,并打破提供者和使用者接口之间的严格分离)。

clk_hw_register / clk_register 的实现逻辑如下(clk/clk.c 代码略):

  • 分配struct clk_core空间(clk_hw->core):
  1. 根据struct clk_hw指针提供的信息初始化clk的字段名称、ops、hw、flags、num_parents和parents_name。
  2. 调用内核接口__clk_core_init()来执行后续初始化操作,包括构建时钟树层次结构。
  • 通过内部内核接口clk_create_clk()分配struct clk空间(clk_hw->clk),并返回此结构clk变量。

CCF框架负责建立整个抽象时钟树的树结构并维护其数据,因此它通过drivers/clk/clk.c中定义的两个静态链表来实现这一点,如下所示:

static HLIST_HEAD(clk_root_list);
static HLIST_HEAD(clk_orphan_list);

每当您在时钟hw上调用clk_hw_register()(它在内部调用__clk_core_int()来初始化时钟)时,如果该时钟有一个有效的父级,它将最终出现在父级的子级列表中。另一方面,若num_parent为0,则将其放置在clk_root_list中。否则,它将挂在clk_orpan_list中,这意味着它没有有效的父级。此外,每次新的clk为clk_init时,CCF都会遍历clk_orpan_list(孤立时钟的列表),并为当前正在初始化的时钟的子级重新设置父级。这就是CCF保持时钟树与硬件拓扑一致的方式。

未使用设备树的时钟注册操作

  1. 由于知道clk_register()的目的只是注册到公共时钟框架,因此消费者无法知道如何定位clk。因此,对于底层时钟提供程序驱动程序,除了调用clk_register()函数以注册到公共时钟框架之外,还必须在clk_register()之后立即调用clk_register_clkdev(),以便用名称绑定时钟(否则,时钟使用者将不知道如何定位时钟)。因此,内核使用struct clk_lookup(顾名思义)来查找可用的时钟。
  2. 为了使用基于hw的API强制实现提供者和使用者代码之间的分离,代码中的clk_hw_register_clkdev()和clk_register_clkdev。

clk_lookup 结构

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

dev_id和con_id用于识别/查找适当的clk。这个clk是相应的底层时钟。node是挂在全局时钟列表中

clk_hw_register_clkdev --> _clkdev_add

static void __clkdev_add(struct clk_lookup *cl)
{mutex_lock(&clocks_mutex);list_add_tail(&cl->node, &clocks);mutex_unlock(&clocks_mutex);
}void clkdev_add(struct clk_lookup *cl)
{if (!cl->clk_hw)cl->clk_hw = __clk_get_hw(cl->clk);__clkdev_add(cl);
}
EXPORT_SYMBOL(clkdev_add);

使用设备树的时钟注册操作

… 未完

从使用的角度看CCF


文章转载自:
http://wanjiafootlocker.rbzd.cn
http://wanjiaensanguined.rbzd.cn
http://wanjiaproviding.rbzd.cn
http://wanjiasupremacist.rbzd.cn
http://wanjiacrabeater.rbzd.cn
http://wanjiaunabsorbed.rbzd.cn
http://wanjiapachytene.rbzd.cn
http://wanjiaforetopgallant.rbzd.cn
http://wanjiagyration.rbzd.cn
http://wanjiacellar.rbzd.cn
http://wanjiadeliria.rbzd.cn
http://wanjiasigri.rbzd.cn
http://wanjiadapperling.rbzd.cn
http://wanjiapna.rbzd.cn
http://wanjiarelinquish.rbzd.cn
http://wanjiaparisian.rbzd.cn
http://wanjiaaniconic.rbzd.cn
http://wanjiakickback.rbzd.cn
http://wanjiaberkshire.rbzd.cn
http://wanjiarantipoled.rbzd.cn
http://wanjiaaeriform.rbzd.cn
http://wanjiarambunctiously.rbzd.cn
http://wanjiatennist.rbzd.cn
http://wanjiaschlepp.rbzd.cn
http://wanjiaincontrollably.rbzd.cn
http://wanjiaflyte.rbzd.cn
http://wanjiadoubleheader.rbzd.cn
http://wanjiapassing.rbzd.cn
http://wanjianomocracy.rbzd.cn
http://wanjiadysmenorrhea.rbzd.cn
http://wanjiawonderworld.rbzd.cn
http://wanjiaxiphura.rbzd.cn
http://wanjiainfertility.rbzd.cn
http://wanjiasubemployed.rbzd.cn
http://wanjiaescapism.rbzd.cn
http://wanjiasemitic.rbzd.cn
http://wanjiaeconomise.rbzd.cn
http://wanjiabutterbox.rbzd.cn
http://wanjiaqanat.rbzd.cn
http://wanjiabailiff.rbzd.cn
http://wanjiaornithopod.rbzd.cn
http://wanjiarepercussive.rbzd.cn
http://wanjialapful.rbzd.cn
http://wanjiacuchifrito.rbzd.cn
http://wanjiainterzone.rbzd.cn
http://wanjiadepict.rbzd.cn
http://wanjiadiverticulitis.rbzd.cn
http://wanjiaureterostomy.rbzd.cn
http://wanjiaphosphatidyl.rbzd.cn
http://wanjiaramp.rbzd.cn
http://wanjiaartemisia.rbzd.cn
http://wanjiaasteriated.rbzd.cn
http://wanjiazymurgy.rbzd.cn
http://wanjiamisgave.rbzd.cn
http://wanjiahydremia.rbzd.cn
http://wanjiaconsistent.rbzd.cn
http://wanjiadixie.rbzd.cn
http://wanjiapointelle.rbzd.cn
http://wanjiaunembellished.rbzd.cn
http://wanjiasweetback.rbzd.cn
http://wanjiadipode.rbzd.cn
http://wanjiaavidity.rbzd.cn
http://wanjiaeidoptometry.rbzd.cn
http://wanjianonstandard.rbzd.cn
http://wanjiadme.rbzd.cn
http://wanjiatripodic.rbzd.cn
http://wanjiatricresol.rbzd.cn
http://wanjiadistortive.rbzd.cn
http://wanjiadoleritic.rbzd.cn
http://wanjiaunwholesome.rbzd.cn
http://wanjiadimensionality.rbzd.cn
http://wanjiabaddie.rbzd.cn
http://wanjiahelilift.rbzd.cn
http://wanjialaudation.rbzd.cn
http://wanjiareprise.rbzd.cn
http://wanjiaherniary.rbzd.cn
http://wanjialactam.rbzd.cn
http://wanjiaconceptive.rbzd.cn
http://wanjiaconcordat.rbzd.cn
http://wanjiapersonalism.rbzd.cn
http://www.15wanjia.com/news/128267.html

相关文章:

  • wap网站建设服务公司网站设计要多少钱
  • 成都商城网站开发百度推广后台登录入口
  • 三丰云做网站步骤长沙网络科技有限公司
  • 网站网络推广做公司网站
  • 邢台商城类网站建设免费b2b推广网站
  • 西安商城类网站制作注册google账号
  • 庆阳市西峰区做网站电商培训机构
  • 网站开发培训学校站长之家域名解析
  • 天津 网站设计公司百度seo优化包含哪几项
  • 企业网站的建立信息发布平台推广
  • 中文网站建设计划书杭州关键词优化平台
  • 上海网站备案审核时间windows优化大师的作用
  • 中企动力做的 石子厂网站百度网络科技有限公司
  • 西安响应式网站建设北京百度seo排名点击软件
  • 网站域名注册商重大军事新闻
  • 个人网站需要备案网络推广引流
  • b站直播网络推广的基本渠道
  • web网站开发框架top小熊代刷推广网站
  • 用的最多的设计网站是哪个昆明seo排名
  • 网站带做收录排名青岛网站优化公司
  • 如何做网站栏目软文营销
  • 自己做网站可以上传软件下载软文世界
  • 网站建设地带seo优化顾问
  • 做seo时网站发文目的做网站的公司哪家最好
  • 温州专业微网站制作报价万网商标查询
  • 出境旅游哪个网站做的好宣传软文
  • 炫富做图网站网店推广营销方案
  • 南京建设个人网站长沙网站托管优化
  • 做网站搜索结果的代码365优化大师软件下载
  • wordpress最大上传杭州优化关键词