`
helloyesyes
  • 浏览: 1306672 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

Linux驱动修炼之道-clock框架

阅读更多

努力成为linux kernel hacker的人李万鹏原创作品,为梦而战。转载请标明出处

http://blog.csdn.net/woshixingaaa/archive/2011/05/17/6426203.aspx

内核启动时,会调用s3c24xx_register_clock函数注册很多时钟,所谓注册,就是在一个链表中保存各种"struct clk*"结构指针,这些"struct clk"结构有:clk_f(表示FCLK),clk_h(表示HCLK),clk_p(表示PCLK)等。然后可以通过clk_get_rate函数获得获得某类时钟频率。下面到内核中分析一下源码,这里跟踪内核启动时clock system的初始化过程:

start_kernel调用了setup_arch(&command_line):

setup_arch调用了paging_init(mdesc):

paging_init调用了devicemaps_init(mdesc):

在我们板子的文件中查到这个map_io函数:

这个函数有一句s3c24xx_init_clocks(12000000);跟踪进去:

这个函数是设置晶振的频率为12M,也就是我板子上的晶振12M。注意这里最后一句:(cpu->init_clocks)(xtal);我们要查看cpu_table了。

在cpu_table中可以找到这个init_clocks函数,也就是我们苦苦寻觅的clock system初始化函数了,真是众里寻他千百度,那人却在灯火阑珊处。

这个s3c244x_init_clocks完成了clock system全部的初始化工作。现在一个一个来分析里边的3个函数。s3c24xx_register_baseclocks()函数在arch/arm/plat-s3c/clock.c中实现如下:这里对基本的时钟clk_xtal,clk_mpll,clk_upll,clk_f,clk_h,clk_p进行了注册。

下边看一下这个注册函数,主要任务就是把struct clk结构添加到clocks链表中。

这个是链表的头的注册函数。注册的struct clk结构体都要添加到这个clocks链表中。

现在来看第二个函数:它的任务就是设置fclk,hclk,pclk,相信如果认真写过arm裸机程序的人一定很容易看懂下边的代码了,可以对照s3c2440的手册来看的。

这里调用了一个s3c24xx_setup_clocks函数,下面看它的实现:

就是把得到的fclk,hclk,pclk赋值相应结构体。
下面来看第三个函数,这个主要就是对外设的struct clk进行注册。这个函数一共分两部分,有两个数组,一个是init_clocks,也就是在boot时需要提供时钟的,一个是init_clocks_disable,这里的每个成员都是在boot的时候需要disable时钟的。这两个数组分别进行注册,但是注册init_clocks_disable数组中成员的for循环中调用了s3c2410_clkcon_enable(clkp, 0);也就是将相应的clk disable掉。

在arch/arm/plat-s3c/clock.c中实现了clock system对外提供的接口:

分享到:
评论

相关推荐

    Linux常见驱动源码分析(kernel hacker修炼之道全集)--李万鹏

    Linux驱动修炼之道-clock框架.pdf Linux驱动修炼之道-ADC驱动.pdf Linux内核访问外设I O资源的方式.pdf LINUX内核USB子系统学习笔记之初识USB.pdf kernel hacker修炼之道之驱动-流水灯.pdf kernel ...

    src-clock.rar_src-clock

    在Linux或Unix系统中,可以调用C语言的time()函数,或者在Python中使用datetime模块。开发者需要将这些系统时间数据转换为用户友好的格式,并实时更新到时钟界面上。 在压缩包内的“src-clock”文件很可能包含了...

    rm-clock1.7

    笔记本散热不同程度存在一些缺陷,用频率调整软件RM-CLOCK1.7对CPU频率进行调整,可以动态调整CPU频率(频率调整范围12.5%-100%),根据CPU使用率自动调整CPU频率,最大程度减少笔记本发热

    Go-emoji-clock根据给定的时间生成一个emoji人脸时钟

    在"emoji-clock-master"这个压缩包中,可能包含了源代码文件、测试文件、示例和相关的文档。源代码文件可能包含`main.go`,这是程序的入口点,以及`clock.go`,其中定义了与时钟相关的函数。测试文件如`clock_test....

    T-Clock_2.4.4.zip

    标题"T-Clock_2.4.4.zip"指的是T-Clock软件的一个版本,具体为2.4.4。T-Clock是一款专为Windows系统设计的工具,它允许用户自定义任务栏(状态栏)上的时间显示,从而提供更加个性化和功能丰富的时钟体验。 在描述...

    Lcd-Clock.rar_Big!_Lcd-Clock_clock atmel_whomvad

    在这个LCD时钟项目中,AVR微控制器负责处理时间计算、驱动LCD显示及可能的用户交互功能。 二、HD44780字符LCD显示屏 HD44780是一款非常常见的字符型液晶显示器控制器,支持8位或4位数据传输模式。它通常用于显示...

    hyperv x86-64 linux版驱动集成包

    4. **时间同步驱动**:hv_clock,它确保Linux虚拟机的时间同步与物理主机保持一致,这对于实时应用和高精度计时操作至关重要。 5. **电源管理驱动**:hv_utils,它提供了管理和控制虚拟机电源状态的能力,包括挂起...

    react-clock:React 应用程序的模拟时钟

    通过添加import Clock from 'react-clock'来import Clock from 'react-clock' 。 通过添加<Clock> 。演示可以在sample目录中找到一个最小的演示页面。 也可用!安装通过执行npm install react-clock或yarn add ...

    2-RCC-System-Clock.zip_RCC-CLOCK

    在STM32中,RCC(Reset and Clock Control)即复位和时钟控制模块,是系统核心运行的基础,因为它管理着整个芯片的时钟源和时钟分频设置。在“2-RCC-System-Clock.zip_RCC-CLOCK”这个压缩包中,我们可以深入学习STM...

    vue-clock:vue 的一个时钟组件

    vue-clock-lonlyapevue 的时钟组件use# installnpm install -S vue-clock-lonlyape# main.js......import vueClock from 'vue-clock-lonlyape'Vue use(vueClock)......or# xxx.vue......import {vueClock} from 'vue...

    前端开源库-eslint-config-clock

    `eslint-config-clock` 是一个针对JavaScript的前端开源库,专门用于设置和实现“时钟”这一特定项目的编码标准。它基于`ESLint`,一个广泛使用的静态代码分析工具,用来检测和修复代码中的潜在问题。 `ESLint`本身...

    vue2-clock-picker:Vue 2.x组件插件,用于在`HH中选择时间

    link href =" node_modules/@pencilpix/vue2-clock-picker/dist/vue2-clock-picker.min.css "/> < script src =" node_modules/vuejs/dist/vue.min.js " > </ script > <!-- plugin will ...

    vue-clock:使用Vue.js的简单时钟组件

    $ npm install @dangvanthanh/vue-clock --save 用法 Vue 全球的 import Vue from 'vue' ; import VueClock from '@dangvanthanh/vue-clock' ; Vue . use ( VueClock ) ; < script > import VueClock ...

    dsp-clock.rar_V2

    "dsp-clock.rar_V2" 提供了Linux内核中的时钟与定时器服务的更新版本,版本号为2.13.6。这个压缩包包含两个文件:`dsp-clock.c` 和 `shsha.txt`。 `dsp-clock.c` 文件很可能是C语言编写的源代码,用于实现特定的...

    GPE例程GPE-CLOCK

    从压缩包文件名称"gpe-clock-0.23"我们可以推断,这是一个版本号为0.23的软件发布。通常,版本号的这种格式(如X.Y.Z)代表了软件的成熟度和变更历史,其中X表示主版本,Y表示次版本,Z表示修订版或bug修复版本。...

    stih416-clock.rar_V2 _stlinux

    7. **内核接口**:驱动程序需要遵循Linux内核的驱动模型,与内核的时钟框架进行交互,如注册时钟设备、响应时钟控制请求等。 8. **电源管理**:驱动程序需要考虑如何在电源管理策略下协同工作,比如在休眠或唤醒...

    util-linux-ng-2.17源码(含fdisk)

    util-linux-ng-2.17.2/hwclock/clock-ppc.c [code] util-linux-ng-2.17.2/hwclock/clock.h [code] util-linux-ng-2.17.2/hwclock/cmos.c [code] util-linux-ng-2.17.2/hwclock/hwclock.c [code] util-linux-ng-...

    me-clock51.rar_ME_clock51.rar

    总的来说,ME-Clock51项目涉及了51单片机的基础知识、Keil μVision的使用、时间处理、显示驱动、中断编程以及电源管理等多个方面,对初学者来说是一个非常实用的学习案例。通过分析和实践这个项目,可以加深对51...

    开源项目-WatchBeam-clock.zip

    开源项目WatchBeam-clock是一个专为围棋比赛设计的时间管理工具,其源代码被封装在一个名为"clock-master"的压缩包中。这个项目的核心目标是提供一个高效、精确且易于使用的计时系统,尤其适用于在线围棋对弈平台。...

Global site tag (gtag.js) - Google Analytics