Linux时间子系统之(十二):periodic tick

作者:linuxer 发布于:2014-12-11 18:59 分类:时间子系统

tick device layer是clock event core模块的用户,tick device layer利用clock event core模块提供的接口实现了各种tick device功能:周期性tick、tickless mode、broadcast tick等。本文从最简单的周期性tick开始,描述tick device的基本概念以及周期性tick的工作原理。

阅读全文>>

标签: 周期性tick periodic tick

评论(7) 浏览(22791)

Linux时间子系统之(十六):clockevent

作者:linuxer 发布于:2014-12-9 19:56 分类:时间子系统

clockevent模块的代码位于linux/kernel/time/clockevents.c,是用来管理系统中的能够触发中断的timer硬件资源的一个模块,该模块的功能分成四个部分:

1)向上层的其它driver(我们称之clock event user)提供操作clock event的通用API。

2) 实现clock event控制的通用逻辑,这部分和硬件无关,我们也称之clock event core(其实内核有各种core、input core,USB core,I2C core等等,概念是类似)。 有了它,clock event user(例如high resolution timer)再也不用担心底层的硬件细节了,特别是底层的timer硬件是arch相关的时候(不要怀疑,linux kernel有过这样的时代)。

3)将和硬件相关的clock event控制逻辑封装成操作函数集,并向底层clockevent chip driver提供注册接口。这样,clock event控制的通用逻辑就可以直接调用底层操作函数,进行具体的硬件操作。

4)实现sysfs用户空间接口。

本文将分成4个章节,分别描述这四个部分的代码逻辑。

阅读全文>>

标签: clockevent

评论(31) 浏览(26334)

Linux时间子系统之(十七):ARM generic timer驱动代码分析

作者:linuxer 发布于:2014-12-2 10:47 分类:时间子系统

关注ARM平台上timer driver(clocksource chip driver和clockevent chip driver)的驱动工程师应该会注意到timer硬件的演化过程。在单核时代,各个SOC vendor厂商购买ARM core的IP,然后自己设计SOC上的peripherals,这里面就包括了timer的硬件。由于没有统一的标准,各个厂商的设计各不相同,这给驱 动工程师带来了工作量。然而,如果仅仅是工作量的话就还好,实际上,不仅仅如此。linux的时间子系统要求硬件timer提供下面两种能力:一是 free running的counter,此外需要能够在指定的counter值上产生中断的能力。有些硬件厂商会考虑到软件的需求(例如:PXA270的 timer硬件),但是有些硬件厂商做的就不够,例如:S3C2451的timer硬件。我们在写PXA270的timer硬件驱动的时候是毫无压力的, 而在写S3C2451的timer的驱动的时候,最大的愿望就是把三星的HW timer的设计人员拉出来打一顿。

进入多核时代后,ARM 公司提供了timer的硬件设计,集成在了自己的多核结构中。例如:在Cortex A15 MPcore的硬件体系结构中有一个HW block叫做Generic Timer(该硬件取代了A9中的global timer、private timer的功能),为系统提供了计时以及触发timer event的功能。

本文主要描述了Generic Timer的相关硬件知识以及在linux kernel中如何驱动该硬件。Generic Timer的代码位于linux-3.14/drivers/clocksource/目录下,该目录保存了所有clock source相关的driver,arm_arch_timer.c就是驱动Cortex A15 MPcore的Generic Timer的。

阅读全文>>

标签: armv7-timer arm_arch_timer

评论(72) 浏览(62546)

Linux时间子系统之(十五):clocksource

作者:linuxer 发布于:2014-12-1 19:03 分类:时间子系统

和洋葱一样,软件也是有层次的,内核往往需要对形形色色的某类型的驱动进行抽象,屏蔽掉其具体的特质,获取该类驱动共同的逻辑,而又根据这些逻辑撰写该类 驱动的抽象层。嵌入式系统总是会提供timer的硬件block,软件需要对timer硬件提供的功能进行抽象:linux kernel将timer类型的硬件抽象成两个组件,一是free running的counter,另外一个是指定的counter值上产生中断的能力。本文主要描述第一个组件,在内核中被称作clock source。

阅读全文>>

标签: 时间子系统 clocksource

评论(15) 浏览(33345)

Copyright @ 2013-2015 蜗窝科技 All rights reserved. Powered by emlog