努力成为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驱动修炼之道-clock框架.pdf Linux驱动修炼之道-ADC驱动.pdf Linux内核访问外设I O资源的方式.pdf LINUX内核USB子系统学习笔记之初识USB.pdf kernel hacker修炼之道之驱动-流水灯.pdf kernel ...
在Linux或Unix系统中,可以调用C语言的time()函数,或者在Python中使用datetime模块。开发者需要将这些系统时间数据转换为用户友好的格式,并实时更新到时钟界面上。 在压缩包内的“src-clock”文件很可能包含了...
笔记本散热不同程度存在一些缺陷,用频率调整软件RM-CLOCK1.7对CPU频率进行调整,可以动态调整CPU频率(频率调整范围12.5%-100%),根据CPU使用率自动调整CPU频率,最大程度减少笔记本发热
在"emoji-clock-master"这个压缩包中,可能包含了源代码文件、测试文件、示例和相关的文档。源代码文件可能包含`main.go`,这是程序的入口点,以及`clock.go`,其中定义了与时钟相关的函数。测试文件如`clock_test....
标题"T-Clock_2.4.4.zip"指的是T-Clock软件的一个版本,具体为2.4.4。T-Clock是一款专为Windows系统设计的工具,它允许用户自定义任务栏(状态栏)上的时间显示,从而提供更加个性化和功能丰富的时钟体验。 在描述...
在这个LCD时钟项目中,AVR微控制器负责处理时间计算、驱动LCD显示及可能的用户交互功能。 二、HD44780字符LCD显示屏 HD44780是一款非常常见的字符型液晶显示器控制器,支持8位或4位数据传输模式。它通常用于显示...
4. **时间同步驱动**:hv_clock,它确保Linux虚拟机的时间同步与物理主机保持一致,这对于实时应用和高精度计时操作至关重要。 5. **电源管理驱动**:hv_utils,它提供了管理和控制虚拟机电源状态的能力,包括挂起...
通过添加import Clock from 'react-clock'来import Clock from 'react-clock' 。 通过添加<Clock> 。演示可以在sample目录中找到一个最小的演示页面。 也可用!安装通过执行npm install react-clock或yarn add ...
在STM32中,RCC(Reset and Clock Control)即复位和时钟控制模块,是系统核心运行的基础,因为它管理着整个芯片的时钟源和时钟分频设置。在“2-RCC-System-Clock.zip_RCC-CLOCK”这个压缩包中,我们可以深入学习STM...
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` 是一个针对JavaScript的前端开源库,专门用于设置和实现“时钟”这一特定项目的编码标准。它基于`ESLint`,一个广泛使用的静态代码分析工具,用来检测和修复代码中的潜在问题。 `ESLint`本身...
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 ...
$ 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" 提供了Linux内核中的时钟与定时器服务的更新版本,版本号为2.13.6。这个压缩包包含两个文件:`dsp-clock.c` 和 `shsha.txt`。 `dsp-clock.c` 文件很可能是C语言编写的源代码,用于实现特定的...
从压缩包文件名称"gpe-clock-0.23"我们可以推断,这是一个版本号为0.23的软件发布。通常,版本号的这种格式(如X.Y.Z)代表了软件的成熟度和变更历史,其中X表示主版本,Y表示次版本,Z表示修订版或bug修复版本。...
7. **内核接口**:驱动程序需要遵循Linux内核的驱动模型,与内核的时钟框架进行交互,如注册时钟设备、响应时钟控制请求等。 8. **电源管理**:驱动程序需要考虑如何在电源管理策略下协同工作,比如在休眠或唤醒...
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项目涉及了51单片机的基础知识、Keil μVision的使用、时间处理、显示驱动、中断编程以及电源管理等多个方面,对初学者来说是一个非常实用的学习案例。通过分析和实践这个项目,可以加深对51...
开源项目WatchBeam-clock是一个专为围棋比赛设计的时间管理工具,其源代码被封装在一个名为"clock-master"的压缩包中。这个项目的核心目标是提供一个高效、精确且易于使用的计时系统,尤其适用于在线围棋对弈平台。...