欢迎来到皮皮网网首页

【raw-os 源码】【自在源码网网站】【小程序画布源码】Linux时钟源码

来源:openharmony源码目录 时间:2024-11-25 00:50:31

1.简单了解Linux系统中clock命令的钟源使用方法
2.Linux驱动开发头文件剖析(二十四):<linux/ktime.h>、<linux/timekeeping.h>、钟源<linux/timekeeping32.h>
3.浅析 Linux RTC 实时时钟
4.在各种Linux系统的钟源服务器上设置时间同步的方法
5.Linux时间子系统之:时钟源
6.一文总结linux的clk子系统

Linux时钟源码

简单了解Linux系统中clock命令的使用方法

       clock 命令:设置或者显示硬件时间的近似值

必要参数

       --adjust 自动调整硬件时钟时间

       --debug 运行时,输出详细的钟源处理过程

       --directisa 不通过设备文件/etc/rtc,直接对硬件时钟进行存取

       --getepoch 输出硬件时钟的钟源数值到标准输出

       --hctosys 时钟同步,使系统时钟和硬件时钟同步

       --se--date 设置硬件时间

       --show 显示硬件时钟到标准输出

       --systohc 系统时间写入硬件时钟

       --test 进行测试

       --utc 将硬件时钟的钟源raw-os 源码时间设置为UTC

选择参数

       -setepoch-epoch=年份 设置硬件时钟的年份

       --version 显示版本信息

例:

       

       复制代码

       代码如下:

[root@localhost www]# clock #显示硬件时钟时间

       年月日 星期六 时分秒 -0. seconds

       复制代码

       代码如下:

[root@localhost www]# clock --utc #显示utc硬件时钟时间

       年月日 星期六 时分秒 -0. seconds

       复制代码

       代码如下:

[root@localhost www]# clock --set --date="// ::" #设置硬件时钟时间

       复制代码

       代码如下:

[root@localhost www]# clock

       年月日 星期六 时分秒 -0. seconds

Linux驱动开发头文件剖析(二十四):<linux/ktime.h>、<linux/timekeeping.h>、钟源<linux/timekeeping.h>

       ktime.h

       定义了内核时间相关的钟源数据结构和函数,核心是钟源ktime_t,它表示纳秒级内核时间,钟源不随系统时钟变化。钟源ktime.h还包含用于内核时间操作的钟源宏和函数。

       ktime.h是钟源timer.h的一部分,对驱动开发中使用定时器至关重要。钟源

       ktime.h内含ktime_get、钟源ktime_set等函数,用于获取和设置时间值。

       对比另一个用于一般时间操作的头文件,ktime.h更多关注内核时间。

       ktime_t本质为s类型,ktime_set用于将秒数和纳秒数转换为ktime_t时间值。

       ktime_add_ns和ktime_sub_ns用于对ktime_t时间变量进行加减操作。

       timespec_to_ktime和ktime_to_timespec用于结构体转换。

       ktime_compare用于比较ktime_t大小。

       ktime_after和ktime_before用于比较时间点。

       ktime_divns函数用于ktime_t时间除以纳秒值。

       ktime_to_us和ktime_to_ms将时间值转换为微秒和毫秒。

       ktime_us_delta和ktime_ms_delta用于时间差计算。

       ktime_add_safe安全相加ktime_t值。

       ktime_to_timespec_cond进行转换并返回成功标志。

       ns_to_ktime和ms_to_ktime进行单位转换。

       timekeeping.h

       时间管理相关的头文件,涉及系统、真实、自在源码网网站启动、TAI时间等操作,包括大量函数声明。

       timekeeping_init初始化时间管理机制。

       timekeeping_suspended标志表示时间管理状态。

       update_process_times更新进程时间统计信息。

       xtime_update更新全局系统时间。

       do_settimeofday设置系统时间。

       do_sys_settimeofday设置系统时间并处理时区。

       ktime_get_resolution_ns获取系统时钟分辨率。

       ktime_get_real获取真实时间。

       ktime_get_coarse_real获取低精度真实时间。

       do_settimeofday和do_sys_settimeofday用于时间设置。

       系统时间相关函数如ktime_get_boottime和ktime_get_clocktai。

       ktime_get_coarse用于低精度时间获取。

       ktime_get_coarse_ns等函数用于纳秒级时间获取。

       ktime_mono_to_real将单调时间转换为真实时间。

       ktime_get_ns等函数用于系统时间、真实时间等纳秒级获取。

       ktime_get_boottime_ts和ktime_get_coarse_boottime_ts用于获取启动时间。

       ktime_get_boottime_seconds获取秒级启动时间。

       ktime_get_clocktai_ts和ktime_get_coarse_clocktai_ts用于获取TAI时间。

       ktime_get_clocktai_seconds获取秒级TAI时间。

       ktime_timestamps定义时间戳字段。

       system_time_snapshot和system_device_crosststamp定义系统时间快照和设备交叉时间戳。

       system_counterval_t用于系统计数器值。

       get_device_system_crosststamp获取设备系统交叉时间戳。

       ktime_get_snapshot和ktime_get_fast_timestamps用于获取系统时间戳。

       persistent_clock_is_local标识持久性时钟是否本地。

       read_persistent_clock和read_persistent_wall_and_boot_offset用于读取持久性时钟。

       update_persistent_clock用于更新持久性时钟。

       timekeeping.h

       过时文件,内容已迁移至timekeeping.h。小程序画布源码仅包含一个函数。

       用于返回当前时间。

       时间管理头文件ktime.h和timekeeping.h提供了内核时间操作的全面支持,从时间结构定义到时间转换、时间比较直至时间设置和获取,满足驱动开发中对时间处理的需求。timekeeping.h作为过时文件,其内容已整合至timekeeping.h中,未来将被删除。

