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声明驱动
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 驱动
    +关注

    关注

    11

    文章

    1718

    浏览量

    84353
  • Linux
    +关注

    关注

    87

    文章

    10992

    浏览量

    206744
  • Clocks
    +关注

    关注

    0

    文章

    6

    浏览量

    9581
  • 系统
    +关注

    关注

    1

    文章

    981

    浏览量

    21037
收藏 人收藏

    评论

    相关推荐

    Linux clock子系统驱动实例

    在Linux驱动中,操作时钟只需要简单调用内核提供的通用接口即可,clock驱动通常是由芯片厂商开发的,在Linux启动时clock
    发表于 05-31 16:10 464次阅读
    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 622次阅读
    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+数字电子系统设计与开发实例导航
    发表于 08-20 19:36

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

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

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

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

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

    本帖最后由 lee_st 于 2017-10-31 09:04 编辑 FPGA数字电子系统设计与开发实例导航
    发表于 10-21 20:08

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

    本帖最后由 lee_st 于 2017-11-2 15:10 编辑 FPGA数字电子系统设计与开发实例导航
    发表于 11-01 10:52

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

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

    如何使用Linux内核的input子系统

    输入设备总类繁杂,包括按键,键盘,触摸屏,鼠标,摇杆等等,它们本身都是字符设备,不过内核为了能将这些设备的共性抽象出来,简化驱动的开发,建立了一个 Input 子系统。用户只需要根据内核提供
    发表于 12-29 07:20

    STM32驱动系统时钟SYSCLK

    参考:STM32F207用户手册STM32可以使用三种不同的时钟源来驱动系统时钟SYSCLK。HEI震荡时钟 (内部)HSE震荡
    发表于 08-23 08:33

    鸿蒙的驱动子系统资料汇总(二)

    子系统和组件有: 4、驱动配置文件的分析 以 UART 驱动实例程序为例,可将示驱动程序分为三部分: 1. 设备树的描述文件及
    发表于 03-29 14:58

    MSP430f2619学习—系统时钟

    1.时钟图通过対时钟系统的配置可产生3种时钟:(1)ACLK,辅助时钟(2)MCLK,主系统
    发表于 11-19 19:21 5次下载
    MSP430f2619学习—<b class='flag-5'>系统</b><b class='flag-5'>时钟</b>

    Linux reset子系统有什么功能

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

    Linux clock子系统是什么

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