首页 > 系统相关 >Linux 内核时钟架构之时钟事件设备注册

Linux 内核时钟架构之时钟事件设备注册

时间:2023-06-01 10:31:54浏览次数:47  
标签:register clock clockevents Linux dev 内核 delta device 时钟

void clockevents_register_device(struct clock_event_device *dev);
 
void clockevents_config_and_register(struct clock_event_device *dev,
         u32 freq, unsigned long min_delta,
         unsigned long max_delta);
 
 
 
 
 
相关的一个是配置函数
 
void clockevents_config(struct clock_event_device *dev, u32 freq);
 
 
 
 
 
 
 
/**
 * clockevents_register_device - register a clock event device
 * @dev: device to register
 */
void clockevents_register_device(struct clock_event_device *dev)
{
 unsigned long flags;
 /* Initialize state to DETACHED */
 clockevent_set_state(dev, CLOCK_EVT_STATE_DETACHED);
 if (!dev->cpumask) {
  WARN_ON(num_possible_cpus() > 1);
  dev->cpumask = cpumask_of(smp_processor_id());
 }
 raw_spin_lock_irqsave(&clockevents_lock, flags);
 list_add(&dev->list, &clockevent_devices);
 tick_check_new_device(dev);
 clockevents_notify_released();
 raw_spin_unlock_irqrestore(&clockevents_lock, flags);
}
EXPORT_SYMBOL_GPL(clockevents_register_device);
 
 
 
 
 
/**
 * clockevents_config_and_register - Configure and register a clock event device
 * @dev: device to register
 * @freq: The clock frequency
 * @min_delta: The minimum clock ticks to program in oneshot mode
 * @max_delta: The maximum clock ticks to program in oneshot mode
 *
 * min/max_delta can be 0 for devices which do not support oneshot mode.
 */
void clockevents_config_and_register(struct clock_event_device *dev,
         u32 freq, unsigned long min_delta,
         unsigned long max_delta)
{
 dev->min_delta_ticks = min_delta;
 dev->max_delta_ticks = max_delta;
 clockevents_config(dev, freq);
 clockevents_register_device(dev);
}
EXPORT_SYMBOL_GPL(clockevents_config_and_register);
 
 
 
 
 
 
 
 
 

void clockevents_config(struct clock_event_device *dev, u32 freq)
{
 u64 sec;
 if (!(dev->features & CLOCK_EVT_FEAT_ONESHOT))
  return;
 /*
  * Calculate the maximum number of seconds we can sleep. Limit
  * to 10 minutes for hardware which can program more than
  * 32bit ticks so we still get reasonable conversion values.
  */
 sec = dev->max_delta_ticks;
 do_div(sec, freq);
 if (!sec)
  sec = 1;
 else if (sec > 600 && dev->max_delta_ticks > UINT_MAX)
  sec = 600;
 clockevents_calc_mult_shift(dev, freq, sec);
 dev->min_delta_ns = cev_delta2ns(dev->min_delta_ticks, dev, false);
 dev->max_delta_ns = cev_delta2ns(dev->max_delta_ticks, dev, true);
}

标签:register,clock,clockevents,Linux,dev,内核,delta,device,时钟
From: https://blog.51cto.com/u_11860992/6392735

相关文章

  • Linux 内核时钟之timer初始化
    init_timersvoid__initinit_timers(void){init_timer_cpus();init_timer_stats();open_softirq(TIMER_SOFTIRQ,run_timer_softirq);}staticvoid__initinit_timer_cpu(intcpu){structtimer_base*base;inti;for(i=0;i<NR_BASES;i+......
  • Linux 添加redis守护进程
    1、编写启动服务文件 /lib/systemd/system/redis.service[Unit]Description=Theredis-serverProcessManagerDocumentation=https://redis.io/After=network.target[Service]Type=forking#根据自己的redis路径启动和停止ExecStart=/usr/local/redis/bin/redis-server/usr/l......
  • 走进Linux编程的大门
    随着Linux的不断普及,使用Linux的人也越来越多了。然而在Linux中如何进行程序设计,用什么样的开发工具好呢?本文就以我初学Linux编程的一点心得体会,和大家共同探讨。在Linux中进行程序设计,可以使用各种编程语言和开发工具,以下是一些常用的方法:1、C/C++编程C/C++是Linux系统中......
  • Linux系统下C语言的编程技巧
    Linux系统能够为人们提供更加安全实用的效果,保证计算机系统能够稳定的运行。利用Linux系统下首先要进行C语言的编程,掌握编程的技巧能够更好的发挥计算机的作用。如何掌握Linux系统下计算机C语言的编程技巧是计算机发展的关键要素。本文对Linux系统下计算机C语言的编程技巧进行相......
  • 一分钟学一个 Linux 命令 - pwd
    前言大家好,我是god23bin。欢迎大家继续围观《一分钟学一个Linux命令》,每天只需一分钟,记住一个Linux命令不成问题。本篇文章将聚焦于pwd命令,一个超级简单又常用的命令。在接下来的内容中,我将快速介绍pwd命令的使用方法,希望能够帮助大家更好地理解和应用。什么是pwd命......
  • linux crypt()函数使用总结
    linuxcrypt()函数使用总结 原型:char*crypt(constchar*key,constchar*salt);标准说明:crypt()算法会接受一个最长可达8字符的密钥(即key),并施以数据加密算法(DES)的一种变体。salt参数指向一个两个字符的字符串,用来改变DES算法。该函数返回一个指针,指向长度13个字符......
  • linux - passwd结构体
     #include<stdio.h>#include<pwd.h>#include<unistd.h>#include<sys/types.h>intmain(){structpasswd*tmp=NULL;tmp=getpwuid(geteuid());printf("username:%s\n",tmp->pw_name);printf("userp......
  • Linux环境下耗尽cpu占用率的指令
     模拟cpu打满foriin`seq1$(cat/proc/cpuinfo|grep"physicalid"|wc-l)`doddif=/dev/zeroof=/dev/null&done 模拟内存打满生产大文件ddif=/dev/zeroof=testbs=1Mcount=2000然后vi打开 vimtest&这种也可以。使用top命令查看linux系统cpu使用情况:#......
  • 微软正在研究使 Linux 脚本更安全
    导读据悉,微软正在研究使 Linux 脚本更安全微软正在研究使Linux 脚本更安全在本周的Linux安全峰会上,systemd的创建者LennartPoettering发表了演讲,他在过去的一年中被微软雇佣,他和微软的其它工程师们正在努力提高Linux的安全性。微软的工程师发表的演讲介绍了......
  • 2023.5.31 Linux系统⽤户管理
    1.⽤户基本概述1.1⽤户相关的命令1.2⽤户创建的原理2.⽤户密码管理3.组的基本管理4.⽤户身份切换5.⽤户身份提权6.⽇志相关审计1.⽤户基本概述Linu属于多⽤户操作系统,在windows中,可以创建多个⽤户,但不允许同⼀时间多个⽤户进⾏系统登陆,但是Linux可以同时⽀持多个⽤户同时登陆......