时钟处理
数字时钟恢复原理

数字时钟恢复原理数字时钟是一种常见的时间显示设备,它以数字形式直观地显示当前的时间。
它的恢复原理包括时钟信号产生、时钟信号处理和数字显示三个主要部分。
时钟信号产生是数字时钟恢复原理的第一步。
数字时钟通常采用晶体振荡器作为时钟信号源。
晶体振荡器是一种能够稳定振荡的电子元件,它的振荡频率由晶体的物理特性决定。
当电压施加到晶体上时,晶体会产生机械振动,从而产生稳定的振荡信号。
这个振荡信号的频率非常稳定,可以作为时钟信号的基准。
时钟信号处理是数字时钟恢复原理的第二步。
时钟信号产生后,需要进行处理以便用于数字显示。
首先,时钟信号需要经过分频器进行分频。
分频器是一种能够将输入信号的频率分频为较低频率的电子元件。
通过分频,可以将高频的时钟信号转换为可用于数字显示的频率。
接下来,分频后的时钟信号需要经过计数器进行计数。
计数器是一种能够将输入信号进行计数的电子元件。
通过计数器,可以将时钟信号转换为数字形式的时间信息,并且能够根据需要进行进位和复位操作。
最后,经过计数器处理后的时钟信号需要经过解码器进行解码。
解码器是一种能够将数字信号转换为特定输出的电子元件。
通过解码器,可以将计数器输出的数字形式的时间信息转换为用于数字显示的信号。
数字显示是数字时钟恢复原理的第三步。
经过解码器解码后的信号需要通过数码管进行显示。
数码管是一种能够显示数字的电子元件。
通常,数字时钟采用七段数码管进行显示。
七段数码管是由七个LED(发光二极管)组成,每个LED代表一个数字段。
通过控制每个LED的亮灭,可以实现数字的显示。
通过时钟信号处理后的信号经过解码器解码后,会输出对应的控制信号,控制数码管的每个LED 的亮灭状态,从而显示出当前时间的数字形式。
数字时钟的恢复原理包括时钟信号产生、时钟信号处理和数字显示三个主要部分。
时钟信号产生通过晶体振荡器产生稳定的时钟信号。
时钟信号处理通过分频器、计数器和解码器对时钟信号进行处理,转换为数字形式的时间信息。
单bit信号快到慢合慢到快的通用的跨时钟的处理方式

单bit信号快到慢合慢到快的通用的跨时钟的处理方式
单bit信号从快到慢合慢到快的通用跨时钟处理方式可以采用
以下方法:
1.同步器(Synchronizer):使用两个时钟域之间的同步器将
快时钟域的信号同步到慢时钟域。
同步器由两个触发器组成,一个触发器在快时钟域上工作,另一个触发器在慢时钟域上工作。
该方法可以保证数据在两个时钟域之间传输的稳定和正确,并且减少时钟域之间的干扰。
2.边沿检测(Edge Detection):使用边沿检测电路来检测信号的变化,然后将检测到的边沿信号传递给慢时钟域的逻辑电路。
这种方法适用于只需要检测信号是否发生变化,而不需要精确传输每个时钟周期的情况。
3.FIFO(First-In-First-Out):使用FIFO缓冲区将快时钟域的
信号存储在一个缓冲区中,然后根据慢时钟域的速率逐个取出。
这种方式使得在两个时钟域之间实现了数据的异步传输,保证了数据传输的稳定性。
FIFO缓冲区可以通过使用双端口内存
或使用多个单端口内存实现。
4.双向移位寄存器(Bidirectional Shift Register):使用双向移
位寄存器来对信号进行转换,将快时钟域的信号转换为慢时钟域的形式。
双向移位寄存器可以在两个时钟域之间同步地移位数据,以实现跨时钟域的数据传输。
以上提到的方法都是跨时钟域处理中常用的方法,选择适合的
方法取决于具体的应用场景和需求。
在设计中需要考虑时钟域之间的时序关系,数据的稳定性和延迟等因素。
此外,还需要进行时序仿真和验证,确保跨时钟域的设计满足设计要求。
北斗同步时钟解决方案

