/*** tick_init - initialize the tick control** Register the notifier with the clockevents framework*/
void __init tick_init(void)
{clockevents_register_notifier(&tick_notifier);//这里用到了通知链技术,可以参考博文“内核通知链机制的原理及实现”
}static struct notifier_block tick_notifier = {.notifier_call = tick_notify,
};/*** clockevents_register_notifier - register a clock events change listener*/
int clockevents_register_notifier(struct notifier_block *nb)
{unsigned long flags;int ret;raw_spin_lock_irqsave(&clockevents_lock, flags);            //get the spin lock ret = raw_notifier_chain_register(&clockevents_chain, nb);    //registerraw_spin_unlock_irqrestore(&clockevents_lock, flags);        //unlockreturn ret;
}/**    Raw notifier chain routines.  There is no protection;*    the caller must provide it.  Use at your own risk!*//***    raw_notifier_chain_register - Add notifier to a raw notifier chain*    @nh: Pointer to head of the raw notifier chain*    @n: New entry in notifier chain**    Adds a notifier to a raw notifier chain.*    All locking must be provided by the caller.**    Currently always returns zero.*/
int raw_notifier_chain_register(struct raw_notifier_head *nh,struct notifier_block *n)
{return notifier_chain_register(&nh->head, n);
}

可以看到,tick_init的作用就是调用 clockevents_register_notifier 函数向 clockevents_chain 通知链注册元素: tick_notifier。这个元素的回调函数指明了当时钟事件设备信息发生

变化(例如新加入一个时钟事件设备等等)时,应该执行的操作,该回调函数为 tick_notify。

tick_init();相关推荐

  1. Linux内部的时钟处理机制全面剖析

    Linux内部的时钟处理机制全面剖析 在 Linux 操作系统中,很多活动都和时间有关,例如:进程调度和网络处理等等.所以说,了解 Linux 操作系统中的时钟处理机制有助于更好地了解 Linux 操 ...

  2. ARM linux的启动部分源代码简略分析

    ARM linux的启动部分源代码简略分析 以友善之臂的mini2440开发板为平台,以较新的内核linux-2.6.32.7版本为例,仅作说明之用. 当内核映像被加载到RAM之后,Bootloade ...

  3. 动静结合学内核:linux idle进程和init进程浅析

    刘柳 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 + titer1@qq.com 退休的贵族进程 ...

  4. 【Linux 内核 内存管理】Linux 内核内存布局 ④ ( ARM64 架构体系内存分布 | 内核启动源码 start_kernel | 内存初始化 mm_init | mem_init )

    文章目录 一.ARM64 架构体系内存分布 二.Linux 内核启动源码 start_kernel 三.内存初始化源码 mm_init 四.内存初始化源码 mem_init 一.ARM64 架构体系内 ...

  5. (转)start_kernel 代码分析

    head-common.S ---具体做了哪些动作 ---跳转到init/main.c ---b start_kernel //关于start_kernel的强文深入理解linux内核,第八章 mai ...

  6. Android LK Bootlaoder启动概览

    LK - Little kernel 1. 起源地: bootable\bootloader\lk\arch\arm (1)rule.mk $(BUILDDIR)/trustzone-test-sys ...

  7. Linux内核启动过程概述

    Hi!大家好,我是CrazyCatJack.今天给大家带来的是Linux内核启动过程概述.希望能够帮助大家更好的理解Linux内核的启动,并且创造出自己的内核^_^ Linux的启动代码真的挺大,从汇 ...

  8. 内核启动流程—走马观花

    汇编阶段: ensure svc mode and irqs disabled @76确保cpu运行与svc模式,中断关闭 get processor id @78获取cpu id r5=procin ...

  9. 十天学Linux内核之第七天---电源开和关时都发生了什么

    十天学Linux内核之第七天---电源开和关时都发生了什么 原文:十天学Linux内核之第七天---电源开和关时都发生了什么 说实话感觉自己快写不下去了,其一是有些勉强跟不上来,其二是感觉自己越写越差 ...

最新文章

  1. Spring: 依赖注入的实现
  2. 从网页(WEB)登录SAP
  3. php操作kafka
  4. eclipse debug(程序调试)单步执行 简述
  5. 整个互联网真的是呈现出一种勃勃的生机
  6. 【大数据新手上路】“零基础”系列课程--MySQL 数据整库迁移到 MaxCompute
  7. php中图片怎么加样式,html5实现各种图片样式实例用法汇总
  8. 更新CentOS中的python(从2.6.X到2.7.X)
  9. 小视频app开发过程中关于转码问题的经验总结
  10. 红帽Linux平台下安装Code::Blocks
  11. Labview完全卸载工具msiblast NI
  12. 地理信息数据 中国省级行政区划 SHP
  13. 调用百度API 实现车型识别
  14. 双绞线的规范和制作经验谈
  15. 后盾网 html语言视频教程,后盾网HTML5视频教程-
  16. 耐人寻味的Temp文件(二)
  17. ezw证件照芯片压缩算法
  18. Contrastive Learning Based on Transformer for Hyperspectral Image Classification
  19. 单片机的调试接口 JTAG SWD
  20. 仿头条新闻资讯dz模板/Discuz新闻资讯商业版GBK模板

热门文章

  1. 如果兔子拼命奔跑,那乌龟又如何持续前行?(转载)
  2. Linux桌面图标锁定不让移动,桌面布局被锁定不能移动图标了怎么办?
  3. 超实用!6种方法教你轻松删除Word空白页
  4. 原生js实现移动端选择器插件 H5
  5. Java Web权限管理设计及实现
  6. 一、Docker—简介及安装
  7. “错误 1067:进程意外终止”的原因和解决方案
  8. 为什么公司内部服务禁止访问外网?
  9. 嵌入式开发环境配置一-arm-gcc安装配置
  10. Python爬虫入门学习例子之煎蛋网(福利哦)