浅析 Linux RTC 实时时钟

       在Linux系统中,实时时钟(RTC)是一种常见且至关重要的外设,用于记录时间信息,即使在电源断开后也能通过电池维持运行。许多芯片,如I.MX6ULL,内置了RTC功能,如SNVS,它包含低功耗外设,配合外接的.KHz晶振来提供精确的时间基准。RTC设备在Linux内核中被抽象为rtc_device结构,通过标准的字符设备驱动接口,如open、read、write和ioctl等进行操作。

       RTC驱动程序是内核的核心组件,它定义了rtc_device的底层操作,包括rtc_class_ops结构,这个结构包含了所有RTC设备共用的操作函数,如read_time和set_time等。驱动程序的内核实现主要在drivers/rtc/rtc-dev.c文件中,通过ioctl函数,用户空间应用可以设置或读取时间,以及闹钟等信息。薪火打赏源码

       在Linux内核中,RTC驱动的编写通常由芯片制造商提供,例如,对于I.MX6ULL的SNVS RTC驱动,可以通过DTSI文件(如imx6ull.dtsi)找到对应的驱动文件drivers/rtc/rtc-snvs.c。驱动程序中的关键函数如snvs_rtc_read_time,用于读取RTC时间,其内部调用rtc_read_lp_counter函数读取RTC计数值。

       设置和查看RTC时间在Linux中非常直观。系统启动时,可以使用date命令查看当前时间;通过date -s可以设置系统时间;而将系统时间写入RTC中,则可以使用hwclock -w命令。总的来说,Linux的RTC功能为用户提供了一种可靠的时间管理手段。