北斗同步时钟解决方案一、背景介绍北斗导航系统是中国自主研发的卫星导航系统,具有全球覆盖能力和高精度定位服务。
在许多应用场景中,需要对多个设备或者系统进行时间同步,以确保数据的准确性和一致性。
北斗同步时钟解决方案可以提供高精度的时间同步服务,满足各种应用需求。
二、方案概述北斗同步时钟解决方案基于北斗导航系统的卫星信号,通过精确的时间信号传输和接收,实现多个设备之间的时间同步。
该方案由以下几个核心组件组成:1. 北斗卫星信号接收器:用于接收北斗导航系统的卫星信号,提取时间信息,并将其传输给同步时钟设备。
2. 同步时钟设备:接收北斗卫星信号接收器传输的时间信息,通过内部的时钟同步算法,将时间信号同步到高精度的时钟中。
同步时钟设备可以通过网络或者其他方式将同步后的时间信号传输给其他设备。
3. 同步时钟管理系统:用于管理和监控同步时钟设备,包括配置同步参数、监测同步状态、诊断故障等功能。
同步时钟管理系统可以提供用户友好的界面,方便用户进行操作和管理。
三、方案特点1. 高精度:北斗同步时钟解决方案采用精确的时间信号传输和同步算法,可以实现微秒级的时间同步精度,满足各种高精度应用需求。
2. 稳定可靠:北斗导航系统具有全球覆盖能力,可以在任何时刻提供稳定的卫星信号。
同步时钟设备采用可靠的硬件和软件设计,保证系统的稳定性和可靠性。
3. 灵便易用:北斗同步时钟解决方案可以根据不同的应用需求进行定制和配置。
同步时钟管理系统提供用户友好的界面,方便用户进行操作和管理。
4. 扩展性强:北斗同步时钟解决方案支持多设备的时间同步,可以满足大规模系统的需求。
同时,该方案可以与其他系统集成,实现更多功能和应用。
四、应用场景北斗同步时钟解决方案适合于以下应用场景:1. 通信网络:在通信网络中,各个设备需要时间同步,以确保数据的准确传输和处理。
北斗同步时钟解决方案可以提供高精度的时间同步服务,提升通信网络的性能和稳定性。
2. 金融交易:金融交易对时间的精确性要求非常高,需要对交易系统中的各个设备进行时间同步。
阿朗SDH时钟问题处理方法

