1 时钟子系统中clock驱动实例-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

时钟子系统中clock驱动实例

麦辣鸡腿堡 来源:嵌入式Linux充电站 作者:Vincent 2023-09-27 14:39 次阅读

clock驱动实例

clock驱动在时钟子系统中属于provider,provider是时钟的提供者,即具体的clock驱动。

clock驱动在Linux刚启动的时候就要完成,比initcall都要早期,因此clock驱动是在内核中进行实现。 在内核的drivers/clk目录下,可以看到各个芯片厂商对各自芯片clock驱动的实现:

图片

下面以一个简单的时钟树,举例说明一个芯片的时钟驱动的大致实现过程:

1、时钟树

通常来说,一个芯片的时钟树是比较固定的,例如,以下时钟树:

图片

时钟树的 根节点一般是晶振时钟 ,上图根节点为24M晶振时钟。根节点下面是PLL,PLL用于提升频率。PPL0下又分频给PERI、DSP和ISP。PLL1分频给DDR和ENC。

对于PLL来说,PLL的频率可以通过寄存器设置,但通常是固定的,所以PLL属于 固定时钟

对PERI、DSP等模块来说,它们的频率来自于PLL的分频,因此这些模块的时钟属于 分频时钟

2、设备树

设备树中表示一个时钟源,应有如下属性,例如24M晶振时钟:

clocks{
 osc24M:osc24M{
  compatible = "fixed-clock";
  #clock-cells = < 0 >;
  clock-output-name = "osc24M";
  clock-frequency = < 24000000 >;
 };
};
属性说明
compatible驱动匹配名字
#clock-cells提供输出时钟的路数。#clock-cells为0时,代表输出一路时钟#clock-cells为1时,代表输出2路时钟。
#clock-output-names输出时钟的名字
#clock-frequency输出时钟的频率

3、驱动实现

clock驱动编写的基本步骤:

  1. 实现struct clk_ops相关成员函数
  2. 定义分配struct clk_onecell_data结构体,初始化相关数据
  3. 定义分配struct clk_init_data结构体,初始化相关数据
  4. 调用clk_register将时钟注册进框架
  5. 调用clk_register_clkdev注册时钟设备
  6. 调用of_clk_add_provider,将clk provider存放到of_clk_provider链表中管理
  7. 调用CLK_OF_DECLARE声明驱动
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 驱动
    +关注

    关注

    12

    文章

    1838

    浏览量

    85261
  • Linux
    +关注

    关注

    87

    文章

    11292

    浏览量

    209317
  • Clocks
    +关注

    关注

    0

    文章

    5

    浏览量

    9613
  • 系统
    +关注

    关注

    1

    文章

    1014

    浏览量

    21332
收藏 人收藏

    评论

    相关推荐

    Linux clock子系统驱动实例

    在Linux驱动,操作时钟只需要简单调用内核提供的通用接口即可,clock驱动通常是由芯片厂商开发的,在Linux启动时
    发表于 05-31 16:10 812次阅读
    Linux <b class='flag-5'>clock</b><b class='flag-5'>子系统</b>及<b class='flag-5'>驱动</b><b class='flag-5'>实例</b>

    Linux reset子系统驱动实例

    上篇讲了Linux clock驱动,今天说说Linux的reset驱动
    发表于 05-31 16:16 1126次阅读
    Linux reset<b class='flag-5'>子系统</b>及<b class='flag-5'>驱动</b><b class='flag-5'>实例</b>

    子系统设计实例PDF格式

    子系统设计实例 [hide][[/hide]
    发表于 09-25 16:00

    FPGA数字电子系统设计与开发实例导航

    FPGA数字电子系统设计与开发实例导航
    发表于 09-26 12:43

    FPGA_数字电子系统设计与开发实例导航

    FPGA_数字电子系统设计与开发实例导航
    发表于 09-28 13:41

    SYSBIOS6驱动clock的timer配置问题如何解决

    现在使用C6748开发,需要使用sy***ios6。在SYSBIOS6需要使用某一个timer来驱动系统时钟,在sy***ios的cfg文件
    发表于 05-19 11:15

    子系统设计实例

    子系统设计实例将精选一些历届电子竞赛的赛题,通过对它们的具体分析和设计、实施,将理论与实践紧密的结合起来,通过具体的设计训练提高实际能力。 简易数字频
    发表于 07-28 18:24 69次下载

    FPGA_数字电子系统设计与开发实例导航

    FPGA_数字电子系统设计与开发实例导航,基于VHDL设计语言。
    发表于 05-11 15:54 24次下载

    三个命令生成的报告均可显示Clock Skew的具体数值

    如果时钟同时驱动I/O和Slice的逻辑资源,且负载小于2000时,可通过CLOCK_LOW_FANOUT属性对相应的时钟net进行设置,
    的头像 发表于 11-07 11:08 4824次阅读
    三个命令生成的报告<b class='flag-5'>中</b>均可显示<b class='flag-5'>Clock</b> Skew的具体数值

    Linux时间子系统之一:clock source(时钟源)

    clock source用于为linux内核提供一个时间基线,如果你用linux的date命令获取当前时间,内核会读取当前的clock source,转换并返回合适的时间单位给用户空间。
    发表于 05-10 14:36 1953次阅读

    为什么需要时钟门控?时钟门控终极指南

    时钟门控(Clock Gating)** 是一种在数字IC设计某些部分不需要时关闭时钟的技术。这里的“部分”可以是单个寄存器、模块、子系统
    的头像 发表于 06-29 15:58 2110次阅读
    为什么需要<b class='flag-5'>时钟</b>门控?<b class='flag-5'>时钟</b>门控终极指南

    Linux reset子系统有什么功能

    Linux reset子系统 reset子系统非常简单,与clock子系统非常类似,但在驱动实现上,reset
    的头像 发表于 09-27 14:06 762次阅读
    Linux reset<b class='flag-5'>子系统</b>有什么功能

    Linux clock子系统是什么

    clock子系统 Linux的时钟子系统由CCF(common clock framework)框架管理, CCF向上给用户提供了通用的
    的头像 发表于 09-27 14:25 828次阅读
    Linux <b class='flag-5'>clock</b><b class='flag-5'>子系统</b>是什么

    SOC设计Clock Gating的基本原理与应用讲解

    SOC(System on Chip,片上系统)设计时钟信号的控制对于整个系统的性能和功耗至关重要。本文将带您了解SOC设计的一种
    的头像 发表于 04-28 09:12 2154次阅读

    深度解析linux时钟子系统

    linux内核实现了一个CLK子系统,用于对上层提供各模块(例如需要时钟信号的外设,USB等)的时钟驱动接口,对下层提供具体SOC的
    的头像 发表于 09-29 16:46 435次阅读
    深度解析linux<b class='flag-5'>时钟</b><b class='flag-5'>子系统</b>