在各种Linux系统的服务器上设置时间同步的方法

       独立主机

       rm -rf /etc/localtime

       ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #修改时区到东8区。

       date -R #查看的时区设置。

       接下来调整系统时间与时间服务器同步

       Debian系统安装NTP校时包:

       代码如下:

       apt-get install ntpdate #安装ntp

       CentOS系统安装NTP校时包:

       代码如下:

       yum -y install ntpdate ntp #安装ntp

       Ubuntu系统安装NTP校时包:

       代码如下:

       sudo apt-get install -y ntpdate ntp

       修改/etc/ntp.conf

       vi /etc/ntp.conf 就会看到以下内容:

       代码如下:

       server 0.centos.ntp.org

       server time.windows.com

       server time.nist.gov

       这是默认的ntp同步服务器,大家可以自己改,全球ntp服务器地址:.pool.ntp.org //这中国的ntp服务器

       server time-a.nist.gov

       server time.windows.com

       server time.nist.gov

       然 后保存退出(vi退出的方法见:.pool.ntp.org #调试查看时间差异

       ntpdate cn.pool.ntp.org #同步时间

       date -R # 检查时间是否同步

       修改 ntp 的配置文件

       代码如下:

       vi /etc/sysconfig/ntpd

       SYNC_HWCLOCK=yes #同步独立主机的硬件时钟

       #配置开机启动ntp服务,定期同步时间

       chkconfig --levels ntpd on #启动ntp同步

       /etc/init.d/ntpd start

       XEN VPS

       最好是安装ntp服务,这样可以解决vps在重启后时间不准的问题。有时候,依靠母鸡的硬件时钟,总是差七八分钟。实在没辙了。而已很多的web服务,如Google Authenticator等,如果时间不同步,会导致无法验证的地步,自然就网站都登陆不上了。

       代码如下:

       rm -rf /etc/localtime

       ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #修改时区到东8区。

       date -R #查看的时区设置。

       接下来调整系统时间与时间服务器同步

       Debian系统安装NTP校时包:

       代码如下:

       apt-get install ntpdate #安装ntp

       CentOS系统安装NTP校时包:

       代码如下:

       yum -y install ntpdate ntp #安装ntp

       Ubuntu系统安装NTP校时包:

       代码如下:

       sudo apt-get install -y ntpdate ntp

       修改/etc/ntp.conf

       vi /etc/ntp.conf 就会看到以下内容:

       代码如下:

       server 0.centos.ntp.org

       server time.windows.com

       server time.nist.gov

       这是kong源码多少行默认的ntp同步服务器,大家可以自己改,全球ntp服务器地址:.pool.ntp.org //这中国的ntp服务器

       server time-a.nist.gov

       server time.windows.com

       server time.nist.gov

       然 后保存退出(vi退出的方法见:.pool.ntp.org #调试查看时间差异

       ntpdate cn.pool.ntp.org #同步时间

       date -R # 检查时间是否同步

       #配置开机启动ntp服务,定期同步时间

       chkconfig --levels ntpd on #启动ntp同步

       /etc/init.d/ntpd start

       #先设置XEN 的VPS使用和系统无关的时间模式

       echo 1 /proc/sys/xen/independent_wallclock

       然后尝试上面独立主机的配置方法即可。通过配置时间正确后,编辑系统配置文件,让配置永久生效。

       代码如下:

       vi /etc/sysctl.conf

       xen.independent_wallclock=1 #在文件中增加并且保存

       OpenVZ VPS

       (Burst VPS 采用)

       OpenVZ的VPS直接从物理机读取时间不允许对主机进行时间修改,你只需修改时区。我还没用过openvz vps,所以,不清楚能否用ntp服务不,可以试试安装ntp service 看。如果可以的话,请告诉我。

       代码如下:

       rm -rf /etc/localtime

       ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #修改时区到东8区。

       date -R #查看时间和时区

       此时如果时间和时区都正确,配置成功,时间如果不对,需要联系主机服务商的技术支持,让他们把母鸡(物理机)时间同步,你的VPS时间就会正常。

Linux时间子系统之:时钟源

       探索Linux内核的时间奥秘:时钟源的精密构建

       在Linux内核的精密世界里,时钟源扮演着时间基准的角色,它像一台隐形的精确计时器,通过硬件计数器确保我们与时间的精准同步。struct clocksource是这个系统的核心结构,其中的关键组件,如rating(精度,范围1-,数值越高,时间精度越优)、read回调,以及mult和shift,共同构建了这个时间测量的基石。rating值在1-范围内用于特殊用途,而-区间则为常规选择,read函数则是时间计数的窗口,mult和shift则是处理计数与频率F之间转换的魔力公式,内核采用位精度进行计算。

       为了确保时间更新的稳定性和准确性,clocksource_register_hz在初始化时,通过一系列复杂的计算,确定了mult、shift的值,并为最大闲置时间设定了限制。同时,clocksource_register_scale负责性能排序和监控,而watchdog就像一个警惕的眼睛,一旦发现性能偏差超出阈值,就会标记该时钟源为不稳定状态。

       在Linux启动的早期阶段,系统首先注册基于jiffies的clocksource,尽管其评级较低,但这正是基础中的基础。想要深入了解这个时钟源体系的更多细节,你可以在Linux内核源码分析学习群中发现丰富的资源。

       深入理解clocksource的运作机制

       - clocksource_jiffies结构体,其设计为每个时钟周期提供1/HZ秒的精度,评级为1,是默认选择,除非有特定需求,否则系统会采用这个基础时钟源。

       - init_jiffies_clocksource函数是初始化和注册这个时钟源的关键步骤,它确保了clocksource_jiffies的顺利启动。

       - clocksource_default_clock提供了一种可选的默认时钟源,通常设置为clocksource_jiffies,但在特定场景下,可以被自定义以适应特定需求。

       - clocksource_done_booting则在系统启动的后期,根据系统的实际情况,选择最合适的clocksource,并通知timekeeping系统进行适时的时间更新,确保系统时间的精准与一致性。

       在这个看似简洁的时间管理背后,Linux内核的时钟源系统蕴含着精细的逻辑与优化,每个组件都在默默地守护着系统的稳定和准确性。深入理解这些细节,对于任何想要驾驭Linux内核的开发者来说,无疑是一把打开时间秘密的钥匙。

一文总结linux的clk子系统

       Linux内核的CLK子系统是用于提供模块和底层时钟操作接口的关键组件。其设计旨在简化与复杂时钟树的交互,确保系统高效运行。

       CLK子系统允许设备驱动程序通过特定API访问时钟信号,同时,硬件供应商需提供与底层硬件交互的接口。Linux内核中包含与CLK框架相关的源文件,提供各种时钟操作接口。

       驱动程序中常用的API集成了原子和非原子操作,以确保时钟启用或停用的正确执行。这些操作可能需要CPU睡眠,特别是在启动依赖于长时间稳定状态的时钟,如PLL时钟时。因此,为了简化调用,内核封装了`clk_prepare_enable`和`clk_disable_unprepare`接口。

       CLK子系统的核心数据结构包括`struct clk_notifier`、`struct clk_core`、`struct clk_ops`等,这些结构共同描述了时钟节点、核心操作和回调函数。它们提供了时钟设备的描述和控制机制,如分频、倍频、多路复用和组合时钟。

       为了调试CLK子系统,开发者可以利用debugfs文件系统,通过命令查看系统中的时钟树结构。此外,内核提供了一个初始化函数`clk_debug_init`,用于创建调试目录或文件,便于在用户空间获取时钟信息。

       在设计CLK驱动时,硬件供应商需实现对应的`struct clk_ops`回调函数,并调用`clk_register`注册到内核。这允许驱动程序方便地获取和操作特定的时钟资源。在驱动层,开发者可以使用各种API来获取和控制时钟节点,以实现对外设的控制。

       时钟框架在Linux设备驱动设计中扮演着核心角色,几乎所有与外设相关的驱动实现都需要使用到CLK子系统。通过使用CLK子系统,Linux内核能够提供灵活、高效和安全的时钟管理机制,确保系统性能和稳定性。

Linux kernel中的CPU时钟管理-(3)

       Linux kernel中的CPU时钟管理在rockchip的实现中展现出了清晰的结构和统一的API。主要包含时钟系统结构、初始化方式以及RK的具体实现。首先,时钟系统代码集中在drivers/clk/rockchip目录下,包含了CCF框架所需的关键功能如使能、复用和分频等,主体文件 clk-rk.c负责核心管理。

       初始化过程中,kernel在驱动初始化阶段处理时钟,不同于CPU初始化,它在bootrom和U-Boot配置基本时钟后进行。CLK_OF_DECLARE宏用于声明初始化函数,通过它声明的函数负责配置时钟。RK的时钟初始化涉及cru和pmu,以cru为例,其核心初始化基于rockchip_clk_provider数据结构,通过rk.dtsi文件中的syscon寄存器来定义时钟控制。

       PLL初始化是核心部分,芯片内置8个PLL,如LPLL、BPLL等,通过struct rockchip_pll_clock描述并固化配置。通过rockchip_clk_register_pll函数进行初始化,涉及 PLL的控制函数如频率设置等。复用、分频和GATE等控制功能也通过rockchip_clk_branch数据结构进行配置和注册。

       其他时钟控制项包括一些高级设置,如上电后固定开启某些时钟,以及通过rk_cru_critical_clocks进行定制。最后,所有时钟注册后,会更新到RK的时钟信息表,以便于查询和管理。

Linux下实现服务器时间修改的方法linux修改服务器时间

       Linux是一款广受欢迎的类Unix操作系统,它结合了强大的X Window系统和完善的Shell编程接口,同时支持网络及多用户同时访问。而服务器时间设置是Linux服务器上常见的操作之一,比如需要修改时间以便系统正常运行;本文将介绍Linux下实现服务器时间修改的方法。

       一、查看系统当前的时间

       1、登录Linux系统,在控制台输入date命令,查看系统当前的时间;

       [root@localhost ~]# date

        Thu Feb 7 :: CST

       示例中当前时间是 年2月7日 时分秒。

       二、修改服务器时间

       1、使用date命令修改系统时间。如果要将系统时间设置为年月日,使用date –s “--”命令,如下:

       [root@localhost ~]# date –s “--”

       Tue Dec :: CST

       2、使用hwclock命令可以修改硬件时钟,如将硬件时钟设为年月日,使用hwclock –w –set –date “--” 命令,如下:

       [root@localhost ~]# hwclock –w –set –date “--”

       Tue Dec :: CST

       三、同步服务器时间

       1、使用ntpdate命令,你可以从国家钟记号站时间服务器同步服务器时间,例如:

       [root@localhost ~]#ntpdate 0.asia.pool.ntp.org

       2、使用rdate命令,你可以从远程服务器同步服务器时间,例如:

       [root@localhost ~]#rdate rdate -s time.nist.gov

       以上就是Linux下实现服务器时间修改的方法,通过使用这些命令可以实现服务器时间修改,从而提高系统运行的稳定性和可用性。