Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1258255
  • 博文数量: 254
  • 博客积分: 1586
  • 博客等级: 上尉
  • 技术积分: 2295
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-15 16:38
个人简介

linux学习中

文章分类

全部博文(254)

文章存档

2016年(6)

2015年(2)

2014年(74)

2013年(93)

2012年(12)

2011年(2)

2010年(51)

2009年(14)

分类: LINUX

2014-04-28 11:25:52

mips时钟中断初始化

相关函数有:1 tick_init(); 2 init_timers(); 3 hrtimers_init(); 4 time_init();
1 tick_init()
 注册一个时钟消息链的框架,即把 struct notifier_block tick_notifier 实体结构加入到clockevents_chain链中,clockevents_chain链是一个struct raw_notifier_head结构的表头
init_timers()
  首先初始化每个cpu的基准定时器和一些统计.注册cpu的时钟消息处理
回调函数,即把struct notifier_block __cpuinitdata timers_nb实体加入到全局的cpu_chain链中,cpu_chain链是一个struct raw_notifier_head结构的表头.在打开软时钟中断.
3 hrtimers_init()
  高精度时钟有关
4 time_init()
  初始化和平台相关的时钟频率.初始化时钟消息,这里以MIPS 74k为例
  函数调用过程:
  time_init()
     plat_time_init()
     mips_clockevent_init()
         r4k_clockevent_init()
            clockevents_register_device()
                __raw_notifier_call_chain()发送消息到clockevents_chain链
                  tick_notify()
                    tick_check_new_device()
                       tick_setup_device()
                         tick_setup_periodic()
                            tick_set_periodic_handler()//重新初始化时钟设备的消息处理函数cd->event_handler

      init_mips_clocksource()
  r4k_clockevent_init()函数先注册一个时钟消息的设备到clockevent_devices链中,然后发送一个CLOCK_EVT_NOTIFY_ADD消息到clockevents_chain链,最终该消息发送到tick_notifier->notifier_call()函数(tick_notify),该函数在根据消息类型路由到了tick_check_new_device()函数.进过一大堆的检查.最终把新的旧的struct clock_event_device加入到clock_released链中,把新的struct clock_event_device加入到struct tick_device结构的evtdev指针.在重新初始化时钟设备的消息处理函数cd->event_handler,使其指向tick_handle_periodic(),并最终在时钟中断产生时时的jiffies_64加1,在注册一个时钟中断的action(c0_compare_irqaction)
阅读(1530) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~