日期:2014-05-16  浏览次数:20555 次

LINUX驱动分析之RTC(一)

*****************************************************************************************************/
  声明:本博内容均由
http://blog.csdn.net/lmm670原创,转载请注明出处,谢谢!
/*****************************************************************************************************/

     这里我们针对三星的S3C24XX系列进行RTC驱动框架的分析,关于RTC(实时时钟)的功能和硬件原理我就不在这里啰嗦了,相信大家都十分清楚,不清楚的可以google或者百度一下,我想通过RTC驱动和大家探讨一下linux驱动的一般框架,为大家在linux驱动的学习路上起到一个抛砖引玉的作用。那有哥们就要问了,为什么选择RTC驱动呢?就是因为它简单明了,大家都容易明白的东西才是好东西,好啦,废话不多说,开始进入正题:

      Linux常见的驱动在driver目录下都有一个文件夹,当然我们的RTC也不例外,我们进入kernel主目录下的drivers/rtc,发现下面包含了许多开发平台的RTC驱动,我们这里是以S3C24xx为主,所以我们要寻找的是“rtc-s3c.c”这个美人儿,她是我们要分析的核心;其他几个相关联的文件分别是:alarm.c, alarm-dev.c,class.c, hctosys.c, interface.c, rtc-dev.c.这几个文件就是我们这部戏的主角儿。

    看戏大家都喜欢去研究人物之间的关系,A喜欢B,B喜欢C,C又喜欢D…….这里我们也来先理顺一下这几个主角之间微妙的关系: 

    首先,当然是我们主角中的战斗机rtc-s3c.c,她是最顶层的直接和硬件打交道的驱动文件,每个平台,高通,marvell,三星都有自己的这部分,一般被命名为类似的”rtc-msm.c,rtc-pxa.c,rtc-s3c.c”;就像每个国家每个部落,总有一批底层工作者,在默默的为上层的骄奢淫逸,荣华富贵贡献着自己的血汗;

     rtc-s3c.c上面的是interface.c,顾名思义就知道是接口文件,它主要是对rtc-s3c.c进行封装,给上层提供统一的接口,屏蔽底层差异化的东东。

 Interface.c再往上就到了rtc-dev.c.,rtc-dev.c最终生成了/dev/rtc,上层的应用程序就是通过操作此文件来进行RTC的相关的设置系统时间,设置闹钟,等等。

所有整个人物关系图如下:

上层应用层序

        |

        |

        V

rtc-dev.c

        |

        |

        V

interface.c

       |

       |

       V

rtc-s3c.c

 

    好像三个文件就已经把整个RTC从底层到上层所有的东东都讲完了,那么还剩下几个文件干嘛呢?