阿朗SDH时钟问题处理方法
1、阿朗SDH设备同步时钟在网管列表中的表述形式
凡是以/
2、阿朗SDH设备同步时钟处理步骤
1、发现/timingGenerator、-T0SyncPu结尾的告警,首先要查看光路是否有LOS、DS等告警,特别要注意的是要通过J0字节追踪确认相邻的光口是否被自环起来了,曾经发现两个对接的光口被分别自环起来后,表面看光路及光口都正常的,就是不断闪报Server Signal Failure告警。
下图就是因为12155网元2光口有LOS告警,引起了该网元2光口的时钟告警。
现网的1642时钟告警多属于这类原因引起的。
2 、有的网元在告警列表里面有时钟告警,但进设备里面去看又没时钟告警,这是因为告警没同步引起的。
告警没同步的网元面板如下图,特征是CRI、MAJ等告警栏的字母像虚线般。
处理方法:
在网络拓扑图上找到该我一定图标,停止监控(stop),再恢复监控(Align
告警同步后网元的面板图:
3、将时钟配置删除重配的步骤:
1、在设备面板上,Views-Synchronization
2、出现如下界面:
3、将原来配的时钟删除,删除前要记下该时钟是主用还是备用,1代表主用,2代表备用:
4、重新配时钟。
Synchronization-Time Source Configuration
5、搜索光口
6、选择时钟源来源及级别,光口提取选Extracted,主用选1,备用选2。
OK后就赔好了。
如果是1660、1662、1678设备有时钟告警,有可能交叉板原因引起,建议找厂家配合处理。
通信电子中的时钟信号处理技术

通信电子中的时钟信号处理技术在现代通信电子设备中,时钟信号处理技术扮演着至关重要的角色。
时钟信号是电子设备内部所有功能模块同步工作的基础。
所以,一组精准可靠的时钟信号处理技术是现代通信电子设备高效稳定工作的必要条件之一。
本篇文章将围绕时钟信号处理技术进行探讨,探究其在现代通信电子设备中的应用以及发展趋势。
时钟信号的产生和传输:通信电子设备中的时钟信号主要由晶体振荡器或者时钟发生器产生。
这样,我们就得到了产生时钟信号的基础设备。
接下来就是将时钟信号传输到设备内部。
无线设备通常会采用无线网络时钟(WNCS)来进行时钟信号的传输,而有线网络则采用同步以太网时钟(SyncE)或者其它同步网络协议。
其中,WNCS通常使用基本的IEEE802.11n和IEEE 802.11ac标准,具有高精度和可靠性的特点,使用鲁棒性高且同步能力强。
SyncE则对于基于以太网的应用来说是一种同步网络,可以保证精度和可靠性,常见于交换机、路由器等设备中。
时钟信号的重要性:在通信电子设备中,时钟信号的重要性不言而喻,包含射频前端(RF)和基带数字处理两个领域。
为了保证无线电通讯设备无缝连接,通常需要高精度的时钟接口和用于协调频道和频段之间更改的支持。
非同步通讯通过基带数字处理进行,其性能直接受到处理器对时钟信号的控制,如带宽、噪声。
另外,不同射频前端可能需要具有不同输出频率的时钟信号,因此需要通过时钟信号处理技术来实现输出的频率转换。
为了更好地使用电磁频谱资源并提高无线电的使用效率,正确的同步和时髦处理非常重要。
时钟信号的处理技术:通信电子设备中的时钟信号处理技术日益复杂和多样化,以满足不同设备的不同需求。
现代化的射频前端的时钟信号输出具有连续可调、锁相、倍频等能力,而基带数字处理则需要对时钟信号进行时延补偿、同步调整、噪声滤波等处理。
以下是几种常见的时钟信号处理技术:1. 锁相环技术(PLL):PLL以其收敛速度快、成本低、性能稳定等特点成为通信电子时钟信号处理的重要手段。
cpu的时钟频率单位

cpu的时钟频率单位CPU时钟频率:测量电脑处理器速度的重要单位。
CPU的时钟频率是控制计算机运行的关键因素。
在汇编的时候,由于CPU的时钟频率影响了执行速度,而很多程序经常耗时较长,因此,时钟频率之争也随之升温。
什么是CPU时钟频率?它的单位是什么?1. CPU时钟频率CPU时钟频率是指在CPU内部每经过多长时间中央处理单元(CPU)都会执行一次指令的速度,它是决定计算机的运行速度的重要参数。
它的数值与处理器运算速度密切相关,也是计算机性能衡量的一项重要指标。
2. CPU时钟频率的单位CPU时钟频率通常用Hertz(Hz)表示,它是每秒一次的频率单位;也就是说,它表示1秒钟内CPU内部执行多少次指令。
同时,它也可以以千兆赫兹(MHz,Megahertz)或者千兆位每秒(GHz,Gigahurz)形式来表示,它们表示的是每秒五百万次或五百万万次的频率。
3. CPU时钟频率的提升CPU的时钟频率提升可以大大提高计算机性能,但同时也会直接带来负担,或是由于管脚承载能力不足而出现性能下降的情况。
同时,大部分的处理器也被限制在一个比较低的时钟频率之内,以避免数据传输发生冲突和芯片仿真失败。
4. CPU时钟频率的稳定CPU时钟频率稳定可以使处理器在高容量数据流动情况下仍能保持稳定的性能。
通常来说,较高的时钟频率往往意味着芯片仿真质量可以更高,但是在实际应用中,一般其实只需要适量的提升就能够满足应用需求,而对于芯片仿真的完美度,并非必须要求其处于最高的时钟频率模式。
总的来说,CPU的时钟频率是一个重要的参数,它的单位是Hertz (Hz),它能够直接影响计算机的运行速度。
当必须在高容量数据流动情况下提高性能时,我们一般需要提高时钟频率;而在实际使用时,我们一般只需要适量的提高时钟频率就可以满足应用的需求。
快时钟到慢时钟跨时钟域处理

快时钟到慢时钟跨时钟域处理随着现代电子技术的不断发展,各种智能设备越来越普及,而这些设备中都包含了各种不同的时钟。
面对不同的时钟,如何进行跨时钟域处理成为了一个重要的问题。
本文将围绕这个问题展开讨论。
一、时钟域时钟域是指在一个系统中,由于时钟信号的不同而形成的不同的时钟区域。
在一个系统中,可能会有多个时钟域,每个时钟域都由一个时钟信号驱动。
例如,一个处理器的时钟域和一个外设的时钟域就是两个不同的时钟域。
二、时钟域的跨越在一个系统中,不同的时钟域之间需要进行数据的传输和交互。
但是,由于不同的时钟域具有不同的时钟频率和时钟相位,因此在传输和交互数据时会遇到一些问题。
例如,如果一个时钟域的时钟频率是100MHz,而另一个时钟域的时钟频率是50MHz,那么在传输数据时就需要进行频率的转换。
又例如,如果一个时钟域的时钟相位发生了变化,那么在传输数据时就需要进行时钟相位的校准。
三、跨时钟域处理的方法为了解决跨时钟域处理的问题,有以下几种方法。
1.同步方法同步方法是指在不同的时钟域之间建立同步信号,使得数据能够在同步信号的边沿进行传输。
这种方法需要在两个时钟域之间建立同步电路,并且需要在同步电路中添加缓存器来保证数据的正确传输。
同步方法的优点是能够保证数据的正确性,缺点是需要额外的硬件开销。
2.异步方法异步方法是指在不同的时钟域之间使用异步传输协议进行数据的传输。
这种方法不需要建立同步电路,只需要使用异步传输协议即可。
异步方法的优点是不需要额外的硬件开销,缺点是在数据传输过程中可能会出现误码。
3.频率转换方法频率转换方法是指将一个时钟域的时钟频率转换成另一个时钟域的时钟频率。
这种方法需要使用时钟控制电路来实现,可以通过倍频或分频的方式实现。
频率转换方法的优点是不需要建立同步电路,缺点是会引入一定的时钟抖动。
4.时钟域转换方法时钟域转换方法是指将一个时钟域的时钟信号转换成另一个时钟域的时钟信号。
这种方法需要使用时钟域转换电路来实现。
快速解决电脑时钟错误的问题

快速解决电脑时钟错误的问题电脑时钟错误是一个常见的问题,会给我们日常操作带来困扰。
幸运的是,解决这个问题并不是很困难。
本文将介绍一些快速解决电脑时钟错误的方法,帮助您迅速解决这一问题。
第一种方法:手动更正时间设置当电脑时钟出现错误时,我们可以尝试手动更正时间设置。
具体步骤如下:1.在任务栏右下角找到系统时间显示的地方,右键点击并选择“调整日期/时间”选项。
2.在弹出的窗口中,点击“更改日期和时间”按钮。
3.在接下来的界面中,点击“更改日期和时间”按钮,然后输入当前的正确日期和时间,并点击“确定”保存更改。
4.退出日期和时间设置界面,重启电脑,查看时钟是否已经正确显示。
第二种方法:同步网络时间服务器除了手动更正时间设置,我们还可以使用网络时间服务器来同步电脑时钟。
网络时间服务器可以提供准确的时间信息,确保我们的电脑时钟与全球标准时间保持一致。
具体操作如下:1.在任务栏右下角找到系统时间显示的地方,右键点击并选择“调整日期/时间”选项。
2.在弹出的窗口中,点击“Internet时间”选项卡。
3.勾选“自动与Internet时间同步”选项。
4.在下方的服务器列表中选择一个可靠的网络时间服务器,点击“立即更新”按钮进行同步。
5.等待同步完成后,点击“确定”保存更改,退出设置界面,重启电脑,查看时钟是否已经正确显示。
第三种方法:更换电池如果以上两种方法无法解决电脑时钟错误问题,那么可能是电池出现了问题。
电池是维持电脑时钟运行的关键部件,当电池电量不足或电池老化时,会导致电脑时钟出现错误。
这时我们可以尝试更换电池来解决问题。
具体步骤如下:1.关闭电脑并断开电源,确保安全操作。
2.找到电脑主板上的电池(一般为按钮电池),小心取下电池。
3.在电池上找到相应的规格型号信息,确保购买正确的替换电池。
4.使用新的电池替换原先的电池,注意方向应正确。
5.重新连接电源,启动电脑,查看时钟是否已经正常工作。
总结:通过手动更正时间设置、同步网络时间服务器以及更换电池这三种方法,我们可以快速解决电脑时钟错误的问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2008 年 9 月 11 日在 Linux 操作系统中,很多活动都和时间有关,例如:进程调度和网络处理等等。
所以说,了解 Linux 操作系统中的时钟处理机制有助于更好地了解 Linux 操作系统的运作方式。
本文分析了 Linux 2.6.25 内核的时钟处理机制,首先介绍了在计算机系统中的一些硬件计时器,然后重点介绍了 Linux 操作系统中的硬件时钟和软件时钟的处理过程以及软件时钟的应用。
最后对全文进行了总结。
1 计算机系统中的计时器在计算机系统中存在着许多硬件计时器,例如 Real Timer Clock ( RTC )、Time Stamp Counter ( TSC ) 和 Programmable Interval Timer ( PIT ) 等等。
这部分内容不是本文的中点,这里仅仅简单介绍几种,更多内容参见参考文献:∙Real Timer Clock ( RTC ):o 独立于整个计算机系统(例如: CPU 和其他 chip )o 内核利用其获取系统当前时间和日期∙ Time Stamp Counter ( TSC ):o 从 Pentium 起,提供一个寄存器 TSC ,用来累计每一次外部振荡器产生的时钟信号o 通过指令 rdtsc 访问这个寄存器o 比起 PIT ,TSC 可以提供更精确的时间测量∙ Programmable Interval Timer ( PIT ):o 时间测量设备o 内核使用的产生时钟中断的设备,产生的时钟中断依赖于硬件的体系结构,慢的为 10 ms 一次,快的为 1 ms 一次∙ High Precision Event Timer ( HPET ):o PIT 和 RTC 的替代者,和之前的计时器相比,HPET 提供了更高的时钟频率(至少10 MHz )以及更宽的计数器宽度(64位)o 一个 HPET 包括了一个固定频率的数值增加的计数器以及3到32个独立的计时器,这每一个计时器有包涵了一个比较器和一个寄存器(保存一个数值,表示触发中断的时机)。
每一个比较器都比较计数器中的数值和寄存器中的数值,当这两个数值相等时,将产生一个中断2 硬件时钟处理这里所说的硬件时钟处理特指的是硬件计时器时钟中断的处理过程。
2.1 数据结构和硬件计时器(本文又称作硬件时钟,区别于软件时钟)相关的数据结构主要有两个:∙struct clocksource :对硬件设备的抽象,描述时钟源信息∙struct clock_event_device :时钟的事件信息,包括当硬件时钟中断发生时要执行那些操作(实际上保存了相应函数的指针)。
本文将该结构称作为“时钟事件设备”。
上述两个结构内核源代码中有较详细的注解,分别位于文件 clocksource.h 和clockchips.h 中。
需要特别注意的是结构 clock_event_device 的成员event_handler ,它指定了当硬件时钟中断发生时,内核应该执行那些操作,也就是真正的时钟中断处理函数。
在2.3节“时钟初始化”部分会介绍它真正指向哪个函数。
Linux 内核维护了两个链表,分别存储了系统中所有时钟源的信息和时钟事件设备的信息。
这两个链表的表头在内核中分别是 clocksource_list 和clockevent_devices 。
图2-1显示了这两个链表。
图2-1 时钟源链表和时钟事件链表2.2 通知链技术( notification chain )在时钟处理这部分中,内核用到了所谓的“通知链( notification chain )”技术。
所以在介绍时钟处理过程之前先来了解下“通知链”技术。
在 Linux 内核中,各个子系统之间有很强的相互关系,一些被一个子系统生成或者被探测到的事件,很可能是另一个或者多个子系统感兴趣的,也就是说这个事件的获取者必须能够通知所有对该事件感兴趣的子系统,并且还需要这种通知机制具有一定的通用性。
基于这些, Linux 内核引入了“通知链”技术。
2.2.1 数据结构:通知链有四种类型,1.原子通知链( Atomic notifier chains ):通知链元素的回调函数(当事件发生时要执行的函数)只能在中断上下文中运行,不允许阻塞2.可阻塞通知链( Blocking notifier chains ):通知链元素的回调函数在进程上下文中运行,允许阻塞3.原始通知链( Raw notifier chains ):对通知链元素的回调函数没有任何限制,所有锁和保护机制都由调用者维护4.SRCU 通知链( SRCU notifier chains ):可阻塞通知链的一种变体所以对应了四种通知链头结构:∙struct atomic_notifier_head :原子通知链的链头∙struct blocking_notifier_head :可阻塞通知链的链头∙struct raw_notifier_head :原始通知链的链头∙struct srcu_notifier_head : SRCU 通知链的链头通知链元素的类型:∙struct notifier_block :通知链中的元素,记录了当发出通知时,应该执行的操作(即回调函数)链头中保存着指向元素链表的指针。
通知链元素结构则保存着回调函数的类型以及优先级,参见 notifier.h 文件。
2.2.2 运作机制通知链的运作机制包括两个角色:1.被通知者:对某一事件感兴趣一方。
定义了当事件发生时,相应的处理函数,即回调函数。
但需要事先将其注册到通知链中(被通知者注册的动作就是在通知链中增加一项)。
2.通知者:事件的通知者。
当检测到某事件,或者本身产生事件时,通知所有对该事件感兴趣的一方事件发生。
他定义了一个通知链,其中保存了每一个被通知者对事件的处理函数(回调函数)。
通知这个过程实际上就是遍历通知链中的每一项,然后调用相应的事件处理函数。
包括以下过程:1.通知者定义通知链2.被通知者向通知链中注册回调函数3.当事件发生时,通知者发出通知(执行通知链中所有元素的回调函数)整个过程可以看作是“发布——订阅”模型(参见参考资料)被通知者调用 notifier_chain_register 函数注册回调函数,该函数按照优先级将回调函数加入到通知链中。
注销回调函数则使用notifier_chain_unregister 函数,即将回调函数从通知链中删除。
2.2.1节讲述的4种通知链各有相应的注册和注销函数,但是他们最终都是调用上述两个函数完成注册和注销功能的。
有兴趣的读者可以自行查阅内核代码。
通知者调用 notifier_call_chain 函数通知事件的到达,这个函数会遍历通知链中所有的元素,然后依次调用每一个的回调函数(即完成通知动作)。
2.2.1节讲述的4种通知链也都有其对应的通知函数,这些函数也都是最终调用notifier_call_chain 函数完成事件的通知。
更多关于通知链的内容,参见参考文献。
由以上的叙述,“通知链”技术可以概括为:事件的被通知者将事件发生时应该执行的操作通过函数指针方式保存在链表(通知链)中,然后当事件发生时通知者依次执行链表中每一个元素的回调函数完成通知。
2.3 时钟初始化内核初始化部分( start_kernel 函数)和时钟相关的过程主要有以下几个:1.tick_init()2.init_timers()3.hrtimers_init()4.time_init()其中函数 hrtimers_init() 和高精度时钟相关(本文暂不介绍这部分内容)。
下面将详细介绍剩下三个函数。
2.3.1 tick_init 函数函数 tick_init() 很简单,调用 clockevents_register_notifier 函数向clockevents_chain 通知链注册元素: tick_notifier。
这个元素的回调函数指明了当时钟事件设备信息发生变化(例如新加入一个时钟事件设备等等)时,应该执行的操作,该回调函数为 tick_notify (参见2.4节)。
2.3.2 init_timers 函数函数 init_timers() 的实现如清单2-1(省略了部分和主要功能无关的内容,以后代码同样方式处理)清单2-1 init_timers 函数void __init init_timers(void){int err = timer_cpu_notify(&timers_nb, (unsignedlong)CPU_UP_PREPARE,(void*)(long)smp_processor_id());……register_cpu_notifier(&timers_nb);open_softirq(TIMER_SOFTIRQ,run_timer_softirq, NULL);}代码解释:∙初始化本 CPU 上的软件时钟相关的数据结构,参见3.2节∙向 cpu_chain 通知链注册元素 timers_nb ,该元素的回调函数用于初始化指定 CPU 上的软件时钟相关的数据结构∙初始化时钟的软中断处理函数2.3.3 time_init 函数函数 time_init 的实现如清单2-2清单2-2 time_init 函数void __init time_init(void){……init_tsc_clocksource();late_time_init = choose_time_init();}函数 init_tsc_clocksource 初始化 tsc 时钟源。
choose_time_init 实际是函数 hpet_time_init ,其代码清单2-3清单2-3 hpet_time_init 函数void __init hpet_time_init(void){if (!hpet_enable())setup_pit_timer();setup_irq(0, &irq0);}函数 hpet_enable 检测系统是否可以使用 hpet 时钟,如果可以则初始化 hpet 时钟。
否则初始化 pit 时钟。
最后设置硬件时钟发生时的处理函数(参见2.4节)。
初始化硬件时钟这个过程主要包括以下两个过程(参见 hpet_enable 的实现):1.初始化时钟源信息( struct clocksource 类型的变量),并将其添加到时钟源链表中,即 clocksource_list 链表(参见图2-1)。
2.初始化时钟事件设备信息( struct clock_event_device 类型的变量),并向通知链 clockevents_chain 发布通知:一个时钟事件设备要被添加到系统中。